阿里云Java SDK通过代理访问阿里云OpenAPI

简介: 经常有人会问,我们的服务器在内网,不想让服务器拥有外网IP前提下访问阿里云的OpenAPI可以吗?今天我们对此进行一个解答。在文章中,我们使用最新的阿里云Java SDK:`com.aliyun:aliyun-java-sdk-core:4.5.20`。文章的示例代码中,代理假设为192.168.1.1:8888,具体代理,包括下面示例里用到的用户名、密码请在开发、测试时改为对应的正确配置。

经常有人会问,我们的服务器在内网,不想让服务器拥有外网IP前提下访问阿里云的OpenAPI可以吗?今天我们对此进行一个解答。在文章中,我们使用最新的阿里云Java SDK:com.aliyun:aliyun-java-sdk-core:4.5.20

文章的示例代码中,代理假设为192.168.1.1:8888,具体代理,包括下面示例里用到的用户名、密码请在开发、测试时改为对应的正确配置。

1. 阿里云Java SDK支持的HTTP客户端

阿里云Java SDK的HTTP客户端在com.aliyuncs.http.HttpClientFactory.buildClient(IClientProfile)中进行初始化,当前支持四种不同的客户端,定义在枚举类com.aliyuncs.http.HttpClientType中:

  • Compatible:传统的Java自带的Http客户端,用java.net进行HTTP访问;
  • ApacheHttpClientApache Httpclient客户端的实现,是阿里云Java SDK的默认实现;
  • OkHttpOkHttp客户端,当前暂不支持,不可用;
  • Custom:自定义客户端

因此,理论上,只要使用的HTTP客户端实现支持代理,那么阿里云Java SDK也支持代理。再不济,自定义客户端可以进行魔改。

2. 通用代理设置方式

2.1 环境变量中配置代理

阿里云Java SDK支持HTTP_PROXYHTTPS_PROXYNO_PROXY三个系统环境变量(注意大小写)。这些变量通过System.getEnv()读入。需要注意的是,使用System.setProperty()设置的变量是无效的。

在Linux系统中临时配置环境变量,可执行:

export HTTP_PROXY=http://192.168.1.1:8888
export HTTPS_PROXY=https://192.168.1.1:8888
AI 代码解读

然后正常初始化com.aliyuncs.IAcsClient即可。这种方式对代码无侵入,可写到应用启动脚本中。

2.2 代码中指定代理

阿里云Java SDK支持在代码中配置代理,并且配置的代理优先级高于环境变量中的配置:

// 配置HTTP客户端
HttpClientConfig config = HttpClientConfig.getDefault();
config.setHttpProxy("http://192.168.1.1:8888");
config.setHttpsProxy("https://192.168.1.1:8888");

// 配置SDK Profile
IClientProfile profile = DefaultProfile.getProfile(regionId, accessKeyId, accessKeySecret);
profile.setHttpClientConfig(config);

// 生成Client实例
IAcsClient client = new DefaultAcsClient(profile);
AI 代码解读

3. 针对特定实现的代理设置方式

3.1 HttpClientType.Compatible代理

HttpClientType.Compatible代理没有特殊的配置地方,参考2. 通用代理配置方式即可。启动HttpClientType.Compatible的方式可以是

// 配置HTTP客户端
HttpClientConfig config = HttpClientConfig.getDefault();
config.setClientType(HttpClientType.Compatible); // config.setCompatibleMode(true)也可以
AI 代码解读

也可以是:

// 配置HTTP客户端
HttpClientConfig config = HttpClientConfig.getDefault();
config.setCompatibleMode(true)也可以
AI 代码解读

3.2 HttpClientType.ApacheHttpClient代理

Apache Httpclient作为功能丰富的HTTP客户端,支持更多灵活的代理,包括各种代理认证。这里对以用户名/密码的代理进行示例:

// 配置HTTP客户端
HttpClientConfig config = HttpClientConfig.getDefault();
BasicCredentialsProvider credentialsProvider = new BasicCredentialsProvider();
credentialsProvider.setCredentials(new AuthScope("192.168.1.1", 8888),
    new UsernamePasswordCredentials("username", "password")); //请替换为真实的用户名/密码
config.setExtParam("apache.httpclient.builder", HttpClientBuilder.create()
    .setProxy(new HttpHost("192.168.1.1", 8888))
    .setDefaultCredentialsProvider(credentialsProvider));

// 配置SDK Profile
IClientProfile profile = DefaultProfile.getProfile(regionId, accessKeyId, accessKeySecret);
profile.setHttpClientConfig(config);

// 生成Client实例
DefaultAcsClient client = new DefaultAcsClient(profile);
AI 代码解读

这里直接把构造好的org.apache.http.impl.client.HttpClientBuilder(注意是HttpClientBuilder,不是HttpClient)塞到HttpClientConfigextParam里,阿里云Java SDK在com.aliyuncs.http.clients.ApacheHttpClient.initHttpClientBuilder()HttpClientBuilder取出。那么,想要怎么配,和阿里云Java SDK已经无关了,直接看Apache httpClient的文档,一切皆可配。

目录
打赏
0
0
1
0
528
分享
相关文章
|
16天前
aliyun-upload-sdk访问空值Bug
这段内容描述了一个代码问题:方法调用时未正确处理参数。第一个图显示方法需要传入参数,但未进行空值判断;第二个图显示调用时未传参,导致报错并使上传失败。这是典型的参数处理不当引发的运行时错误,需完善判空逻辑和参数传递以解决问题。
aliyun-upload-sdk访问空值Bug
JAVA接入DeepSeek大模型接口开发---阿里云的百炼模型
随着大模型的越来越盛行,现在很多企业开始接入大模型的接口,今天我从java开发角度来写一个demo的示例,用于接入DeepSeek大模型,国内的大模型有很多的接入渠道,今天主要介绍下阿里云的百炼模型,因为这个模型是免费的,只要注册一个账户,就会免费送百万的token进行学习,今天就从一个简单的可以执行的示例开始进行介绍,希望可以分享给各位正在学习的同学们。
235 3
JAVA接入DeepSeek大模型接口开发---阿里云的百炼模型
阿里云国际OpenAPI多接口快速管理ECS服务器教程
阿里云国际OpenAPI多接口快速管理ECS服务器教程
拥抱 OpenTelemetry:阿里云 Java Agent 演进实践
本文介绍了阿里云 Java Agent 4.x 版本在基于 OTel Java Agent 二次开发过程中的实践与思考,并重点从功能、性能、稳定性、兼容性四个方面介绍了所做的工作。同时也介绍了阿里云可观测团队积极参与开源建设取得的丰厚成果。
550 21
拥抱 OpenTelemetry:阿里云 Java Agent 演进实践
拥抱 OpenTelemetry:阿里云 Java Agent 演进实践
拥抱 OpenTelemetry:阿里云 Java Agent 演进实践
沉浸式集成阿里云 OpenAPI|Alibaba Cloud API Toolkit for VS Code
Alibaba Cloud API Toolkit for VSCode 是集成了 OpenAPI 开发者门户多项功能的 VSCode 插件,开发者可以通过这个插件方便地查找API文档、进行API调试、插入SDK代码,并配置基础环境设置。我们的目标是缩短开发者在门户和IDE之间的频繁切换,实现API信息和开发流程的无缝结合,让开发者的工作变得更加高效和紧密。
沉浸式集成阿里云 OpenAPI|Alibaba Cloud API Toolkit for VS Code
Java连接阿里云MaxCompute例
要使用Java连接阿里云MaxCompute数据库,首先需在项目中添加MaxCompute JDBC驱动依赖,推荐通过Maven管理。避免在代码中直接写入AccessKey,应使用环境变量或配置文件安全存储。示例代码展示了如何注册驱动、建立连接及执行SQL查询。建议使用RAM用户提升安全性,并根据需要配置时区和公网访问权限。具体步骤和注意事项请参考阿里云官方文档。
631 10
通过Java SDK调用阿里云模型服务
在阿里云平台上,可以通过创建应用并使用模型服务完成特定任务,如生成文章内容。本示例展示了一段简化的Java代码,演示了如何调用阿里云模型服务生成关于“春秋战国经济与文化”的简短文章。示例代码通过设置系统角色为历史学家,并提出文章生成需求,最终处理并输出生成的文章内容。在实际部署前,请确保正确配置环境变量中的密钥和ID,并根据需要调整SDK导入语句及类名。更多详情和示例,请参考相关链接。
《阿里云产品手册2022-2023 版》——OpenAPI Explorer
《阿里云产品手册2022-2023 版》——OpenAPI Explorer
114 0
利用阿里云 OpenAPI 以及 DNS 云解析自建 DDNS 动态域名解析服务
家里闲置着一台老款的Mac mini Server,跑OS X越来越慢,索性装上了Cent OS 7,变成了一台家庭服务器,装上了Plex媒体服务器和Transmission下载服务,同时,也装上了Nginx、Mysql、MongoDB、Redis等,可以调试代码,甚至担当一些小型项目的服务器。 不过,只在家庭内网使用,功能太有限,于是接下来面临的一个问题就是内网穿透。使用过花生壳和花生棒,服务相当不稳定,而且种种受限,每要多加一个端口就要多花钱,安全性也有问题。
5483 0
利用阿里云 OpenAPI 以及 DNS 云解析自建 DDNS 动态域名解析服务