小编典典

处理HttpClient重定向

java

我正在将一些数据发布到正在回答302移动临时的服务器上。

我希望HttpClient遵循重定向并自动获取新位置,因为我相信这是HttpClient的默认行为。但是,我得到一个例外,而不是按照重定向:(

这是相关的代码,任何想法都将不胜感激:

HttpParams httpParams = new BasicHttpParams();
HttpClientParams.setRedirecting(httpParams, true);
SchemeRegistry schemeRegistry = registerFactories();
ClientConnectionManager clientConnectionManager = new ThreadSafeClientConnManager(httpParams, schemeRegistry);

HttpClient httpClient = new DefaultHttpClient(clientConnectionManager, httpParams)
HttpPost postRequest = new HttpPost(url);
postRequest.setHeader(HTTP.CONTENT_TYPE, contentType);
postRequest.setHeader(ACCEPT, contentType);

if (requestBodyString != null) {
    postRequest.setEntity(new StringEntity(requestBodyString));
}

return httpClient.execute(postRequest, responseHandler);

阅读 620

收藏
2020-09-08

共1个答案

小编典典

HttpClient的默认行为符合HTTP规范(RFC 2616)的要求

10.3.3找到302
...

   如果响应请求而接收到302状态代码,则其他
   而不是GET或HEAD,用户代理不得自动重定向
   请求,除非用户可以确认,否则可能会
   更改发出请求的条件。

您可以通过子类化DefaultRedirectStrategy并覆盖其#isRedirected()方法来覆盖HttpClient的默认行为。

2020-09-08