我正在用 Java 编写一些代理程序。以下是它的工作原理:
- 浏览器将连接到程序。
- 浏览器的任何请求都将首先打印到标准输出,然后转发到服务器。
- 然后服务器返回一个响应,该响应也打印到标准输出,然后转发回浏览器。
我的问题是,第 1 步有效,第 2 步有效,但第 3 步失败。该程序可以获得响应,并将其正确打印到标准输出,但浏览器似乎无法获得它。我已经修改了程序以隔离问题。
它在这里所做的就是将响应直接打印到浏览器:
ServerSocket client = null;
try {
client = new ServerSocket(snoopPort);
} catch (IOException e) {
System.out.println("ERROR: Could not listen on port: " + snoopPort);
System.exit(-1);
}
Socket clientSocket = null;
try {
clientSocket = client.accept();
} catch (IOException e) {
System.out.println("ERROR: Accept failed on port: " + snoopPort);
System.exit(-1);
}
PrintWriter snoopOut = new PrintWriter(clientSocket.getOutputStream(), true);
snoopOut.print("HTTP/1.1 200 OK\r\n");
snoopOut.print("Date: Thu, 05 Feb 2009 06:37:28 GMT\r\n");
snoopOut.print("Server: Apache\r\n");
snoopOut.print("Set-Cookie: Apache=99.245.58.244.1233815848703045; path=/\r\n");
snoopOut.print("Accept-Ranges: bytes\r\n");
snoopOut.print("Transfer-Encoding: chunked\r\n");
snoopOut.print("Content-Type: text/html\r\n");
snoopOut.print("\r\n");
snoopOut.print("<html><head><title>test</head><body>hello world!</body></html>\r\n");
snoopOut.close();
clientSocket.close();
client.close();