java编码请求腾讯云OCR的API返回结果报400

首先,参考文档地址在此。
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]}

你期待的结果是什么?实际看到的错误信息又是什么?

希望能有大神告诉我,到底错误在哪儿?

阅读 3.6k
1 个回答
新手上路,请多包涵

body格式错了

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题