如何从 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。
我正在从 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。