开发者社区 问答 正文

tomcat请求阿里云发票识别问题

String host = "https://ocrapi-document.taobao.com"; String path = "/ocrservice/document"; String method = "POST";

String appcode = "83359fd73fe94948385f570e3c139105";//自己去阿里云申请生成 Map<String, String> headers = new HashMap<String, String>(); //最后在header中的格式(中间是英文空格)为Authorization:APPCODE 83359fd73fe94948385f570e3c139105 headers.put("Authorization", "APPCODE " + appcode); //根据API的要求,定义相对应的Content-Type headers.put("Content-Type", "application/json; charset=UTF-8"); Map<String, String> querys = new HashMap<String, String>(); String bodys = "{"img":""+ imgToBase64(pathName)+""}"; String fileBody=""; try { /** * 重要提示如下: * HttpUtils请从 * https://github.com/aliyun/api-gateway-demo-sign-java/blob/master/src/main/java/com/aliyun/api/gateway/demo/util/HttpUtils.java * 下载 * * 相应的依赖请参照 * https://github.com/aliyun/api-gateway-demo-sign-java/blob/master/pom.xml */ HttpResponse response = HttpUtils.doPost(host, path, method, headers, querys, bodys); System.out.println(response.toString()); //获取response的body System.out.println(EntityUtils.toString(response.getEntity()));

        fileBody = EntityUtils.toString(response.getEntity());
  
  
  
  以上代码在JVM测试时正常运行,在web项目中,部署在tomcat7时,返回
  HTTP/1.1 400 Bad Request [Date: Wed, 17 Nov 2021 01:48:02 GMT, Content-Type: application/oct-stream, Content-Length: 0, Connection: keep-alive, Keep-Alive: timeout=25, X-Ca-Error-Message: Invalid AppCode `not exists`, Server: Kaede/3.5.3.583 (sz00i3n93), X-Ca-Error-Code: A400AC

A400AC 400 Invalid AppCode ${Reason} 当使用AppCode模式授权时,未找到AppCode 怀疑可能是code前面存在空格,已经用URLEncoder.encode(" ", "UTF-8");编译空格,却依旧报错

展开
收起
游客s4zpwa4kzwmhg 2021-11-17 14:39:29 819 分享 版权
阿里云 AI 助理回答

根据您提供的错误信息,问题在于AppCode验证失败,报错信息显示为 "Invalid AppCode not exists",这意味着服务端没有找到或识别出您提供的AppCode。尽管您提到可能是因为代码中存在空格的问题并尝试使用URLEncoder.encode(" ", "UTF-8")处理,但在这个场景下,直接在字符串拼接时带入空格通常不会是导致此错误的原因,因为您已经正确地将AppCode值用双引号包围了。

这里有几个可能的解决方向:

  1. 检查AppCode是否正确:首先,请确保您使用的appcode变量中的值是准确无误地从阿里云控制台获取的,并且没有在复制过程中引入任何额外字符或错误。重新登录阿里云控制台,进入相应产品的API密钥管理页面核对AppCode。

  2. 环境差异问题:考虑到在JVM测试环境下正常工作但在Tomcat部署时出现问题,可能存在环境配置的差异。请检查Tomcat服务器的网络设置、代理设置等,确保它能够顺利访问到阿里云的API服务地址,没有被防火墙或其他安全策略阻拦。

  3. 字符编码问题:虽然直接因为空格引起问题的可能性较低,但可以尝试显式地去除AppCode字符串前后的空白字符,确保其纯净性。可以使用appcode.trim()来移除两端的空白字符。

  4. 日志记录与调试:在请求发送之前,打印出实际构建的headers和body内容,特别是Authorization头部的实际输出,确认AppCode是否以正确的格式被加入到请求头中。这有助于定位问题所在。

  5. 依赖库版本:确认项目中使用的HTTP客户端库(如上述代码片段中未完全展示的HttpUtils)是否有已知的兼容性问题或者需要更新到最新版本。有时候,较旧的库版本可能不支持某些最新的API要求或有已知bug。

  6. API调用限制:检查阿里云文档,确认是否有IP白名单或其他访问控制的设置,以及您的应用是否满足所有调用该API的前提条件。

如果以上步骤都无法解决问题,建议直接联系阿里云技术支持,提供详细的错误信息和调用日志,以便他们能更深入地帮助您排查问题。

有帮助
无帮助
AI 助理回答生成答案可能存在不准确,仅供参考
0 条回答
写回答
取消 提交回答