我想使用Apache HTTP客户端发出Http POST请求。我试图将HTTP POST请求的内容(在我的应用程序中接收)复制到另一个HTTP POST请求(从我的应用程序发起到另一个URL)。代码如下所示:设置HTTP POST请求的内容长度
httpPost = new HttpPost(inputURL);
// copy headers
for (Enumeration<String> e = request.getHeaderNames(); e.hasMoreElements();) {
String headerName = e.nextElement().toString();
httpPost.setHeader(headerName, request.getHeader(headerName));
}
BufferedInputStream clientToProxyBuf = new BufferedInputStream(request.getInputStream());
BasicHttpEntity basicHttpEntity = new BasicHttpEntity();
basicHttpEntity.setContent(clientToProxyBuf);
basicHttpEntity.setContentLength(clientToProxyBuf.available());
httpPost.setEntity(basicHttpEntity);
HttpResponse responseFromWeb = httpclient.execute(httpPost);
基本上,我想实现的代理应用程序,它会得到一个URL作为参数,刚愎请求的URL,然后服务于个性化的外观网页等和感觉。
这里request
是HttpServletRequest。我在设置内容长度时遇到问题。通过调试,我发现clientToProxyBuf.available()
没有给我正确的输入流长度,我得到了Http error 400 IE和Error 354 (net::ERR_CONTENT_LENGTH_MISMATCH): The server unexpectedly closed the connection
。
我做错了吗?有没有其他方法可以实现它?
我在我的应用程序中使用StringEntity类。我们应该如何在StringEntity中设置内容长度? – 2015-12-10 09:51:18