首先,参考文档地址在此。
https://cloud.tencent.com/doc...
以下是详细描述。
我想学习调用调用腾讯云开放的OCR接口,在找了众多资料以后,第一次解决了401错误后,编译不报错,但是现在停在返回的400错误不知道如何解决问题。请大神帮忙查看并不吝指教,谢谢。
找了好几遍没有找到为什么会报400了,请大神忙里抽闲帮忙看看,谢谢。### 问题描述
问题出现的环境背景及自己尝试过哪些方法
使用的工具是IDEA2017,尝试过去掉head和自己添加head的方法了。尝试过用以下请求代码,但是得到的返回数据为空。即response是null,连toString都会报空指针。
Response response = given().contentType("application/json")
.header("host", "recognition.image.myqcloud.com")
.header("authorization", authorization)
.body(body) //这个body就是主函数里面的body
.post("http://recognition.image.myqcloud.com/ocr/general");
相关代码
// 请把代码文本粘贴到下方(请勿用图片代替代码)
主函数代码:
public static void main(String arg[]) throws Exception {
String appId = "这个用的是腾讯提供的id";
String secretKey = "这个用的是腾讯提供的key";
String secretId = "这个用的是腾讯提供的id";
String bucketName = "";
Long expired = 259200L;
//下面这个是签名生成代码,是腾讯提供的代码,没有任何更改。
String authorization = Sign.appSign(appId, secretId, secretKey, bucketName, expired);
//这是生成的图片base64代码,经测试是成功输出了图片的base64
String imageCode = GetImageStr(new File("C:\\Users\\William\\Desktop\\\\bandicam 2018-08-14 17-58-15-348.mp4_20180814_180014.334.jpg").getAbsolutePath());
//这个是自建类,JSON序列化后格式是这样:{"appid":"","url":null,"image":"/9j/4AAQSkZJR..."}
JsonOcr jsonOcr = new JsonOcr();
jsonOcr.setAppid(appId);
jsonOcr.setImage(imageCode);
ObjectMapper mapper = new ObjectMapper();
String body = mapper.writeValueAsString(jsonOcr);
//这里执行连接,采用的是POST请求,传入的参数是Url,请求方式,JSON内容和签名。
String url = "http://recognition.image.myqcloud.com/ocr/general";
HttpResponse response = HttpUtil.**doExecuteOCR**(url, HttpUtil.Method.POST, body, authorization);
System.out.println(response.toString());
}
请求代码如下:
public static HttpResponse doExecuteOCR(String url, Method method, String content,String authorization) throws IOException, NullPointerException {
RequestConfig defaultRequestConfig = RequestConfig.custom()
.setSocketTimeout(2 * 60 * 1000)
.setConnectTimeout(2 * 60 * 1000)
.setConnectionRequestTimeout(2 * 60 * 1000)
.setStaleConnectionCheckEnabled(true)
.build();
CloseableHttpClient client = HttpClients.custom()
.setDefaultRequestConfig(defaultRequestConfig)
.build();
//创建请求体
HttpEntity entity = new StringEntity(content, ContentType.APPLICATION_JSON);
//创建请求
HttpRequestBase request = **buildRequestOcr**(url, method, entity,authorization);
return client.execute(request);
}
创建请求代码如下:
private static HttpRequestBase buildRequestOcr(String url, final HttpUtil.Method method, HttpEntity entity,String authorization) {
HttpRequestBase request = null;
HttpPost post = new HttpPost(url);
post.setHeader("host","recognition.image.myqcloud.com");
post.setHeader("content-type","application/json");
post.setHeader("authorization",authorization);
post.setEntity(entity);
request = post;
return request;
}
腾讯接口的返回结果通过System.out.println(response.toString())得到输出如下:
HttpResponseProxy{HTTP/1.1 400 Bad Request [Server: nginx, Date: Thu, 16 Aug 2018 07:44:48 GMT, Content-Type: application/json; charset=utf-8, Content-Length: 86, Connection: keep-alive]}
你期待的结果是什么?实际看到的错误信息又是什么?
希望能有大神告诉我,到底错误在哪儿?
body格式错了