我继承了一些使用现已弃用的 Apache Commons HttpClient 的旧代码。我的任务是升级它以使用更新的 Apache HttpComponents。但是,我似乎无法让这个 POST 请求正常运行。服务器一直在抱怨Content-Length = 0
。我相当确定这是我转换参数添加方式的问题。
旧的 HttpClient 代码如下所示:
PostMethod postMethod = null;
int responseCode = 0;
try{
HttpClient httpClient = new HttpClient();
postMethod = new PostMethod(getServiceUrl()); //The url, without a query.
...
postMethod.addParameter(paramName, request);
responseCode = httpClient.executeMethod(postMethod);
...
}
这是我的 HttpComponents 替代品:
HttpPost postMethod = null;
int responseCode = 0;
HttpResponse httpResponse = null;
try{
HttpClient httpClient = new DefaultHttpClient();
postMethod = new HttpPost(getServiceUrl()); //The url, without a query.
...
BasicHttpParams params = new BasicHttpParams();
params.setParameter(paramName, request);
postMethod.setParams(params);
httpResponse = httpClient.execute(postMethod);
responseCode = httpResponse.getStatusLine().getStatusCode();
...
}
我与之交谈的代码的 servlet 正在使用 Apache Commons FileUpload。这是它收到我的请求时捕获的代码:
ServletRequestContext src = new ServletRequestContext(request);
if (src.getContentLength() == 0)
throw new IOException("Could not construct ServletRequestContext object");
它曾经很好地通过了这个测试。现在没有了。我尝试了各种替代方法,例如使用标头或request
作为 URLEncoded 查询传递。我在某个地方的升级中犯了错误吗?
注意:我不能只更改 servlet 接收我的请求的方式,因为那样我将不得不更改许多与之对话的其他应用程序,而这是一项太大的工作。