現在非推奨の 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();
...
}
私のコードが話しているサーブレットは、Apache Commons FileUpload を使用しています。私のリクエストを受け取ったときにキャッチするコードは次のとおりです。
ServletRequestContext src = new ServletRequestContext(request);
if (src.getContentLength() == 0)
throw new IOException("Could not construct ServletRequestContext object");
以前はこのテストに問題なく合格していました。今はそうではありません。request
ヘッダーを使用したり、URLEncoded クエリとして渡したりするなど、あらゆる種類の代替手段を試しました。どこかでアップグレードを間違えましたか?
注: サーブレットがリクエストを受信する方法だけを変更することはできません。変更すると、サーブレットと通信する他の多くのアプリを変更する必要があり、それは大変な作業です。