我想使用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()
错误:TypeError: 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
所以你有bind_socket函数,那么什么?
编辑我不相信我的python版本支持source_address,这就是我认为错误的原因。
所以,让我们试试套接字代码。
答案 0 :(得分:1)
代码socket.socket = bound_socket
会影响全局任何模块中 之后运行的所有代码,即一旦运行它;你不需要做任何其他事情。
httplib.HTTPConnection
class has source_address
parameter in Python 2.7因此您的BoundHTTPHandler
也应该有用。