Python 从flask中的用户获取正确的IP地址

Python 从flask中的用户获取正确的IP地址,python,email,ip,Python,Email,Ip,我在StackOverflow的这个帖子上看到: 答案对我来说很有用,但到目前为止,我只在本地主机上测试了它,我想确保IP地址实际上是来自用户的IP,而不是服务器本身 我之所以怀疑,是因为我尝试了不同的方法来测试这一点 #I'm using a Mail API, but here I will print for simplicity 'IP-address from user ' + request.remote_addr #retures 127.0.0.1 when running o

我在StackOverflow的这个帖子上看到:

答案对我来说很有用,但到目前为止,我只在本地主机上测试了它,我想确保IP地址实际上是来自用户的IP,而不是服务器本身

我之所以怀疑,是因为我尝试了不同的方法来测试这一点

 #I'm using a Mail API, but here I will print for simplicity
'IP-address from user ' + request.remote_addr #retures 127.0.0.1 when running on localhost
每当我尝试使用ipinfo API时,我都会从我的internet连接中获得实际的IP地址,而不是从localhost获取

url= 'http://ipinfo.io/json'
response = urlopen(url)
data = json.load(response)

IP=data['ip']
org=data['org']
city = data['city']
country=data['country']
region=data['region']  

 print('IP : {4} \nRegion : {1} \nCountry : {2} \nCity : {3} \nOrg : {0}'.format(org,region,country,city,IP))
#returns actual IP-address from my internet connection

如何确保后一个解决方案从用户处实际返回IP和位置,访问服务请求。远程地址提供请求的地址。如果您在本地主机上运行这个,那么是的,请求也将来自本地主机,因此这就是您获得的IP

如果您的服务器设置为某种特定的代理配置,那么您的服务器看到的所有传入请求都是代理的IP,那么您应该知道情况就是这样(因为您是这样设置服务器的),并确保代理以某种其他方式(即HTTP头)传递访问者的IP并特别使用它,而不是
request.remote\u addr
。再说一次,如果你处于这种情况,你就会知道这一点

当您从服务器向ipinfo.io发出请求时,ipinfo.io会将您的服务器地址视为请求的发起人,并将其用作您询问的IP地址。由于请求是通过internet发送的,它会看到您的公共internet地址。如果希望服务器查询访问者的IP,则服务器需要在请求中包含访问者的IP,否则ipinfo.io没有机会知道该IP。然后,请求需要如下所示:

url = 'http://ipinfo.io/' + request.remote_addr

这是一个正确的观点,谢谢你的回答。。。然而,每当我尝试这一点,我得到一个HTTP错误404。我认为我无法将IP地址直接传递到URL中。HTTPError:HTTP Error 404:Not FoundWell,文档中是这么说的:。您试图请求什么URL?也许ipinfo.io/127.0.0.1确实会产生一个404,因为这个地址不可能有任何信息。是的,现在我正在运行localhost,所以很可能就是这样,谢谢你指出这一点。我可以把它部署到测试服务器上,看看它是否能与acutal IP一起工作?我只是想确保,您可以将request.remote\u addr参数添加到url?就我所知,这是默认值…!?无论如何,请阅读他们的文档。