지금은 비추천 된 Apache Commons HttpClient를 사용하는 일부 오래된 코드를 상속 받았습니다. 새로운 Apache HttpComponents를 사용하도록 업그레이드하는 임무를 맡았습니다. 그러나, 나는 제대로 작동하려면이 POST 요청을받을 수 없습니다. 서버는 계속 Content-Length = 0
이라는 불평을합니다. 나는 그것이 매개 변수가 어떻게 추가되는지에 대한 나의 변환에 문제가 있음을 확신한다.HttpClient에서 HttpComponents로 POST 요청 업그레이드. 여기서 뭐가 잘못 됐어?
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();
...
}
서블릿 내 코드는 아파치 코 몬즈는 FileUpload을 사용하고 얘기
오래된 HttpClient를 코드는 다음과 같이 보인다. 다음은 내 요청을 수신 할 때 잡는 코드입니다.
ServletRequestContext src = new ServletRequestContext(request);
if (src.getContentLength() == 0)
throw new IOException("Could not construct ServletRequestContext object");
이 테스트에는 문제가 없습니다. 이제는 그렇지 않습니다. 헤더를 사용하거나 URLEncoded 쿼리로 request
을 전달하는 등 모든 종류의 대안을 시도했습니다. 내 업그레이드에서 실수를 저질렀 는가?
참고 : 서블릿이 내 요청을받는 방식을 변경할 수는 없습니다. 그 이유는 서블릿이 요청하는 다른 많은 앱을 변경해야하기 때문입니다. 너무 큰 일입니다.