HttpClient的POST请求返回302解决
HttpClient请求POST提示302,而且返回的response中的Localtion是我访问时使用的URL,
例如:我使用的URL是https://bbs.csdn.net?client_id=10333user=test,
localtion中也是这个https://bbs.csdn.net?client_id=10333user=test
我试了直接使用curl可以返回json
我的post方法:
public static StringBuilder post(String url, Object data, String encoding) {
log.info(HttpClient post start = +url);
CloseableHttpResponse response = null;
HttpPost httpPost = null;
HttpHost httpHost = null;
StringBuilder responseEntity = null;
String strings = ;
URL _url = new URL(url);
httpPost = new HttpPost(url);
httpPost.setHeader(Content-Type, application/x-www-form-urlencoded);
if(!Stringer.isNullOrEmpty(data)){
log.debug(HttpClient post url = +url+, data:+JSON.toJSONString(data));
if (data instanceof Map) {
// Map方式传参处理
Mapparams = (Map) data;
Listnvps = new ArrayList();
if (!Stringer.isNullOrEmpty(data)) {
SetkeySet = params.keySet();
for (String key : keySet) {
nvps.add(new BasicNameValuePair(key, params.get(key)));
}
}
httpPost.setEntity(new UrlEncodedFormEntity(nvps, encoding));
} else if(data instanceof String){
// String方式传参处理
strings = (String)data;
strings = Stringer.nullToEmpty(strings);
ByteArrayEntity reqEntity = new ByteArrayEntity(strings.getBytes(encoding));
reqEntity.setContentEncoding(encoding);
httpPost.setEntity(reqEntity);
}
}
httpPost.setConfig(defaultRequestConfig);
httpHost = new HttpHost(_url.getHost(),_url.getPort());
response = httpClient.execute(httpHost,httpPost);
if(!Stringer.isNullOrEmpty(response)){
log.info(2--HttpClient response = +response);
log.info(3--HttpClient StatusCode = +response.getStatusLine().getStatusCode());
/*if (response.getStatusLine().getStatusCode() != 200) {
return null;
}*/
String locationUrl=response.getLastHeader(location).getValue();
log.info(HttpClient locationUrl = +locationUrl);
log.info(4--HttpClient StatusCode = +response.getStatusLine().getStatusCode());
if (response.getStatusLine().getStatusCode() == 302) {
Header header = response.getFirstHeader(location); // 跳转的目标地址是在 HTTP-HEAD上
String newuri = header.getValue(); // 这就是跳转后的地址,再向这个地址发出新申请
System.out.println(newuri);
httpPost = new HttpPost(newuri);
httpPost.setHeader(Content-Type, application/x-www-form-urlencoded);
response = httpClient.execute(httpHost,httpPost);
int code = response.getStatusLine().getStatusCode();
locationUrl=response.getLastHeader(location).getValue();
log.info(5--HttpClient new Code = +code);
log.info(6--HttpClient locationUrl = +locationUrl);
}
responseEntity = new StringBuilder();
responseEntity.append(EntityUtils.toString(response.getEntity(), encoding));
return responseEntity;
}
return null;
}
curl命令样例:
curl -k -d “client_id=10333user=test” “https://bbs.csdn.net”
原因:
官方文档中对HttpHost(String hostname,int port)方法的说明:
HttpHost
public HttpHost(String hostname,
int port)
Constructor for HttpHost.
Parameters:
hostname - the hostname (IP or DNS name). Can be null.
port - the port. Value -1 can be used to set default protocol port
可见 如果不在方法里面增加协议会带上默认协议http
需要使用带协议的方法:HttpHost(String hostname, int port, Protocol protocol) ,并指定协议为https
httpHost = new HttpHost(_url.getHost(),_url.getPort(),“https”);
至此问题解决!
HttpClient的POST请求返回302解决的更多相关文章
- Android请求返回417解决办法
今天碰到个很奇怪的问题,APP通过代理链接服务器会收到HTTP 417错误,经过网上查找发现是由于以下代码造成: HttpParams params = new BasicHttpParams(); ...
- http请求 302解决方法
http请求+302解决方法 相关文章 当前,许多站点的部署方式都对自身的性能产生了消极影响,而网站的所有者并没有意识到这个问题.我们今天针对性的讨论以下几个常见的影响网站性能的瓶颈,观察其变化趋势, ...
- 微信返回上一页,页面中的AJAX的请求,对Get请求无效的解决办法
问题产生原因 最近在做一个微信的项目时,遇到一种很常见的情况,需求是这样的,当用户进入到"我的个人中心"的时候,会有一个点击跳转填写认证资料的按钮,点击此按钮后,会跳转 ...
- 如何解决http请求返回结果中文乱码
如何解决http请求返回结果中文乱码 1.问题描述 http请求中,请求的结果集中包含中文,最终以乱码展示. 2.问题的本质 乱码的本质是服务端返回的字符集编码与客户端的编码方式不一致. 场景的如服务 ...
- 在使用Ajax请求返回json数据的时候IE浏览器弹出下载保存对话框的解决方法
在使用Ajax请求返回json数据的时候IE浏览器弹出下载保存对话框的解决方法 最近在做一个小东西,使用kindeditor上传图片的时候,自己写了一个上传的方法,按照协议规则通过ajax返回json ...
- 使用httpclient post请求中文乱码解决办法
使用httpclient post请求中文乱码解决办法 在使用httpclient发送post请求的时候,接收端中文乱码问题解决. 正文: 我们都知道,一般情况下使用post请求是不会出现中文乱码 ...
- Ajax请求Spring Mvc 时总是返回 302 Moved Temporarily
功能上主要是实现在前台点击保存按钮,单元格变成文本框,修改值后请求后台保存数据.但在做的过程中,ajax 请求总是不能请求到后.打开浏览器调试,查看到http状态码总是返回 http/1.1 302 ...
- httpclient post请求中文乱码解决办法
在使用httpclient发送post请求的时候,接收端中文乱码问题解决. 正文: 我们都知道,一般情况下使用post请求是不会出现中文乱码的.可是在使用httpclient发送post请求报文含中文 ...
- 使用PoolingHttpClientConnectionManager解决httpclient的多线程请求问题
直接上代码 1.主程序 public class TestMain { public static void main(String[] args) throws NSQException, Time ...
随机推荐
- CE教程
https://www.52pojie.cn/thread-726510-1-1.htmlhttps://www.52pojie.cn/thread-726154-1-1.html https://w ...
- c#简单案例--单位转换器
经过几天学习,写出了一个简单的winform应用程序,贴出源码,以备不时之需. 软件启动后的界面如下图所示: 如图,该程序由6个label.8个comboBox.8个textBox和4个button组 ...
- 静态代码检查findbugs/阿里巴巴开发规范
findbugs,基本上三类严重的bug检测出来都是比较准确的,如下: 阿里巴巴开发规范 前面两类都是比较重要的: 参考: https://blog.csdn.net/qq_27093465/arti ...
- phpstorm 一个窗口打开多个项目
参考:https://imshusheng.com/php/135.html 文件 -> 设置 -> 项目"XXX" -> Directories- > A ...
- body-parser 用法
1.下载 body-parser 模块 : npm install body-parser 2.require body-parser 模块(引入),并用一个变量接收(此处栗子变量为 bodyp ...
- topcoder srm 520 div1
problem1 link 设$f[i][j][k]$表示考虑了前$i$道题,剩下时间为$j$,剩下技能为$k$的最大得分. 从小到大计算二元组$(j,k)$的话,在存储上可以省略掉$i$这一维. p ...
- Maven3版本的超级POM位置及中央仓库位置
背景 之所以想到这个问题,是因为在配置Nexus-Maven 私服的时候,需要在Maven的settings.xml中对<mirror>进行配置,在配置中央仓库的镜像时,<mirro ...
- Yii使用笔记 2
yii中的 getId等函数, id更多的是一个 string, 而不是数字. CCaptchaAction > CAction > CComponent. 实现是 IAction. yi ...
- Eclipse 创建maven项目 报错 one or more constraints have not been satisfied
首先 在 pom.xml > plugins 中添加 <plugin> <groupId>org.apache.maven.plugins</groupId> ...
- Centos 7 官网下载安装mysql server 5.6
Centos 7 官网下载安装 mysql server # wget http://dev.mysql.com/get/mysql-community-release-el7-5.noarch.rp ...