Python使用requests模块时如何输出网站IP地址?

Python使用requests模块对指定url发送请求时,该如何获取该网址所对应的IP地址呢?请举例。

喜欢这个问题 | 分享 | 新建回答

回答

喷火的尾巴

Sep 4, 2019
0 赞

如下所示,在导入requests模块前对某些http连接的对象方法进行更新,然后使用requests时,把stream参数设置为true,最后就可以获得指定url对应的ip咯:

# coding=utf-8

from requests.packages.urllib3.connectionpool import HTTPConnectionPool
def _make_request(self,conn,method,url,**kwargs):
    response = self._old_make_request(conn,method,url,**kwargs)
    sock = getattr(conn,'sock',False)
    if sock:
        setattr(response,'peer',sock.getpeername())
    else:
        setattr(response,'peer',None)
    return response

HTTPConnectionPool._old_make_request = HTTPConnectionPool._make_request
HTTPConnectionPool._make_request = _make_request

# 从这里开始,就可以像往常一样,导入requests模块正常使用咯

import requests
url = "https://xxx.xxx ..."  # 换上具体的网址即可
r = requests.get(url, stream=True)
print rsp.raw._original_response.peer # 输出对应的ip和端口

输出的结果会是一个元组(tuple)对象,该元组中包含两个元素,分别是代表ip的字符串,和代表端口的数字;例如:

('119.110.6.6', 443)