c – Poco :: HttpClientSession.receiveResponse()抛出NoMessag
发布时间:2020-12-16 07:28:40 所属栏目:百科 来源:网络整理
导读:我用 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:
我用
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 但我不明白为什么.连接已成功建立,并且请求的页面存在.我尝试了与已知网站(如维基百科)相同的代码,它没有任何例外. 我还尝试在命令行中使用cURL(到我的服务器)发出完全相同的请求,它显示服务器的响应,因此服务器看起来很好. 这是服务器以字符串形式的原始响应: "HTTP/1.1 200 OKrn" + "Server: [server name]rn" + "Content-Type: text/xml; charset=utf-8rn" + "Content-Length:" + bodyBytes.length + "rn" + "Resource: " + job.resId + "rnrn" + "<?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 OKrn" + "Server: Foorn" + "Content-Type: text/plainrn" + "Content-Length: " + bodyBytes.length + "rnrn"; 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头.即,
req.add("Content-Length","0"); (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |