所以我向带有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
我正在解析的头参数是这个
{'Authorization': 'OAuth2 handsOffMyToken', 'Accept': 'application/vnd.huddle.data+json'}
然而,我从服务器返回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
我们可以看到有2个接受标题!请求库正在添加此Accept:* / *标头,这将丢弃服务器。有谁知道我怎么能阻止这个?
答案 0 :(得分:1)
如评论中所述,这似乎是3.3中请求库的问题。在请求中有默认标头(可以在utils文件夹中找到)。如果未指定自己的标头,则使用这些默认标头。但是,如果您指定自己的标头,请求尝试将标头合并在一起,以确保您拥有所需的所有标头。
问题在sessions.py中的def request()方法中显示自身。而不是合并它放在标题中的所有标题,然后放入你的标题中。现在我刚刚完成了从util
中找到的默认头中删除accept头的肮脏黑客