使用套接字将JSON数据发布到PHP页面时出现400错误请求

时间:2019-01-29 16:31:04

标签: php python json sockets post

我正在尝试编写一个程序,该程序可以从Pysense设备读取温度和湿度值,并将这些值存储在笔记本电脑上托管的数据库中。为此,我使用套接字通过POST将Json数据发送到php页面,然后该页面解码Json数据并将适当的值插入数据库中。我遇到的问题是,尝试将数据发送到php页面时,我收到了“ 400错误请求”响应。我认为这与我的Json数据的格式有关,但是我找不到适合我的在线解决方案。这是我的代码如下:

这里,嗡嗡声和温度值是设备的读数。

data = '{ "DeviceName": 1, "Humidity": %.2f, "Temperature": %.2f }'%(hum,temp)

header = ("""
POST /insert.php HTTP/1.1
Host: 192.168.4.2
Content-Type: application/json\r\n
""")

contentLengthStr = 'Content-Length : %s\r\n\r\n'%str(len(data))
request = header + contentLengthStr + data
print(request)
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.connect((host,port))
s.send(request.encode())
response = s.recv(4096)
print(response)

我希望数据能够被php页面解码,但这是我从控制台获得的响应:

HTTP / 1.1 400错误的请求\ r \ n日期:2019年1月29日星期二,格林尼治标准时间\ r \ n服务器:Apache / 2.4.33(Win32)OpenSSL / 1.1.0h PHP / 7.2.6 \ r \ nVary:接受语言,接受字符集\ r \ n接受范围:字节\ r \ n连接:close \ r \ n内容类型:text / html; charset = utf-8 \ r \ n内容语言:en \ r \ n到期时间:星期二,2019年1月29日16:12:06 GMT \ r \ n \ r \ n \ r \ n \ r \ n \ r \ n \ r \ nBad request!\ r \ n \ r \ n * /-> \ r \ n \ r \ n \ r \ n \ r \ nBad request!'

任何建议将不胜感激!

1 个答案:

答案 0 :(得分:0)

string input = "$2,000.00";
double parsed = 0d;
double.TryParse(input, NumberStyles.AllowCurrencySymbol | NumberStyles.AllowDecimalPoint | NumberStyles.AllowThousands, CultureInfo.CurrentCulture, out parsed))

三引号字符串保留了其中的所有信息,包括开头和结尾的换行符。因此,当您将其与内容长度字符串和数据一起加入时,您的请求最终将如下所示:

header = ("""
POST /insert.php HTTP/1.1
Host: 192.168.4.2
Content-Type: application/json\r\n
""")

POST /insert.php HTTP/1.1 Host: 192.168.4.2 Content-Type: application/json Content-Length : 59 { "DeviceName": 1, ... } Content-Type之间的多余空白行是一个问题。刚开始时也可能是,但我不确定。

使用Content-Length之类的库可以避免这种愚蠢的错误。