HTTP发布Json 400错误

时间:2016-09-27 19:12:27

标签: python json http-post

我正试图通过我的微控制器将数据发布到我的服务器。我需要从我的控制器发送原始的http数据,这就是我在下面发送的内容:

POST /postpage HTTP/1.1
Host: https://example.com
Accept: */*
Content-Length: 18
Content-Type: application/json

{"cage":"abcdefg"}

我的服务器需要JSON编码,而不是形成编码请求。

对于发送的上述请求,我从服务器收到400错误,HTTP / 1.1 400 Bad Request

但是,当我尝试通过笔记本电脑通过python脚本将帖子发送到我的服务器时,我能够得到正确的响应。

import requests
url='https://example.com'
mycode = 'abcdefg'



def enter():
    value = requests.post('url/postpage', 
                             params={'cage': mycode})
    print vars(value)


enter()

任何人都可以让我知道我在上面发送的原始http数据中哪里出错了吗?

1 个答案:

答案 0 :(得分:-1)

HTTP将标题之间的分隔符指定为单个换行符,并且在内容之前需要双换行符:

POST /postpage HTTP/1.1
Host: https://example.com
Accept: */*
Content-Length: 18
Content-Type: application/json

{"cage":"abcdefg"}

如果您认为自己没有正确的请求,请尝试查看Python发送的内容:

response = ...
request = response.request # request is a PreparedRequest.
headers = request.headers
url = request.url

阅读docs for PreparedRequest了解更多信息。

要传递参数,请使用此Python:

REQUEST = 'POST /postpage%s HTTP/1.1\r\nHost: example.com\r\nContent-Length: 0\r\nConnection: keep-alive\r\nAccept-Encoding: gzip, deflate\r\nAccept: */*\r\nUser-Agent: python-requests/2.4.3 CPython/2.7.9 Linux/4.4.11-v7+\r\n\r\n';
query = ''
for k, v in params.items():
    query += '&' + k + '=' + v # URL-encode here if you want.
if len(query): query = '?' + query[1:]
return REQUEST % query