我有一个脚本,它使用urllib2
.
我使用Stack Overflow 上其他地方建议的技巧将另一个 ip 绑定到应用程序,我的计算机有两个 ip 地址(IP A 和 IP B)。
我想改用requests
图书馆。有谁知道我如何使用该库实现相同的功能?
我有一个脚本,它使用urllib2
.
我使用Stack Overflow 上其他地方建议的技巧将另一个 ip 绑定到应用程序,我的计算机有两个 ip 地址(IP A 和 IP B)。
我想改用requests
图书馆。有谁知道我如何使用该库实现相同的功能?
查看该requests
模块,它看起来像是httplib
用于发送 http 请求。httplib
用于socket.create_connection()
连接 www 主机。
知道这一点并遵循您提供的链接中的猴子修补方法:
import socket
real_create_conn = socket.create_connection
def set_src_addr(*args):
address, timeout = args[0], args[1]
source_address = ('IP_ADDR_TO_BIND_TO', 0)
return real_create_conn(address, timeout, source_address)
socket.create_connection = set_src_addr
import requests
r = requests.get('http://www.google.com')
看起来httplib
将所有参数 (to create_connection()
) 作为 args (vs 关键字) 传递,因为尝试扩展kwargs
内部的 dictset_src_addr
失败了。我相信以上是您想要的,但是我没有要测试的双宿主机器。
实际上,您应该将 IP 绑定到这样的请求:
import urllib3
real_create_conn = urllib3.util.connection.create_connection
def set_src_addr(address, timeout, *args, **kw):
source_address = ('YOUR_BIND_IP', 0)
return real_create_conn(address, timeout=timeout, source_address=source_address)
urllib3.util.connection.create_connection = set_src_addr
import requests
r = requests.get('http://ipecho.net/plain')
print( r.text)