我正在使用Squid代理进行FTP连接。在Squid代理上,我们有基于主机名的规则,问题是Java正在本地执行主机名解析,然后将原始IP传递给代理。
因此,以下是示例代码:
Proxy proxy = new Proxy(Proxy.Type.HTTP, new InetSocketAddress("127.0.0.1", 9999));
Socket socket = new Socket(proxy);
socket.connect(new 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
所以,在CONNECT请求中,google.com
已经被翻译成了172.217.23.142。有没有一种方法可以强制java.net.Proxy
在与代理服务器建立通信时使用主机名?
我们使用的ftps连接的JSch库默认使用ProxyHTTP
类进行此操作,我基本上需要与java.net.Proxy
相同的功能。