繁体   English   中英

Java代理如何处理CONNECT请求

[英]Java proxy how to handle CONNECT requests

我是网络编程的新手,我试图在Java中实现一个简单的http代理,该代理仅应转发客户端的请求并传回响应。

为了处理GET请求,我只需读取客户端套接字InputStream,为所需的主机创建一个新的套接字(我从套接字读取),然后将客户端完成的相同GET请求写入此新套接字的OutputStream。 为了检索响应,我将响应从主机套接字的InputStream写回到客户端套接字的OutputStream。

但是当我不得不处理CONNECT请求时遇到了一些麻烦,例如,当我尝试从浏览器访问www.google.com时,这导致从客户端套接字读取此信息:

CONNECT www.google.com:443 HTTP/1.1
Host: www.google.com
Proxy-Connection: keep-alive
User-Agent: Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/47.0.2526.106 Safari/537.36

据我了解,我应该在端口443上连接到主机www.google.com。因此,我创建了一个新套接字:

Socket socket = new Socket(www.google.fr, 443);

但是请求应该是什么? 我只是尝试:

GET / HTTP/1.1

但是使用Wireshark时,主机似乎可以通过发回FIN和RST TCP段来立即终止连接。

我应该如何正确处理这些请求并检索网页内容?

该请求应该是客户端在CONNECT之后接下来发送的内容。

您必须使用HTTP状态行来响应CONNECT请求,然后实际上您要做的就是开始双向复制字节。 您无需再关心请求和响应。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM