我正在尝试构建代理服务器,最近我正在开发https。正如此post中所述。我试图隧道连接请求。我的代码如下:
private boolean handleConnect(HttpServletRequest req,HttpServletResponse response){
String uri=req.getRequestURI();
String port="";
String host="";
int c=uri.indexOf(":");
if (c >= 0){
port = uri.substring(c + 1);
host = uri.substring(0,c);
if (host.indexOf('/') > 0)
host = host.substring(host.indexOf('/') + 1);
}
// Make Asyncronous connection
try{
InetSocketAddress inetAddress = new InetSocketAddress(host,Integer.parseInt(port));
{
InputStream in=req.getInputStream();
OutputStream out=response.getOutputStream();
if(true){
Socket sock=new Socket(host,Integer.parseInt(port));
IO.copy(in, sock.getOutputStream());
IO.copy(sock.getInputStream(), out);
if(!sock.getKeepAlive()){
sock.close();
}
}
}
}
catch(Exception ex){
ex.printStackTrace();
return false;
}
return true;
}
java.net.UnknownHostException: google.com.np
的代码结果https://google.com.np
和https://Facebook.com
的超时结果。这是为什么 ??
请建议隧道连接HTTP请求的最佳方法。
答案 0 :(得分:1)
你的UnknownHostException是由于一个不存在的主机或一个配置错误的DNS,以及你的网络连接问题的连接超时,这两者都不是主题,但你不能用这种方式写一个正确的代理。您需要为每个连接启动两个线程,一个用于复制每个方向的字节。