我正试图通过我的微控制器将数据发布到我的服务器。我需要从我的控制器发送原始的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数据中哪里出错了吗?
答案 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