gpt4 book ai didi

c++ - Poco::HttpClientSession.receiveResponse() 在没有任何明显原因的情况下抛出 NoMessageException

转载 作者:塔克拉玛干 更新时间:2023-11-03 02:12:37 26 4
gpt4 key购买 nike

我用 Java 编写了一个 HTTP 服务器,用 Poco 用 C++ 编写了一个客户端。这是 C++ 客户端代码的一部分:

URI uri("http://127.0.0.1:4444");
HTTPClientSession session(uri.getHost(), uri.getPort());

HTTPRequest req(HTTPRequest::HTTP_POST,
"/pages/page",
HTTPMessage::HTTP_1_1);

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

在最后一行我得到以下错误:

terminate called after throwing an instance of 'Poco::Net::NoMessageException'
what(): No message received

但是我不明白为什么。连接建立成功,请求的页面存在。我在已知网站(如维基百科)上尝试了相同的代码,它毫无异常(exception)地工作。

我还尝试在命令行中使用 cURL 向我的服务器发出完全相同的请求,它显示了服务器的响应,因此服务器看起来很好。

这是服务器以字符串形式的原始响应:

"HTTP/1.1 200 OK\r\n" +
"Server: [server name]\r\n" +
"Content-Type: text/xml; charset=utf-8\r\n" +
"Content-Length:" + bodyBytes.length + "\r\n" +
"Resource: " + job.resId + "\r\n\r\n" +
"<?xml version=\"1.0\" encoding=\"UTF-8\"?><JobRequest><InputRepresentation id=\"0\"/> <effectsList><cvtColor><code> CV_RGB2GRAY </code></cvtColor><resize><scaleFactorX> 0.5 </scaleFactorX><scaleFactorY> 0.5 </scaleFactorY><interpolation> INTER_LINEAR </interpolation></resize><GaussianBlur><kSize> 3 </kSize><sigmaX> 2 </sigmaX><sigmaY> 2 </sigmaY><borderType> BORDER_REPLICATE </borderType></GaussianBlur></effectsList></JobRequest>"

我编写了一个简单的 HTTP 服务器,它对每个请求都以固定的响应进行响应,以测试哪里出了问题。这是代码:

public class Test {
public static void main(String[] args) {
try {
ServerSocket serverSocket = new ServerSocket(4449);
Socket clientSocket = serverSocket.accept();

String body = "ab";
byte[] bodyBytes = body.getBytes("UTF-8");

String headers = "HTTP/1.1 200 OK\r\n" +
"Server: Foo\r\n" +
"Content-Type: text/plain\r\n" +
"Content-Length: " + bodyBytes.length + "\r\n\r\n";

byte[] headerBytes = headers.getBytes("UTF-8");

byte[] responseBytes = new byte[headerBytes.length + bodyBytes.length];

/* Fill responseBytes with the header and body bytes */
int i = 0;
for (int j = 0; j < headerBytes.length; ++j) {
responseBytes[i] = headerBytes[j];
++i;
}
for (int j = 0; j < bodyBytes.length; ++j) {
responseBytes[i] = bodyBytes[j];
++i;
}
clientSocket.getOutputStream().write(responseBytes);

} catch (IOException e) {}
}
}

即使使用此服务器,我也会遇到同样的异常。那么这里出了什么问题?

最佳答案

根据实验,我发现如果您发出空 POST 请求,则有必要包含 Content-Length header 。即,

req.add("Content-Length", "0");

关于c++ - Poco::HttpClientSession.receiveResponse() 在没有任何明显原因的情况下抛出 NoMessageException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8980392/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com