我正在尝试编写一个程序,该程序可以从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!'
任何建议将不胜感激!
答案 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
之类的库可以避免这种愚蠢的错误。