请求在Accept标头中添加python lib

时间:2013-06-25 09:02:36

标签: 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

我正在解析的头参数是这个

{'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:* / *标头,这将丢弃服务器。有谁知道我怎么能阻止这个?

1 个答案:

答案 0 :(得分:1)

如评论中所述,这似乎是3.3中请求库的问题。在请求中有默认标头(可以在utils文件夹中找到)。如果未指定自己的标头,则使用这些默认标头。但是,如果您指定自己的标头,请求尝试将标头合并在一起,以确保您拥有所需的所有标头。

问题在sessions.py中的def request()方法中显示自身。而不是合并它放在标题中的所有标题,然后放入你的标题中。现在我刚刚完成了从util

中找到的默认头中删除accept头的肮脏黑客