【问题标题】:Python urllib2: How to eliminate urllib2 add it's own headersPython urllib2:如何消除 urllib2 添加它自己的标头
【发布时间】:2012-09-07 19:14:02
【问题描述】:

我正在测试一些我发送一些 POST 请求的应用程序,想要测试应用程序在请求中缺少某些标头时的行为,以验证它是否生成了正确的错误代码。

为此,我的代码如下。

    header = {'Content-type': 'application/json'}
    data = "hello world"
    request = urllib2.Request(url, data, header)
    f = urllib2.urlopen(request)
    response = f.read()

问题是 urllib2 在发送 POST 请求时添加了自己的标头,例如 Content-Length、Accept-Encoding,但我不希望 urllib2 添加比我在上面的标头字典中指定的标头更多的标头,是有一种方法可以做到这一点,我尝试将其他我不想要的标头设置为无,但它们仍然使用那些空值作为我不想要的请求的一部分。

【问题讨论】:

  • 尝试阅读urllib2的源代码,看看在哪里添加了标题。要快速找到它,您可以使用grep -R Accept-Enconding *
  • 谢谢,我看到 AbstractHTTPHandler 扩展了 BaseHandler 类并实现了这些方法,如果它们不存在,则添加一些标头。

标签: python urllib2


【解决方案1】:

标头采用字典类型,以下示例使用 chrome 用户代理。对于所有标准和一些非搁置的标头字段,请查看here。您还需要使用 urllib 而不是 urllib2 对数据进行编码。这都是在 python 文档here

中提到的
import urllib
import urllib2

url = 'http://www.someserver.com/cgi-bin/register.cgi'
user_agent = 'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.1 (KHTML, like Gecko) Chrome/22.0.1207.1 Safari/537.1'
values = {'name' : 'Michael Foord',
          'location' : 'Northampton',
          'language' : 'Python' }
headers = { 'User-Agent' : user_agent }

data = urllib.urlencode(values)
req = urllib2.Request(url, data, headers)
response = urllib2.urlopen(req)
the_page = response.read()

【讨论】:

  • 标题中仍然有“Accept-Encoding: identity”。这没有回答问题。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-05-31
  • 2011-09-14
  • 1970-01-01
  • 2010-10-25
  • 2018-01-19
  • 2013-01-27
相关资源
最近更新 更多