我繼承了一些使用現在不推薦使用的Apache Commons HttpClient的舊代碼。我負責升級它以使用更新的Apache HttpComponents。但是,我似乎無法獲得此POST請求正常工作。服務器不停地抱怨,Content-Length = 0
。我相當肯定,這是我的轉換參數添加方式的問題。將HttpClient的POST請求升級到HttpComponents。這裏有什麼問題?
老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共享文件上傳。下面是它收到我的請求時捕獲的代碼:
ServletRequestContext src = new ServletRequestContext(request);
if (src.getContentLength() == 0)
throw new IOException("Could not construct ServletRequestContext object");
它用來通過此測試就好了。現在它不。我嘗試了各種替代方法,例如使用標題,或將request
作爲URLEncoded查詢。我在升級過程中犯過錯誤嗎?
注意:我不能只是改變servlet接收我的請求的方式,因爲那樣我就不得不改變一些與它交談的其他應用程序,這太大了。