【问题标题】:How do i get Ip Address from Azure Function Http request with Python如何使用 Python 从 Azure Function Http 请求中获取 IP 地址
【发布时间】:2020-12-28 21:31:14
【问题描述】:

我如何使用 python 从这个请求 HTTP 中获取 IP 地址?我发现了一些使用 C# 的帖子,如下所示: Get remote IP address in Azure function

我有这个代码:

import logging
import json
import socket
import getpass
import os
from requests import get
import azure.functions as func
from azure.common.client_factory import    get_client_from_json_dict,get_client_from_cli_profile
from azure.mgmt.sql import SqlManagementClient
from azure.mgmt.resource import SubscriptionClient
from azure.common.credentials import ServicePrincipalCredentials

def main(req: func.HttpRequest) -> func.HttpResponse:
logging.info('Python HTTP trigger function processed a request.')

Myip = get('https://api.ipify.org').text
username = getpass.getuser()

return func.HttpResponse(
         f"List of IPs: {str(Myip)}",
         status_code=200
    )

图片显示本地请求的结果。

https://i.stack.imgur.com/AkZKm.png

【问题讨论】:

    标签: python azure function http


    【解决方案1】:

    您可以从 req 对象中的 x-forwarded-for 标头获取传入请求的源 IP。我使用以下代码记录它:

        if "x-forwarded-for" in req.headers:
            source_ip = req.headers["x-forwarded-for"].split(':')[0]
            logging.info("Incoming request from IP: " + source_ip)
    

    【讨论】:

      【解决方案2】:

      您的请求结果应保存到响应变量中。
      在阅读响应正文之前,您可以使用这段代码来获取 IP 地址。假设您的响应变量称为rsp

      print rsp.raw._fp.fp._sock.getpeername()
      

      这里有一个类似的问题=How do I get the IP address from a http request using the requests library?

      更多信息在这里,Python: get remote IP from HTTP request using the requests module

      更新 Python3.8 与请求 2.22.0

      resp = requests.get('https://www.google.com', stream=True)
      resp.raw._connection.sock.getsockname()
      

      【讨论】:

      • 您好特洛伊,感谢您的回答。我没有请求,我的 azure 函数收到 HTTP 请求,我的代码是: import logging import json import socket from requests import get import azure.functions as func from azure.common.client_factory import get_client_from_json_dict,get_client_from_cli_profile from azure.mgmt.sql import SqlManagementClient from azure.mgmt.resource import SubscriptionClient from azure.common.credentials import ServicePrincipalCredentials def main(req: func.HttpRequest) -> func.HttpResponse: logging.info('Python HTTP trigger function processed a request.')
      • 嗨特洛伊,我已经在帖子中添加了我的代码,我如何得到这个回复?我在天蓝色函数中有 func.HttpResponse
      • 是的,您的 Azure 函数正在接收请求。您在寻找传入的 IP 地址吗?或者 - 现在您已经更新了代码以发出额外的出站请求 - 您是否正在寻找 https://api.ipify.org 的 IP?哪一个?在这里看看这个问题=stackoverflow.com/questions/22492484/…
      猜你喜欢
      • 1970-01-01
      • 2014-04-24
      • 1970-01-01
      • 2015-08-31
      • 2011-07-31
      • 2017-06-26
      • 2017-11-15
      • 1970-01-01
      相关资源
      最近更新 更多