HttpClient接入腾讯云api,Post请求Header与body无效。

LunaticTian 2018-04-22 03:19:06
最近在和同学一起写一个小Test,其中有一环是要求接入腾讯云的orc的服务。在用HttpClient,不管任何修改Header还是body,返回一直是{"code":3,"message":"invalid request: parsing error - check content-type and body","data":{}},就算修改Header,body还是一样,代码在最下方。
但是用postman就会返回正确的JSON,如下图:




public void dome() throws Exception {

CloseableHttpClient httpClient = HttpClients.createDefault();

String entityStr = null;
CloseableHttpResponse response = null;

try {

// 创建POST请求对象
HttpPost httpPost = new HttpPost("http://recognition.image.myqcloud.com/ocr/handwriting");

/*
* 添加请求参数
*/
// 创建请求参数
List<NameValuePair> list = new LinkedList<>();
BasicNameValuePair param1 = new BasicNameValuePair("appid", "125220938");
BasicNameValuePair param2 = new BasicNameValuePair("bucket", "");
BasicNameValuePair param3 = new BasicNameValuePair("url",
"http://oi4ty6vxc.bkt.clouddn.com/wangyiyunLOGE.png");
list.add(param1);
list.add(param2);
list.add(param3);
// 使用URL实体转换工具
UrlEncodedFormEntity entityParam = new UrlEncodedFormEntity(list, "UTF-8");
httpPost.setEntity(entityParam);

/*
* 添加请求头信息
*/
httpPost.addHeader("host", "recognition.image.myqcloud.com");
httpPost.addHeader("Content-Type", "application/json");
httpPost.addHeader("authorization",
"gekuLE8u+p+J7jHadlYhyJhgCyNhPTEyNTIyMDkzO"
+ "DEmYj1maWxlJms9QUtJRGM4VGNhTnZVbGJMdUlZeVVDaTNDU2drZEtxUDJmM"
+ "E5kJmU9MTUyNjk2NTA1OSZ0PTE1MjQJnU9MCZmPQ== ");
// 执行请求
response = httpClient.execute(httpPost);
// 获得响应的实体对象
HttpEntity entity = response.getEntity();
// 使用Apache提供的工具类进行转换成字符串
entityStr = EntityUtils.toString(entity, "UTF-8");

// System.out.println(Arrays.toString(response.getAllHeaders()));

} catch (ClientProtocolException e) {
System.err.println("Http协议出现问题");
e.printStackTrace();
} catch (IOException e) {
System.err.println("IO异常");
e.printStackTrace();
} finally {
// 释放连接
if (null != response) {
try {
response.close();
httpClient.close();
} catch (IOException e) {
System.err.println("释放连接出错");
e.printStackTrace();
}
}
}

// 打印响应内容
System.out.println(entityStr);
}
...全文
1149 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
LunaticTian 2018-04-23
  • 打赏
  • 举报
回复
引用 1 楼 dgqjava 的回复:
不应该是UrlEncodedFormEntity而应该是stringentity, 内容就是json字符串, 你这个就是key=value形式的表单字符串而不是json了
嗯,解决了,就是这个问题。虽然是自己解决的,但是还是要谢谢你啦。
dgqjava 2018-04-23
  • 打赏
  • 举报
回复
不应该是UrlEncodedFormEntity而应该是stringentity, 内容就是json字符串, 你这个就是key=value形式的表单字符串而不是json了

62,614

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧