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. pyqt5 树节点点击实现多窗口切换

    # coding=utf-8 import sys from PyQt5.QtWidgets import * from PyQt5.QtCore import * from PyQt5.QtGui ...

  2. centos7开放及查看端口

    centos7中的防火墙改成了firewall,使用iptables无作用,开放端口的方法如下: firewall-cmd --zone=public --add-port=80/tcp --perm ...

  3. Google翻译实现

    https://blog.csdn.net/yingshukun/article/details/53470424 Google翻译实现

  4. tomcat日志警告WARNING: [SetPropertiesRule]{Server/Service/Engine/Host/Context} Setting property 'debug' to '0' did not find a matching property.

    日志中有警告: [SetPropertiesRule]{Server/Service/Engine/Host/Context} Setting property 'debug' to '0' did ...

  5. 批处理no.bat

    在公司每次我启动电脑, 网络连接需要一段时间, 而我想在这段小时间里面, 一旦网络连接成功就帮我启动微信和qq, 如果还没有连接成功就继续监测直到有网络了才会成功才会打开两个程序, 当打开程序后脚本自 ...

  6. [c/c++] programming之路(4)、常量和变量

    一.打开多个程序(温习) #include<stdio.h> #include<stdlib.h> void main(){ ; ]; scanf("%d" ...

  7. 尝试解决cifar10问题

    我理解这个问题和猫狗的不同,在于将2类扩展为10类,其它的地方我准备采用相同的方法. 注意事项: 1.我要用kaggle的数据集,而不是用其它的数据集: 2.最终得到的结果要以test为导向: 1.先 ...

  8. JDK8新特性:使用Optional避免null导致的NullPointerException

    空指针异常是导致Java应用程序失败的最常见原因.以前,为了解决空指针异常,Google公司著名的Guava项目引入了Optional类,Guava通过使用检查空值的方式来防止代码污染,它鼓励程序员写 ...

  9. 02MySQL中的数据类型

    一.数值 INT DECIMAL 准确的小数值 FLOAT DOUBLE 二.字符串类型 CHAR(m) 此数据类型用于表示固定长度的字符串,可以包含最多达255个字符,其中m代表字符串的长度.长度固 ...

  10. Django 创建项目笔记

    基本命令 mkdir mysite # 创建项目目录,常取名mysite cd mysite virtualenv env # env\Scripts\activate.bat # Win pip i ...