Java和squid代理主机名解析

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

我正在使用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.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地址。您可以在以下列表中看到这一点: