来自不同IP地址的请求

时间:2014-10-22 06:01:51

标签: python

我想使用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,这就是我认为错误的原因。

所以,让我们试试套接字代码。

1 个答案:

答案 0 :(得分:1)

代码socket.socket = bound_socket会影响全局任何模块中 之后运行的所有代码,即一旦运行它;你不需要做任何其他事情。

httplib.HTTPConnection class has source_address parameter in Python 2.7因此您的BoundHTTPHandler也应该有用。