代码如下:
JSONObject json = new JSONObject();
@SuppressWarnings("deprecation")
CloseableHttpClient client = new DefaultHttpClient();
CloseableHttpResponse response = null;
HttpPost post = new HttpPost(url);
post.setHeader("Content-Type", "application/raw");
post.setHeader("Accept", "*/*");
System.out.println(post.getProtocolVersion());
Gson gson = new GsonBuilder().disableHtmlEscaping().create();
Map<String,String> a=new HashMap<String, String>();
a.put("token", "cIZ9ExmrOAR0WieMjIEAvv4U3DY8iJ+Kg+BSDcytauw=");
a.put("limit", "0");
post.setEntity(new StringEntity(gson.toJson(a), "utf-8"));
response = client.execute(post);
// 获取响应消息实体
HttpEntity entity = response.getEntity();
// 响应状态
logger.info("从主平台获取请求响应状态:"+response.getStatusLine());
logger.info("从主平台获取请求响应体:"+response.getEntity());
返回的response 的状态是200 但是 报 (https://img2018.cnblogs.com/blog/1198591/201911/1198591-20191129143333591-799511009.png)
有没有哪位大神遇到过
@^keepHungry$:
参考这里
如果用params传参 就不能获取到数据,直接报错。要将参数放到raw 中的body中 才能获取到数据。然后 我用过code 转换成代码。 放到main方法中执行,是不行的!
@^keepHungry$:
请求头 ContentType : application/json ?
@小小高: 对。
这应该是你正在使用的协议和主机接受的协议不一致
//设置https协议访问
System.setProperty("https.protocols", "TLSv1,TLSv1.1,TLSv1.2,SSLv3");
参考文章:https://blog.csdn.net/qq_23832313/article/details/83013998
试过 ,不行!!!
补充下,我是通过vpn连接 然后 发送http请求的
我用postman 发送请求 就可以!
@^keepHungry$:
有没有可能是你post请求的参数处理方式的问题
@無腳鳥: 怎么处理! 我是直接Map<String,String> 然后通过gson去转换成json。放到httpPost中的entity里。如果有问题,那就不能获取到200状态了
@^keepHungry$: postman可以生成 java http 请求代码哦
@小小高: 表示 试过。然鹅 没用
@^keepHungry$: 嗯嗯,
第一、协议的问题,需要明确指定HTTPS的协议版本,
但是1、你已经查看过自己支持的协议,2、并且也改成了自己支持的协议;3、设置了协议,比如:System.setProperty("https.protocols", "TLSv1.2");结果还是不行。
那我暂时也想不出来还有什么原因。。。
@無腳鳥: 如果协议不对的话,状态码就不是200了 。
response.getEntity().content().length得到的 是-1
– ^keepHungry$ 4年前感谢大家!我知道问题了。原因是 数据量过大导致的。
– ^keepHungry$ 4年前