如何在Python 3.5.1中的请求模块中获取URL的IP地址

Swa*_*eep 2 python python-requests

Python版本:3.5.1

请求版本:2.9.1.

我试图在python的请求中获取url的IP地址,如下所示:如何使用请求库从http请求中获取IP地址?

import requests
rsp = requests.get('http://google.com', stream=True)
# grab the IP while you can, before you consume the body!!!!!!!!
print (rsp.raw._fp.fp._sock.getpeername())
# consume the body, which calls the read(), after that fileno is no longer available.
print (rsp.content)
Run Code Online (Sandbox Code Playgroud)

得到以下错误:

AttributeError: '_io.BufferedReader' object has no attribute '_sock'
Run Code Online (Sandbox Code Playgroud)

可能是某些版本问题.请帮忙.

PS无法在原帖中发表评论.

Mar*_*ers 5

你得到了BufferedReader实例 ; 它是添加缓冲区的实际文件对象的包装器.可以通过以下raw属性访问原始文件对象:

print(rsp.raw._fp.fp.raw._sock.getpeername())
Run Code Online (Sandbox Code Playgroud)

演示:

>>> import requests
>>> rsp = requests.get('http://google.com', stream=True)
>>> print(rsp.raw._fp.fp.raw._sock.getpeername())
('2a00:1450:400b:c02::69', 80, 0, 0)
Run Code Online (Sandbox Code Playgroud)

要使代码在Python 2和3上都有效,请查看该raw属性是否存在:

fp = rsp.raw._fp.fp
sock = fp.raw._sock if hasattr(fp, 'raw') else fp._sock
print(sock.getpeername())
Run Code Online (Sandbox Code Playgroud)