【问题标题】:How do i forward the HTTP request back to the browser? Proxy Java如何将 HTTP 请求转发回浏览器?代理 Java
【发布时间】:2012-10-15 17:24:23
【问题描述】:
final int portNumber = 8128;
String str;

int start = 0;
int endSg = 0;
int endCom = 0;

String ReqWeb=null;

System.out.println("Creating server socket on port " + portNumber);
ServerSocket serverSocket = new ServerSocket(portNumber);

BufferedReader inFromServer;
OutputStream out;
PrintWriter outw;   
Socket forwardSocket = null;

while (true)
{
    Socket socket = serverSocket.accept();              //get client request
    String from = socket.getInetAddress().toString();
    System.out.println("Accepted connection from " + from);
    OutputStream os = socket.getOutputStream();
    PrintWriter pw = new PrintWriter(os, true);
    pw.println("What's your request?");

    BufferedReader br = new BufferedReader(new InputStreamReader(socket.getInputStream()));

    //System.out.println(str);
    while((str = br.readLine())!=null){
        System.out.println(str);     
        if(str!=null){
            start = str.indexOf("Host: ") + 6;
            endSg = str.indexOf(".sg", start) + 3;
            endCom = str.indexOf(".com", start) + 4;
            if(((endSg>3)||(endCom>4))&&(start>4)){
                if(endSg>3)
                    ReqWeb = str.substring(start, endSg);
                else if(endCom>3)
                    ReqWeb = str.substring(start, endCom);              
            }

        }
    }
    System.out.println(ReqWeb);

    if(ReqWeb!=null){
        //ReqWeb = str.substring(start);
        System.out.println(ReqWeb);
        forwardSocket = new Socket(ReqWeb, 80);
    }

    pw.println(str);
    pw.println(ReqWeb);     
    //socket.close();

    if(forwardSocket!=null){
        inFromServer = new BufferedReader(new InputStreamReader(forwardSocket.getInputStream()));
        out = forwardSocket.getOutputStream();
        outw = new PrintWriter(out, false);
        outw.print(str);
    }

}

输出:

Creating server socket on port 8128
Accepted connection from /127.0.0.1
null
Accepted connection from /127.0.0.1
GET (http://)stackoverflow.com/questions/12900825/how-do-i-forward-the-http-request-back-to-the-browser-proxy-java HTTP/1.0
Host: stackoverflow.com
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.8; rv:15.0) Gecko/20100101 Firefox/15.0.1
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: en-us,en;q=0.5
Accept-Encoding: gzip, deflate
Connection: close
Proxy-Connection: close
Pragma: no-cache

现在这是我得到的输出,我应该将其存储在字节数组中以将其发送回服务器以请求页面吗?我仍然无法转发此请求):

【问题讨论】:

    标签: java http proxy request


    【解决方案1】:

    您需要打开另一个到预期目标的套接字(根据 Firefox 的请求)并在那里发送请求。保持连接到 firefox 的套接字打开,因为当您从预期目标获得响应时,您将从目标读取它并将其写回 firefox。根据您在 Firefox 中的流水线设置,连接可能会关闭或发出更多请求。

    【讨论】:

    • 我已经更新了我的代码,现在输出是你有什么要求? GET google.com HTTP/1.0 www.google.com ,我尝试用主机打开一个套接字。现在我如何实际转发请求?我尝试直接发送 str 但它似乎不起作用
    • 你还有很长的路要走。一方面,您没有从 Firefox 请求中读取所有内容。您正在使用 br.readLine() 这只是第一行,至少可能还有大约 4 或 5 行标题。其中一行是“主机”标头,这是您需要连接的人,您需要向其发送整个请求(包括您未收到的标头)。
    • 好的,我已经尝试检索标题内容,这些就是我得到的。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-12-30
    • 2015-02-23
    • 1970-01-01
    相关资源
    最近更新 更多