【问题标题】:400 Bad Request when posting JSON data to PHP page using socket使用套接字将 JSON 数据发布到 PHP 页面时出现 400 错误请求
【发布时间】:2019-06-22 20:21:16
【问题描述】:

我正在尝试编写一个程序,该程序从 Pysense 设备中读取温度和湿度值,并将这些值存储在我的笔记本电脑上托管的数据库中。为此,我使用套接字通过 POST 将 Json 数据发送到 php 页面,该页面然后解码 Json 数据并将适当的值插入数据库。我遇到的问题是我在尝试将数据发送到 php 页面时收到“400 bad request”响应。我认为这与我的 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 日星期二 16:12:06 GMT\r\n服务器:Apache/2.4.33 (Win32) OpenSSL/1.1.0h PHP/7.2.6\r \n变化:接受语言,接受字符集\r\n接受范围:字节\r\n连接:关闭\r\n内容类型:文本/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\n错误请求!\r\n\r\n*/-->\r\n\r\n\r\n\r\n错误请求!'

任何建议将不胜感激!

【问题讨论】:

  • 您使用这种低级方法发送这些数据有什么原因吗?许多人更喜欢使用更高级别的包,例如requestshttplib
  • 我赞同@JohnGordon 的评论。我非常建议您查看requests 模块。
  • 另外,您是直接从设备读取信息吗?没有更完整的代码示例?请参阅stackoverflow.com/help/mcve 并编辑您的问题以包含更完整的内容?
  • 如果没有关于如何查询设备以及您正在处理的数据库和数据库架构的更多信息,我猜您可以使用requestsjson 来完成所有这些操作(在一个非常简单、简短的脚本中查看 json.dumps() 的模块)和 sqlite 模块。

标签: php python json sockets post


【解决方案1】:
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-TypeContent-Length 之间的多余空行是个问题。开头的那个可能也是,但我不确定。

使用像requests 这样的库可以防止这种愚蠢的错误。

【讨论】:

    猜你喜欢
    • 2018-06-30
    • 2020-06-30
    • 2016-10-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-11-30
    • 2021-11-22
    相关资源
    最近更新 更多