这是我的代码。
import requests
from sys import exit
proxies = {
"http": "127.0.0.1:8888",
"https": "127.0.0.1:8888",
}
headers = {
"User-Agent": "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:20.0) Gecko/20100101 Firefox/20.0",
"Accept-Encoding": "gzip, deflate",
"Accept": "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8",
"Accept-Language": "en-US,en;q=0.5",
"Connection": "keep-alive"
}
login_page = "http://www.test.com/login/"
r = requests.get(login_page, proxies = proxies, headers = headers)
original_cookies = r.cookies
exit(0)
这是我从fiddler2得到的。如您所见,它添加了一个额外的标头Accept-Encoding: identity
。
GET http://www.test.com/login/ HTTP/1.1
Accept-Encoding: identity
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: en-US,en;q=0.5
Accept-Encoding: gzip, deflate
Host: www.test.com
Connection: keep-alive
User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64; rv:20.0) Gecko/20100101 Firefox/20.0
我在Windows 7 64位上使用Python 3.3.2并请求1.2.3。
任何人都可以提出一些建议吗?
感谢。
答案 0 :(得分:3)
这源自http.client
的内容,由urllib3
requests
使用http.client
。
accept-encoding
实际上checks如果已经传递了标题词典中的identity
,并且如果有,则跳过添加CaseInsensitiveDict({b'Accept-Encoding': 'gzip, deflate, compress', ...})
标题 - 唯一的问题是作为标题字典传递的内容是这样的:
requests
那么为什么它不起作用? str
encodes标题名称,与python3中的bytes
对象相比,False
对象始终为http.client
,检查在requests.models.PreparedRequest.prepare_headers
中执行失败......
如果你真的想摆脱额外的标题,最快捷的方式就是注释line 340 in requests/models.py或monkeypatch {{1}}
修改的:
这似乎是fixed在(尚未发布的)2.0请求分支