Python请求标头未正确设置

时间:2016-03-23 14:26:43

标签: python header python-requests

我在使用Python请求时遇到了一些麻烦。这是我的代码:

fields={
    "fields":{
        "field1":{"test": "test"},
        "field2": "test",
        "field3":{"test": "test"}
    }
}

try:
    results = requests.post(
        "http://www.fakenotrealatall.com",
        data=json.dumps(fields),
        headers={"content-type": "application/json"}
    )

    print results.headers['content-type']

    return stuff

当我运行它时,我得到415错误,并且print语句显示内容类型是" text / html; charset = utf-8"。

为什么不将它设置为" application / json"?

1 个答案:

答案 0 :(得分:1)

您收到415错误,因为“http://www.fakenotrealatall.com”的服务器返回415错误。根据{{​​3}},这意味着

  
    

服务器拒绝为请求提供服务,因为请求的实体采用所请求方法所请求资源不支持的格式。

  

显然,www.fakenotrealatall.com上的人不喜欢JSON。

results.headers['content-type']的值是“text / html”,因为这也是服务器返回的内容。请记住,这是返回给您的数据类型,您发送的数据类型。要看到这一点,请尝试:

print results.headers['content-type']
print results.request.headers['content-type']

注意请求如何具有JSON类型,但响应是HTML格式。

最后,要了解这一切是如何工作的,请尝试POST一个接受JSON的网站,例如the HTTP standard

import requests
import json

fields={
    "fields":{
        "field1":{"test": "test"},
        "field2": "test",
        "field3":{"test": "test"}
    }
}

results = requests.post(
        "http://httpbin.org/post",
        data=json.dumps(fields),
        headers={"content-type": "application/json"}
    )

print results.status_code, results.reason
print results.headers['content-type']
print results.request.headers['content-type']