侧边栏壁纸
博主头像
极客魔方博主等级

远方不远,就在脚下

  • 累计撰写 12 篇文章
  • 累计创建 27 个标签
  • 累计收到 4 条评论

目 录CONTENT

文章目录

java 如何使用代理访问接口

Rubik
2023-07-27 / 0 评论 / 2 点赞 / 39 阅读 / 3127 字 / 正在检测是否收录...
温馨提示:
本文最后更新于 2023-07-28,若内容或图片失效,请留言反馈。部分素材来自网络,若不小心影响到您的利益,请联系我们删除。

背景

在和某开放平台交互的时候,由于必须要设置白名单,本地家中ip 会变化,配置白名单的流程又很复杂,所以需要使用代理的方式来访问开放平台。

本文主要讲的就是在 java 中如何使用代理来访问开放平台,利用服务器的公网 ip,免除一次次的配置 ip 带来的困扰。

服务器代理安装

这是一篇极简的代理搭建教程,可以根据该教程来搭建代理,配合使用。

使用squid配置高匿代理 - 极客魔方|专注于技术的博客 (geek45.com)

使用 restTemplate 配置代理


public static SimpleClientHttpRequestFactory getFactory() {
    SimpleClientHttpRequestFactory factory = new SimpleClientHttpRequestFactory();
    //单位为ms
    factory.setReadTimeout(10 * 1000);
    //单位为ms
    factory.setConnectTimeout(30 * 1000);
    // 代理的url网址或ip, port端口
    InetSocketAddress address = new InetSocketAddress("your_server_ip", 3128);
    Proxy proxy = new Proxy(Proxy.Type.HTTP, address);
    factory.setProxy(proxy);
    return factory;
}
<p>public static void main(String[] args) {
RestTemplate restTemplate = new RestTemplate();
restTemplate.setRequestFactory(getFactory());
HttpHeaders headers = new HttpHeaders();
headers.set("authorization",
"Basic " +
Base64.getEncoder()
.encodeToString("your_proxy_username:your_proxy_password".getBytes()));
String result = restTemplate.exchange("http://httpbin.org/ip", HttpMethod.GET, new HttpEntity<>(null, headers), String.class).getBody();
System.out.println(result);
}

使用 apache http client 配置加密代理

很多博主都是只写了如何认证,但是例子中并没有把代理信息放到请求中。

我不清楚历史的版本怎么样,目前我所使用的版本,是无法真正使用这个代理。

感觉很多博主都是抄下来的,并没有自己真实去验证。使用下面这种方式亲测可行!

public static void main(String[] args) throws MalformedChallengeException, IOException {
// 代理地址和端口号
HttpHost proxy = new HttpHost("your_server_ip", 3128, "http");</p>
<pre><code>// 配置代理认证信息
BasicScheme proxyAuth = new BasicScheme();
// Make client believe the challenge came form a proxy
proxyAuth.processChallenge(new BasicHeader(AUTH.PROXY_AUTH, "BASIC realm=default"));
BasicAuthCache authCache = new BasicAuthCache();
authCache.put(proxy, proxyAuth);
// 配置代理用户名密码
CredentialsProvider credsProvider = new BasicCredentialsProvider();
credsProvider.setCredentials(
        new AuthScope(proxy),
        new UsernamePasswordCredentials("your_proxy_username", "your_proxy_password"));
// 构建 http 请求上下文内容
HttpClientContext context = HttpClientContext.create();
// 设置代理信息
context.setAuthCache(authCache);
// 设置代理认证信息
context.setCredentialsProvider(credsProvider);
HttpClient client = HttpClients.custom().setDefaultRequestConfig(RequestConfig.custom().setProxy(proxy).build()).build();
// 请求接口
HttpResponse res = client.execute(new HttpGet("http://httpbin.org/ip"), context);
System.err.println(EntityUtils.toString(res.getEntity(), StandardCharsets.UTF_8));

}

2

评论区