gpt4 book ai didi

小程序中的 Netty 和代理服务器

转载 作者:行者123 更新时间:2023-12-04 19:11:40 24 4
gpt4 key购买 nike

我们在 Java 小程序中使用 Netty 与 tomcat 服务器通信。这完美地工作。

我可以使用下面发布的帮助程序类获取代理信息。

我的问题是如何向 Netty 提供代理服务器信息?

更多信息:

我们有一个用户在 Internet Explorer 中配置了代理服务器。网页和Java小程序得到服务,但是当Netty尝试连接时,它绕过代理服务器并直接连接;这失败是因为用户设置了防火墙以防止直接连接——所有客户端连接都必须通过代理服务器。

获取代理信息的助手代码:

import java.net.InetSocketAddress;
import java.net.Proxy;
import java.net.ProxySelector;
import java.net.URI;
import java.net.URL;
import java.util.Iterator;
import java.util.List;

public class ProxyConfig {

private static final String JAVA_NET_USE_SYSTEM_PROXIES = "java.net.useSystemProxies";
private static String host;
private static int port;
private static String protUrlStr = null;

public static void init(URL url) {
// http://10.0.1.136
protUrlStr = url.getProtocol() + "://" + url.getHost();
System.setProperty(JAVA_NET_USE_SYSTEM_PROXIES, "true");
Proxy proxy = getProxy();
if(proxy != null) {
InetSocketAddress addr = (InetSocketAddress) proxy.address();
if(addr != null) {
host = addr.getHostName();
port = addr.getPort();
System.setProperty(JAVA_NET_USE_SYSTEM_PROXIES, "false");
System.setProperty("http.proxyHost", host);
System.setProperty("http.proxyPort", port + "");
}
}
System.setProperty(JAVA_NET_USE_SYSTEM_PROXIES, "false");
}

public static String getHost() {
return host;
}

public static int getPort() {
return port;
}

private static Proxy getProxy() {
List<Proxy> l = null;
try {
ProxySelector def = ProxySelector.getDefault();
System.out.println("Getting List<Proxy> for URL = " + protUrlStr);
l = def.select(new URI(protUrlStr));
ProxySelector.setDefault(null);
} catch (Exception e) {
e.printStackTrace();
}
if(l != null) {
for(Iterator<Proxy> iter = l.iterator(); iter.hasNext();) {
java.net.Proxy proxy = iter.next();
return proxy;
}
}
return null;
}
}

最佳答案

感谢您提出非常详细的问题。 HTTP 和 SOCKS 代理支持尚未集成到 Netty 中。 Netty 3.6.2 支持 SOCKS,但它仅作为编解码器提供,因此您需要稍作调整以使其透明地工作。

当前缺乏适当的代理支持与 Java NIO 的工作方式有关,尽管 Netty 绝对能够将代理支持集成到其核心。如果有人愿意贡献,Netty 项目团队会很乐意审核并接受贡献。

如果您打算仅使用 Netty 发送 HTTP 请求,您可能需要提供一个基于 Netty 的专用 HTTP 客户端库,该库支持代理,例如 AsyncHttpClient .

关于小程序中的 Netty 和代理服务器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14383017/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com