我想发出 GET 请求来检索网页或 Web 服务的内容。 我想发送此请求的特定 header 并且 我想设置发送此请求的 IP 地址。 (运行此代码的服务器有多个可用的 IP 地址)。
如何使用 Python 及其库实现此目的?
最佳答案
我检查了urllib2
,它不会设置源地址(至少在Python 2.7上不会)。底层库是 httplib
,它确实具有该功能,因此直接使用它可能会有一些运气。
class httplib.HTTPConnection(host[, port[, strict[, timeout[, source_address]]]])
The optional
source_address
parameter may be a tuple of a (host, port) to use as the source address the HTTP connection is made from.
您甚至可以通过创建自定义 HTTPHandler
类来说服 urllib2
使用此功能。您需要从 urllib2.py
复制一些代码,因为 AbstractHTTPHandler
使用此调用的更简单版本:
class AbstractHTTPHandler(BaseHandler):
# ...
def do_open(self, http_class, req):
# ...
h = http_class(host, timeout=req.timeout) # will parse host:port
其中 http_class
是 HTTP 连接的 httplib.HTTPConnection
。
可能如果修补urllib2.py
(或复制并重命名它)是一种可接受的解决方法,那么这会起作用:
h = http_class(host, timeout=req.timeout, source_address=(req.origin_req_host,0))
关于Python CURL 指定ip地址,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9449221/