简体   繁体   English

尽管正确设置了主机,方法和内容类型,但Poco库的PUT方法无法按预期工作

[英]Poco library PUT method not working as expected although host, method, content-type are set correctly

I have the following code in C++ with Poco Library that should perform a PUT on localhost with a body like {"name" : "sensorXXX", "totalLots" : 50, "occupied": 5} 我在带有Poco库的C ++中使用以下代码,该代码应在本地主机上执行PUT,其内容为{"name" : "sensorXXX", "totalLots" : 50, "occupied": 5}

string url = String("http://localhost:3000/cam1111");
URI uri(url);
HTTPClientSession session(uri.getHost(), uri.getPort());

// prepare path
string path(uri.getPathAndQuery());
if (path.empty()) path = "/";

// send request
HTTPRequest req(HTTPRequest::HTTP_PUT, path, HTTPMessage::HTTP_1_1);
req.setContentType("application/json");

string body = string("{\"name\" : \"Parking Sensor developed by aromanino\", \"totalLots\" : 50, \"occupied\": 5}");
// Set the request body
req.setContentLength( body.length() );

// sends request, returns open stream
std::ostream& os = session.sendRequest(req);
cout<<"request sent to " <<uri.getHost()<<endl;
cout<<"port "<<uri.getPort()<<endl;
cout<<"path "<<uri.getPathAndQuery()<<endl;
cout<<"body:\n"<<body<<endl;

HTTPResponse res;
cout << res.getStatus() << " " << res.getReason() << endl;

return 0;

It is supposed to PUT on a local middleware done in NodeExpress. 应该将其放在NodeExpress中完成的本地中间件上。

I get 200 as response so it should be ok. 我得到200作为回应,所以应该可以。

However the middleware is receiving something (so the host and port are correct) but it is not executing the end point which I am expecting which is: 但是中间件正在接收某些东西(因此主机和端口是正确的),但是它没有执行我期望的终点:

router.put("/:dev", function(req, res){
    //console.log(req.params.dev);
    /*Check if request contains total and occupied in the body: If not reject the request.*/
    var stat;
    var body_resp = {"status" : "", "message" : ""};;
    console.log(req.body);
    ....
});

and it is not captured also by router.all('*', ...) . 并且router.all('*', ...)也不捕获它。

The same host, body, content-type are working as expected on Postman. 相同的主机,正文,内容类型正在邮递员上按预期工作。

What am I supposed to set more in the Poco library to perform a correct PUT request. 我应该在Poco库中设置更多内容以执行正确的PUT请求。

You are not actually sending the body with the HTTP request, as in: 您实际上并没有通过HTTP请求发送正文,如:

std::ostream& os = session.sendRequest(req);
os << body;

Furthermore, you must also receive the server response after sending the request with the body - simply declaring the HTTPResponse object is not sufficient. 此外,在发送带有正文的请求之后,还必须接收服务器响应-仅声明HTTPResponse对象是不够的。

HTTPResponse res;
std::istream& is = session.receiveResponse(res);

So, the complete snippet should be: 因此,完整的代码段应为:

string url = string("http://localhost:3000/cam1111");
URI uri(url);

HTTPClientSession session(uri.getHost(), uri.getPort());

string path(uri.getPathAndQuery());
if (path.empty()) path = "/";

HTTPRequest req(HTTPRequest::HTTP_PUT, path, HTTPMessage::HTTP_1_1);
req.setContentType("application/json");

string body = string("{\"name\" : \"Parking Sensor developed by aromanino\", \"totalLots\" : 50, \"occupied\": 5}");
req.setContentLength(body.length());

std::ostream& os = session.sendRequest(req);
os << body;

HTTPResponse res;
std::istream& is = session.receiveResponse(res);
cout << res.getStatus() << " " << res.getReason() << endl;

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM