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");编译空格,却依旧报错
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。
根据您提供的错误信息,问题在于AppCode验证失败,报错信息显示为 "Invalid AppCode not exists
",这意味着服务端没有找到或识别出您提供的AppCode。尽管您提到可能是因为代码中存在空格的问题并尝试使用URLEncoder.encode(" ", "UTF-8")
处理,但在这个场景下,直接在字符串拼接时带入空格通常不会是导致此错误的原因,因为您已经正确地将AppCode值用双引号包围了。
这里有几个可能的解决方向:
检查AppCode是否正确:首先,请确保您使用的appcode
变量中的值是准确无误地从阿里云控制台获取的,并且没有在复制过程中引入任何额外字符或错误。重新登录阿里云控制台,进入相应产品的API密钥管理页面核对AppCode。
环境差异问题:考虑到在JVM测试环境下正常工作但在Tomcat部署时出现问题,可能存在环境配置的差异。请检查Tomcat服务器的网络设置、代理设置等,确保它能够顺利访问到阿里云的API服务地址,没有被防火墙或其他安全策略阻拦。
字符编码问题:虽然直接因为空格引起问题的可能性较低,但可以尝试显式地去除AppCode字符串前后的空白字符,确保其纯净性。可以使用appcode.trim()
来移除两端的空白字符。
日志记录与调试:在请求发送之前,打印出实际构建的headers和body内容,特别是Authorization头部的实际输出,确认AppCode是否以正确的格式被加入到请求头中。这有助于定位问题所在。
依赖库版本:确认项目中使用的HTTP客户端库(如上述代码片段中未完全展示的HttpUtils
)是否有已知的兼容性问题或者需要更新到最新版本。有时候,较旧的库版本可能不支持某些最新的API要求或有已知bug。
API调用限制:检查阿里云文档,确认是否有IP白名单或其他访问控制的设置,以及您的应用是否满足所有调用该API的前提条件。
如果以上步骤都无法解决问题,建议直接联系阿里云技术支持,提供详细的错误信息和调用日志,以便他们能更深入地帮助您排查问题。