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解决的更多相关文章

  1. Android请求返回417解决办法

    今天碰到个很奇怪的问题,APP通过代理链接服务器会收到HTTP 417错误,经过网上查找发现是由于以下代码造成: HttpParams params = new BasicHttpParams(); ...

  2. http请求 302解决方法

    http请求+302解决方法 相关文章 当前,许多站点的部署方式都对自身的性能产生了消极影响,而网站的所有者并没有意识到这个问题.我们今天针对性的讨论以下几个常见的影响网站性能的瓶颈,观察其变化趋势, ...

  3. 微信返回上一页,页面中的AJAX的请求,对Get请求无效的解决办法

    问题产生原因       最近在做一个微信的项目时,遇到一种很常见的情况,需求是这样的,当用户进入到"我的个人中心"的时候,会有一个点击跳转填写认证资料的按钮,点击此按钮后,会跳转 ...

  4. 如何解决http请求返回结果中文乱码

    如何解决http请求返回结果中文乱码 1.问题描述 http请求中,请求的结果集中包含中文,最终以乱码展示. 2.问题的本质 乱码的本质是服务端返回的字符集编码与客户端的编码方式不一致. 场景的如服务 ...

  5. 在使用Ajax请求返回json数据的时候IE浏览器弹出下载保存对话框的解决方法

    在使用Ajax请求返回json数据的时候IE浏览器弹出下载保存对话框的解决方法 最近在做一个小东西,使用kindeditor上传图片的时候,自己写了一个上传的方法,按照协议规则通过ajax返回json ...

  6. 使用httpclient post请求中文乱码解决办法

    使用httpclient post请求中文乱码解决办法   在使用httpclient发送post请求的时候,接收端中文乱码问题解决. 正文: 我们都知道,一般情况下使用post请求是不会出现中文乱码 ...

  7. Ajax请求Spring Mvc 时总是返回 302 Moved Temporarily

    功能上主要是实现在前台点击保存按钮,单元格变成文本框,修改值后请求后台保存数据.但在做的过程中,ajax 请求总是不能请求到后.打开浏览器调试,查看到http状态码总是返回 http/1.1  302 ...

  8. httpclient post请求中文乱码解决办法

    在使用httpclient发送post请求的时候,接收端中文乱码问题解决. 正文: 我们都知道,一般情况下使用post请求是不会出现中文乱码的.可是在使用httpclient发送post请求报文含中文 ...

  9. 使用PoolingHttpClientConnectionManager解决httpclient的多线程请求问题

    直接上代码 1.主程序 public class TestMain { public static void main(String[] args) throws NSQException, Time ...

随机推荐

  1. linux shell习题

    课件地址:https://wenku.baidu.com/view/bac2ff10f18583d0496459f3.html 1.测试环境变量:HOME,PWD,IFS等2.测试位置变量:$$,$# ...

  2. GitHub使用笔记1:git客户端配置多ssh key

    公司用gitlab 外网的github同时配置 这样就导致我们要配置不同的ssh-key对应不同的环境. 具体操作步骤如下: 1:生成一个公司用的SSH-Key $ ssh-keygen -t rsa ...

  3. Python3 hasattr()、getattr()、setattr()函数简介

    Python3 hasattr().getattr().setattr()函数简介 一.hasattr(object, name) 判断object对象中是否存在name属性,当然对于python的对 ...

  4. devexpress vs2015 安装亲测

  5. intel webrtc 部署

    org link conference server Configure the MCU server 1. set the maximum numbers of open files, runnin ...

  6. 牛客网校招全国统一模拟笔试(二月场)- Java方向

    1.请问下面关于与wait()一起使用的方法notify()的各种陈述,哪个正确? A 多个线程同时等待某个条件,则只有等待时间最长的哪个线程被通知 B 多个线程同时等待某条件,则没有办法预测哪个线程 ...

  7. Junit的套件使用

    定义一个类,在类的上方添加@RunWith(Suite.class)和@SuiteClasses({XX.class,YY.class,...}) 实例有两个类分别为:public class Log ...

  8. centos 编译lantrn

    github上的安装指导: Custom fork of Go is currently required. We'll eventually switch to Go 1.7 which suppo ...

  9. cat查看文件以及sed查看指定行数

    https://unix.stackexchange.com/questions/288521/with-the-linux-cat-command-how-do-i-show-only-certai ...

  10. 【Spring Security】三、自定义数据库实现对用户信息和权限信息的管理

    一 自定义表结构 这里还是用的mysql数据库,所以pom.xml文件都不用修改.这里只要新建三张表即可,user表.role表.user_role表.其中user用户表,role角色表为保存用户权限 ...