zid*_*sal 6 python http-headers python-requests
所以我向带有pythons请求库的服务器发出了请求.代码看起来像这样(它使用适配器,因此它需要匹配某个模式)
def getRequest(self, url, header):
"""
implementation of a get request
"""
conn = requests.get(url, headers=header)
newBody = conn.content
newHeader = conn.headers
newHeader['status'] = conn.status_code
response = {"Headers" : newHeader, "Body" : newBody.decode('utf-8')}
self._huddleErrors.handleResponseError(response)
return response
Run Code Online (Sandbox Code Playgroud)
我正在解析的头参数是这个
{'Authorization': 'OAuth2 handsOffMyToken', 'Accept': 'application/vnd.huddle.data+json'}
Run Code Online (Sandbox Code Playgroud)
但是我从服务器返回xml响应.检查fiddler后,我看到发送的请求是:
Accept-Encoding: identity
Accept: */*
Host: api.huddle.dev
Authorization: OAuth2 HandsOffMyToken
Accept: application/vnd.huddle.data+json
Accept-Encoding: gzip, deflate, compress
User-Agent: python-requests/1.2.3 CPython/3.3.2 Windows/2008ServerR2
Run Code Online (Sandbox Code Playgroud)
我们可以看到有2个接受标题!请求库正在添加此Accept:*/*标头,这将丢弃服务器.有谁知道我怎么能阻止这个?
正如评论中所述,这似乎是 3.3 中 requests 库的问题。请求中有默认标头(可以在 utils 文件夹中找到)。当您不指定自己的标头时,将使用这些默认标头。但是,如果您指定自己的标头,则请求会尝试将标头合并在一起,以确保您拥有所需的所有标头。
问题在sessions.py 中的def request() 方法中显现出来。它不是合并所有标头,而是将其放入其标头中,然后放入您的标头中。现在我刚刚完成了从 util 中找到的默认标头中删除接受标头的肮脏黑客行为