Python CURL特定的ip地址

时间:2012-02-25 23:52:38

标签: python urllib2 urllib

我想发出GET请求来检索网页或网络服务的内容。 我想为此请求发送特定标头 我想设置发送此请求的IP地址FROM WHICH。 (运行此代码的服务器有多个可用的IP地址)。

如何使用Python及其库来实现这一目标?

2 个答案:

答案 0 :(得分:1)

您可以使用许多选项来发出http请求。我甚至认为没有真正达成共识的“最佳”。你可以使用以下任何一个:

  1. urllib2:http://docs.python.org/library/urllib2.html
  2. 请求:http://docs.python-requests.org/en/v0.10.4/index.html
  3. 机械化:http://wwwsearch.sourceforge.net/mechanize/
  4. 此列表并非详尽无遗。阅读文档并选择。有些是较低级别,有些提供丰富的浏览器功能。所有这些都允许您在提出请求之前设置标题。

答案 1 :(得分:1)

我检查了urllib2并且它不会设置源地址(至少在Python 2.7上没有)。底层库是httplib,它具有该功能,因此您可以直接使用它。

来自httplib documentation

  

class httplib.HTTPConnection(host[, port[, strict[, timeout[, source_address]]]])

     

可选的source_address参数可以是(主机,端口)的元组,用作建立HTTP连接的源地址。

您甚至可以通过创建自定义urllib2课来说服HTTPHandler使用此功能。您需要复制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连接的http_classhttplib.HTTPConnection

可能相反,如果修补urllib2.py(或复制并重命名)是一种可接受的解决方法,那么这将有效:

        h = http_class(host, timeout=req.timeout, source_address=(req.origin_req_host,0))