我试图用java制作一个简单的代理,在这里我发送一个httpget请求并将响应转发给另一个端口上的客户机。我可以通过在控制台上打印get请求来获得响应。
但是,我无法在浏览器中查看已发送回的响应。
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.ServerSocket;
import java.net.Socket;
public class MyProxy {
static int localPort = 5000;
static String url = "www.google.com";
public static void main(String[] args) throws IOException {
ServerSocket serverSocket = new ServerSocket(localPort); // proxy acting as a server
Socket socket = serverSocket.accept(); // Accept connection from port 5000
Socket webSocket = new Socket(url, 80); // proxy acting as a client
// Send a GET request
PrintWriter printWriter = new PrintWriter(webSocket.getOutputStream());
printWriter.println("GET / HTTP/1.1\n\n");
printWriter.flush();
// Read response from server and send it to port 5000
BufferedReader br = new BufferedReader(new InputStreamReader(webSocket.getInputStream()));
PrintWriter out = new PrintWriter(socket.getOutputStream());
String outStr;
while ((outStr = br.readLine()) != null) {
out.println(outStr);
System.out.println(outStr);
}
out.flush();
printWriter.close();
out.close();
br.close();
socket.close();
serverSocket.close();
webSocket.close();
}
}
如何运行代码:
我先运行 main()
方法,然后键入 localhost:5000
在我的浏览器(safari)中。我希望得到呈现的html文件的身体,但浏览器只是卡住了,而加载。
运行代码时会发生什么:
我可以打印响应的标题和html正文,但无法在浏览器上显示html。
我的问题是:get请求响应是通过浏览器发送到端口的。既然响应存在,浏览器就不能读取响应吗?或者浏览器需要自己发送请求才能读取响应?
暂无答案!
目前还没有任何答案,快来回答吧!