【发布时间】:2014-03-04 11:04:27
【问题描述】:
我正在写ProxyServer,首先我使用ServerSocket 来获取与我连接的Socket。然后我从连接的Socket 得到InputStream 并阅读了它。我已将浏览器的请求输出到控制台:
GET http://mail.ru/ HTTP/1.1
Host: mail.ru
Proxy-Connection: keep-alive
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8
User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko)
Chrome/31.0.1650.63 Safari/537.36
Accept-Encoding: gzip,deflate,sdch
Accept-Language: ru-RU,ru;q=0.8,en-US;q=0.6,en;q=0.4
Cookie: p=7nkAAOS6hAAA; mrcu=7D86524D326C5CB36F898F4A4CD9;
_ga=GA1.2.1174941236.1388398432; c=PCwPUwAAAPKbAAAiAgAAcQAAz5QIAgAA;
我必须创建新的Socket 才能将此请求写入互联网,但 Socket 需要端口号和主机名(字符串)才能连接。
如果我们认为端口号始终是80,那么我必须从该请求的哪一部分获取主机名?这是GET http://mail.ru/ HTTP/1.1 还是Host: mail.ru?
另外,我可以只发送到互联网GET http://mail.ru/ HTTP/1.1 放弃其他部分吗?
最后一个问题是,我是否必须重写这个 GET 方法本身?
【问题讨论】:
-
如果是HTTP代理,则获取HOST头。您将所有数据传递给传出流并将它们复制回传入流。顺便说一句,您必须注意分块才能与浏览器具有广泛的兼容性。
-
好的,我将采用 Host 标头,我应该重写 GET mail.ru HTTP/1.1 吗?
-
如何重写?只需将输入复制到目标输出即可获得基本功能。