Java和squid代理主机名解析
我正在使用squid代理进行ftp连接。在squid代理上,我们有基于主机名的规则,问题是java在本地解析主机名,然后将原始IP传递给代理 因此,示例代码:Java和squid代理主机名解析,java,squid,Java,Squid,我正在使用squid代理进行ftp连接。在squid代理上,我们有基于主机名的规则,问题是java在本地解析主机名,然后将原始IP传递给代理 因此,示例代码: Proxy Proxy=newproxy(Proxy.Type.HTTP,newinetsocketaddress(“127.0.0.1”,9999)); 套接字=新套接字(代理); connect(新的InetSocketAddress(“google.com”,21)); 正在创建如下请求: CONNECT 172.217.23.1
Proxy Proxy=newproxy(Proxy.Type.HTTP,newinetsocketaddress(“127.0.0.1”,9999));
套接字=新套接字(代理);
connect(新的InetSocketAddress(“google.com”,21));
正在创建如下请求:
CONNECT 172.217.23.142:21 HTTP/1.1
User-Agent: Java/14.0.1
Host: 172.217.23.142:21
Accept: text/html, image/gif, image/jpeg, *; q=.2, */*; q=.2
Proxy-Connection: keep-alive
因此,google.com
在CONNECT请求中已经被翻译为172.217.23.142。在打开与代理服务器的通信时,是否有办法强制java.net.Proxy使用主机名
默认情况下,我们用于ftps连接的JSch库在ProxyHTTP
类中执行此操作,我基本上需要在java.net.Proxy
中使用未解析的套接字地址
Proxy proxy = new Proxy(Proxy.Type.HTTP, new InetSocketAddress("127.0.0.1", 9999));
Socket socket = new Socket(proxy);
socket.connect(InetSocketAddress.createUnresolved("google.com", 21));
如果IP地址已经解析,则连接方法将使用IP地址。您可以在以下列表中看到这一点:
在套接字中使用未解析的套接字地址。连接:
Proxy proxy = new Proxy(Proxy.Type.HTTP, new InetSocketAddress("127.0.0.1", 9999));
Socket socket = new Socket(proxy);
socket.connect(InetSocketAddress.createUnresolved("google.com", 21));
如果IP地址已经解析,则连接方法将使用IP地址。您可以在以下列表中看到这一点: