TcpListener Proxy HttpWeb

本文关键字:HttpWeb Proxy TcpListener | 更新日期: 2023-09-27 18:03:57

我目前正在进行一个项目,该项目需要通过我的应用程序使用TcpListener设置的本地代理来输送一些HTTP流量。这是一个非常基本的设置。

我可以得到标准的标题,一个来自Firefox的例子是:

GET http://example.com/ HTTP/1.1
Host: example.com
User-Agent: Mozilla/5.0 (Windows NT 6.3; WOW64; rv:39.0) Gecko/20100101 Firefox/39.0
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: keep-alive

现在,我想看到example.com的内容,即使它通过我的代理。我所看到的解决方案是采取这些头,然后只是通过HttpWebRequest传递它们。然而,我似乎不明白你怎么能传递一个完整的头。

如果有人以前处理过这样的情况,或者知道如何将整个头传递给HttpWebRequest,那将非常感激。

我是用VB写的。顺便说一下。NET,但是用。NET语言中的任何一种回复都完全可以。

编辑:我可能写得有点混乱。

我得到的是网站传递给代理的请求(标头)。然后我从TcpListener读取流以获得该头。现在,该流包含一个标题,如缩进的代码框所示。现在,为了写一个响应回包含内容的流,通常会显示没有管道完成,我想我必须采取我收集的头,使用HttpWebRequest来获取内容,然后写到流,向用户呈现预期的网页。

所以我想知道的是:我怎么能把这个头喂给HttpWebRequest,然后得到我可以写到NetworkStream的内容,然后在浏览器中正常显示。这是我假设所有代理的工作方式,但也许不是。

TcpListener Proxy HttpWeb

Http标头用冒号分隔,用crlf分隔。页眉和正文之间用空行分隔。

因此继续从TcpClient/Socket读取,直到收到空行。然后解析每个标题,查找Content-Length(看看是否也应该读取正文)。最后建立一个HttpWebRequest和发送的一切。

一旦你收到一个回复,你需要从HttpWebResponse中读取所有内容,构建一个有效的HTTP响应消息,最后发送所有内容。

你也可以看看我的Apache许可库,它包含一个HttpListener和一个http编码器/解码器。http://github.com/jgauffin/griffin.framework。