阿里云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

然后正常初始化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);

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

3.1 HttpClientType.Compatible代理

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

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

也可以是:

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

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);

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

目录
相关文章
|
1月前
|
Java 开发工具
【Azure Storage Account】Java Code访问Storage Account File Share的上传和下载代码示例
本文介绍如何使用Java通过azure-storage-file-share SDK实现Azure文件共享的上传下载。包含依赖引入、客户端创建及完整示例代码,助你快速集成Azure File Share功能。
334 4
|
7月前
|
人工智能 IDE API
10行代码,实现你的专属阿里云OpenAPI MCP Server
本文介绍如何用10行Python代码创建专属阿里云OpenAPI MCP Server。针对传统MCP Server工具固化、开发复杂等问题,提出借助alibaba-cloud-ops-mcp-server实现灵活拓展的方案。通过配置服务与API名称,运行简短代码即可生成支持SSE连接的MCP Server。用户无需深入了解阿里云OpenAPI细节,大幅降低开发门槛。未来将探索通用工具设计,实现固定工具调用任意API,进一步提升灵活性与效率。
|
1月前
|
Java API 开发工具
百宝箱开放平台 ✖️ Java SDK
百宝箱提供Java SDK,支持开发者集成其开放能力。需先发布应用,准备Java 8+及Maven环境,通过添加依赖安装SDK,并初始化客户端调用对话型或生成型智能体,实现会话管理、消息查询与文件上传等功能。
1262 0
百宝箱开放平台 ✖️ Java SDK
|
3月前
|
存储 安全 Java
java: 无法访问org.springframework.ldap.core.LdapTemplate
java: 无法访问org.springframework.ldap.core.LdapTemplate
131 9
|
5月前
|
缓存 Java 数据库
Java 访问修饰符使用方法与组件封装方法详细说明
本文详细介绍了Java中访问修饰符(`public`、`private`、`protected`、默认)的使用方法,并结合代码示例讲解了组件封装的核心思想与实现技巧。内容涵盖数据封装、继承扩展、模块化设计与接口隔离等关键技术点,帮助开发者提升代码的可维护性与安全性,适用于Java初学者及进阶开发者学习参考。
139 1
|
5月前
|
存储 Java API
MinIO Java SDK 7.1.4 升级到 8.5.17 需要注意什么
现在我需要你帮我分析对比这个两个sdk在对外的接口设计上是否有不兼容的变更
447 5
|
8月前
|
存储 算法 安全
Java对象创建和访问
Java对象创建过程包括类加载检查、内存分配(指针碰撞或空闲列表)、内存初始化、对象头设置及初始化方法执行。访问方式有句柄和直接指针两种,前者稳定但需额外定位,后者速度快。对象创建涉及并发安全、垃圾回收等机制。
121 0
Java对象创建和访问
|
10月前
|
NoSQL JavaScript 前端开发
Java访问MongoDB
Java访问MongoDB
154 21
《阿里云产品手册2022-2023 版》——OpenAPI Explorer
《阿里云产品手册2022-2023 版》——OpenAPI Explorer
177 0
下一篇
oss云网关配置