如何从 non-browser 设备创建 HTTP POST?

How do I make an HTTP POST from a non-browser device?

我正在从 non-browser 设备(POS,销售点)发出 http post 请求,该设备是用 C 编程的。

HTTP GET 请求完美运行,我从服务器收到了答复。我只是与主机连接,构建消息,例如:

strcpy(msjEnv, "GET /app/appinfo/ HTTP/1.1\r\n"
               "Host: 185.12.25.138\n"
               "User-Agent: 3C377521\n"
               "\n"
               "[=12=]");    

然后我发送 msjEnv,正如我所说,从服务器获得我需要的答案 (JSON)。

现在,对于 http POST 请求,服务器以某种方式没有收到构建消息的 body,例如:

strcpy(msjEnv, "POST /services/s/Core/login HTTP/1.1\r\n"
               "Host: 185.12.25.138:7004\r\n"
               "auth: asdasd\r\n"
               "Content-Type: application/x-www-form-urlencoded\r\n"
               "\r\n"
               "disp=101010&usr=987676&pass=123456&app=POS[=13=]");

当我看到服务器的控制台(trace)时,我可以看到 POS 连接到服务器,但是 msg (disp=101010&usr=896464&pass=9514&app=WPOS) 的 BODY 都是空的。

我已经用 Postman 进行了测试(来自 chrome 应用商店的优秀应用,用于测试 API 的应用)并且我收到了正确的响应。

我想我需要在 POST header 中添加一些额外的东西,因为作为一个 non-browser 设备,也许我没有一些自动通信配置,我认为有,浏览器。有什么想法吗?

您需要在您的请求中添加 Content-Length header。