1

我正在尝试构建代理服务器,最近我正在研究 https。如本文所述我试图通过隧道连接请求。我的代码如下:

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.nphttps://google.com.np超时https://Facebook.com。这是为什么 ??请建议隧道连接 HTTP 请求的最佳方式。

4

1 回答 1

1

您的 UnknownHostException 是由于主机不存在或 DNS 配置错误,以及您的连接超时导致网络连接问题,这两者都不是这里的主题,但您不能真正以这种方式编写正确的代理。您需要为每个连接启动两个线程,一个用于在每个方向复制字节。

于 2013-05-25T00:59:55.813 回答