HttpClient的POST请求返回302解决
时间: 2023-06-18 07:08:35 浏览: 187
当 HttpClient 发送 POST 请求时,有可能会遇到服务器返回 302 的情况。这种情况通常是因为服务器需要进行重定向,而 HttpClient 默认是不会自动进行重定向的。
解决这个问题的方法,可以通过设置 HttpClient 的 RedirectStrategy 属性来实现自动重定向。下面是一个示例代码:
```java
CloseableHttpClient httpClient = HttpClients.createDefault();
HttpPost httpPost = new HttpPost(url);
List<NameValuePair> params = new ArrayList<>();
params.add(new BasicNameValuePair("param1", "value1"));
params.add(new BasicNameValuePair("param2", "value2"));
httpPost.setEntity(new UrlEncodedFormEntity(params, "UTF-8"));
RequestConfig requestConfig = RequestConfig.custom()
.setSocketTimeout(60000)
.setConnectTimeout(60000)
.setRedirectsEnabled(true) // 允许自动重定向
.build();
httpPost.setConfig(requestConfig);
CloseableHttpResponse httpResponse = httpClient.execute(httpPost);
int statusCode = httpResponse.getStatusLine().getStatusCode();
if (statusCode == HttpStatus.SC_OK) {
// 处理正常情况的响应结果
} else if (statusCode == HttpStatus.SC_MOVED_TEMPORARILY || statusCode == HttpStatus.SC_MOVED_PERMANENTLY) {
// 处理重定向情况
String redirectUrl = httpResponse.getFirstHeader("Location").getValue();
// 重新发送请求,并处理响应结果
// ...
}
```
在上面的代码中,我们通过设置 RequestConfig 的 setRedirectsEnabled(true) 来允许自动重定向。当服务器返回 302 状态码时,我们可以从响应头中获取重定向的 URL,然后重新发送请求并处理响应结果。
阅读全文