我正在将一些数据发布到正在回答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);
HttpClient的默认行为符合HTTP规范(RFC 2616)的要求
10.3.3找到302 ... 如果响应请求而接收到302状态代码,则其他 而不是GET或HEAD,用户代理不得自动重定向 请求,除非用户可以确认,否则可能会 更改发出请求的条件。
您可以通过子类化DefaultRedirectStrategy并覆盖其#isRedirected()方法来覆盖HttpClient的默认行为。