我想使用 urllib2 并从不同的 IP 地址发出请求。
我已经检查过了,但我没有运气:Source interface with Python and urllib2
链接中的代码:
class BoundHTTPHandler(urllib2.HTTPHandler):
def __init__(self, source_address=None, debuglevel=0):
urllib2.HTTPHandler.__init__(self, debuglevel)
self.http_class = functools.partial(httplib.HTTPConnection,
source_address=source_address)
def http_open(self, req):
return self.do_open(self.http_class, req)
# test
handler = BoundHTTPHandler("192.168.1.1", 0)
opener = urllib2.build_opener(handler)
urllib2.install_opener(opener)
urllib2.urlopen("http://google.com/").read()
错误:类型错误:init() 获得意外的关键字参数“source_address”
在使用 urllib2 之前我将如何运行此代码?
import socket
true_socket = socket.socket
def bound_socket(*a, **k):
sock = true_socket(*a, **k)
sock.bind((sourceIP, 0))
return sock
socket.socket = bound_socket
所以你有了bound_socket函数,然后呢?
编辑我不相信我的Python版本支持source_address,我认为这就是我收到错误的原因。
那么,让我们尝试一下套接字代码。
最佳答案
代码socket.socket =bound_socket
会影响全局任何模块中之后运行的所有代码,即一旦运行它;您不需要做任何其他事情。
httplib.HTTPConnection
class has source_address
parameter in Python 2.7因此您的 BoundHTTPHandler
也应该可以工作。
关于python - 来自不同IP地址的请求,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26501176/