Python请求库添加了一个附加头“Accept Encoding:identity”

2024-04-25 22:16:37 发布

您现在位置:Python中文网/ 问答频道 /正文

这是我的密码。

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)

这是我从小提琴手那里得到的。如您所见,它添加了一个附加头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

我在Windows764位上使用Python3.3.2,请求1.2.3。

有人能给点建议吗?

谢谢。


Tags: testimportcomhttpapplicationwwwexitlogin
1条回答
网友
1楼 · 发布于 2024-04-25 22:16:37

这起源于^{}的肠道深处,由urllib3使用,由requests使用。

http.client实际上checks如果在传递的头字典中已经有一个accept-encoding,并且如果它跳过了添加identity头的过程,那么唯一的问题是作为头字典传递的内容是这样的:

CaseInsensitiveDict({b'Accept-Encoding': 'gzip, deflate, compress', ...})

为什么不起作用?requestsencodes头名称,并且在python3中,与bytes对象相比,str对象始终是False,在http.client中执行的检查失败。。。

如果您真的想去掉额外的头,最快的方法是注释掉line 340 in requests/models.py,或者monkeypatch requests.models.PreparedRequest.prepare_headers

编辑
这似乎是请求的(尚未发布)2.0分支中的fixed

相关问题 更多 >