帮忙看下阿里云OpenAPI 呢?;
Exception in thread "main" com.aliyun.tea.TeaUnretryableException
at com.aliyun.oss.Client.postObject(Client.java:5422)
at com.aliyun.facebody20191230.Client.compareFaceAdvance(Client.java:915)
at com.aliyun.sample.CompareFace.main(Sample.java:55)
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。
根据您提供的错误信息和知识库中的相关资料,以下是对问题的详细分析与解决方案:
您在调用阿里云OpenAPI时遇到了以下异常:
Exception in thread "main" com.aliyun.tea.TeaUnretryableException
at com.aliyun.oss.Client.postObject(Client.java:5422)
at com.aliyun.facebody20191230.Client.compareFaceAdvance(Client.java:915)
at com.aliyun.sample.CompareFace.main(Sample.java:55)
从错误堆栈来看,TeaUnretryableException 是由网络问题导致的异常,通常在网络请求失败且达到最大重试次数后抛出。这表明您的代码在尝试调用阿里云服务时可能遇到了网络连接问题。
网络连接问题
TeaUnretryableException 通常是由于客户端无法成功连接到阿里云服务器引起的。可能的原因包括:
Endpoint 配置错误
Config 中的 endpoint 设置不正确,可能会导致请求无法到达目标服务。例如,您需要确保 endpoint 与所调用的服务区域匹配。SSL/TLS 证书校验失败
AccessKey 配置问题
AccessKeyId 或 AccessKeySecret 配置错误,可能会导致认证失败,进而引发网络请求异常。以下是针对上述问题的解决步骤:
ping 或 curl 测试目标服务的 Endpoint 是否可达。例如:
ping dysmsapi.aliyuncs.com
curl https://dysmsapi.aliyuncs.com
Config 中的 endpoint 设置正确。例如,如果您调用的是 facebody 服务,则应设置为:
config.endpoint = "facebody.cn-shanghai.aliyuncs.com";
endpoint 与服务区域匹配。ALIBABA_CLOUD_ACCESS_KEY_ID 和 ALIBABA_CLOUD_ACCESS_KEY_SECRET 已正确设置。config.setAccessKeyId(System.getenv("ALIBABA_CLOUD_ACCESS_KEY_ID"));
config.setAccessKeySecret(System.getenv("ALIBABA_CLOUD_ACCESS_KEY_SECRET"));
RuntimeOptions 来忽略证书校验:
com.aliyun.teautil.models.RuntimeOptions runtimeOptions = new com.aliyun.teautil.models.RuntimeOptions();
runtimeOptions.ignoreSSL = true;
client.compareFaceAdvance(compareFaceRequest, runtimeOptions);
try {
client.compareFaceAdvance(compareFaceRequest);
} catch (com.aliyun.tea.TeaUnretryableException e) {
System.out.println("网络异常:" + e.getMessage());
System.out.println("最后一次请求信息:" + e.getLastRequest());
} catch (com.aliyun.tea.TeaException e) {
System.out.println("业务异常,错误码:" + e.getCode());
System.out.println("错误信息:" + e.getMessage());
System.out.println("诊断地址:" + e.getData().get("Recommend"));
} catch (Exception e) {
System.out.println("其他异常:" + e.getMessage());
}
通过以上步骤,您可以逐步排查并解决 TeaUnretryableException 异常。建议优先检查网络连接和 Endpoint 配置,同时确保 AccessKey 配置正确。如果问题仍然存在,请提供更多上下文信息(如完整的代码片段和运行环境),以便进一步分析。
希望以上解答对您有所帮助!