Java网络代理

http://download.oracle.com/javase/6/docs/technotes/guides/net/proxies.html

 

Javamail不能够使用HttpProxy,只能使用SocksProxy。

 

Socks的代理是全局的,而且没有例外设置。Http的代理是可以设置例外列表的,使用正则表达式匹配。

使用HttpProxy时如果访问www.baidu.com ,必须写成 http://www.baidu.com/ ,不能是 http://www.baidu.com

 

Java5新特性

可以对单个Socks或则Http等连接使用独立的代理。

 

Javamail配置

使用mail.smtp.socketFactory.class配置

参加 http://javamail.kenai.com/nonav/javadocs/com/sun/mail/smtp/package-summary.html

 

Java 中实现网络代理对接有不同的场景,以下为你介绍两种常见情况及示例: ### Java 实现动态代理模式与权限控制系统中的代理对接 在这个场景中,使用 Java 的 Proxy 类来动态创建代理对象,并在方法调用前进行权限检查。以下是相关代码示例: ```java package com.example.permission; import java.lang.reflect.InvocationHandler; import java.lang.reflect.Method; import java.lang.reflect.Proxy; public class PermissionProxy implements InvocationHandler { private Object target; private PermissionChecker permissionChecker; private String role; public PermissionProxy(Object target, PermissionChecker permissionChecker, String role) { this.target = target; this.permissionChecker = permissionChecker; this.role = role; } public Object createProxy() { return Proxy.newProxyInstance(target.getClass().getClassLoader(), target.getClass().getInterfaces(), this); } @Override public Object invoke(Object proxy, Method method, Object[] args) throws Throwable { // 权限检查 if (!permissionChecker.hasPermission(role, method.getName())) { System.out.println("Permission denied for role: " + role + " to perform " + method.getName()); return null; } // 执行方法 return method.invoke(target, args); } } ``` 这里通过 `Proxy.newProxyInstance` 方法创建代理对象,在 `invoke` 方法中进行权限检查,若有权限则执行目标方法,否则返回 `null` 并输出权限拒绝信息 [^1]。 ### Java 中使用四叶天动态代理 IP 构建 IP 代理池进行爬虫代理对接 若要使用 IP 代理池来进行代理 IP 爬虫,首先要购买一些可用 IP,例如可以使用四叶天(https://www.siyetian.com)提供的高质量动态 IP 服务。不过引用中未给出具体的 Java 代码实现,但大致思路是在使用 `HttpClient` 或 `Jsoup` 进行网络请求时,设置代理 IP [^2]。 以下是一个简单的 `HttpClient` 设置代理的示例代码: ```java import org.apache.http.HttpHost; import org.apache.http.client.config.RequestConfig; import org.apache.http.client.methods.CloseableHttpResponse; import org.apache.http.client.methods.HttpGet; import org.apache.http.impl.client.CloseableHttpClient; import org.apache.http.impl.client.HttpClients; import org.apache.http.util.EntityUtils; import java.io.IOException; public class HttpClientProxyExample { public static void main(String[] args) { // 设置代理 IP 和端口 HttpHost proxy = new HttpHost("proxy.example.com", 8080); RequestConfig config = RequestConfig.custom() .setProxy(proxy) .build(); CloseableHttpClient httpClient = HttpClients.custom() .setDefaultRequestConfig(config) .build(); HttpGet httpGet = new HttpGet("https://www.example.com"); try (CloseableHttpResponse response = httpClient.execute(httpGet)) { System.out.println(EntityUtils.toString(response.getEntity())); } catch (IOException e) { e.printStackTrace(); } } } ``` ### Java 企业微信对接中的代理设置 在 Java 企业微信对接中,也可以设置代理。配置文件示例如下: ```yaml wechat: # 企业Id appid: appidxxxxxxxxxxx # 查询用的API秘钥 appsecret: appsecretxxxxxxxxxxxxx # 增删改用的API秘钥 apisecret: apisecretxxxxxxxxxxxxxxxxx # 是否使用代理 useProxy: false # 是否开启同步至企业微信 enableToWeXin: false # 代理地址端口 wechatProxy: 10.1.1.1 # 代理地址端口 wechatPort: 6666 # 回调地址的token callback-token: tokenxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx # 回调地址的秘钥 callback-aesKey: aesKeyxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx ``` 这里可以根据 `useProxy` 的值来决定是否使用代理,若使用则根据 `wechatProxy` 和 `wechatPort` 配置代理地址和端口 [^4]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值