如何在C#中创建一个简单的代理?

我已经在几周前下载了Privoxy,为了好玩,我很想知道它的简单版本是如何完成的。

我知道我需要配置浏览器(客户端)向代理发送请求。 代理将请求发送给Web(假设它是一个http代理)。 代理将收到答案...但代理如何将请求发送回浏览器(客户端)?

我在网上搜索了C#和http代理,但没有找到让我了解它在场景后面如何正确工作的内容。 (我相信我不想要反向代理,但我不确定)。

你们有没有一些解释或一些信息让我继续这个小项目?

更新

这是我的理解(见下图)。

步骤1我将客户端(浏览器)配置为在Proxy监听的端口上发送到127.0.0.1的所有请求。 这样,请求将不会直接发送到Internet,而是由代理处理。

步骤2代理看到一个新的连接,读取HTTP头并查看他必须执行的请求。 他执行请求。

步骤3代理从请求接收答案。 现在他必须将答案从网络发送给客户,但是如何?

替代文字

有用的链接

Mentalis Proxy:我发现这个项目是一个代理(但我想要的更多)。 我可能会检查来源,但我真的很想了解更多的概念。

ASP Proxy:我也可以在这里获得一些信息。

请求反射器:这是一个简单的例子。

这是一个带有简单Http代理的Git Hub仓库。


您可以使用HttpListener类来构建一个侦听传入请求并使用HttpWebRequest类来中继请求。


我不会使用HttpListener或类似的东西,这样你会遇到很多问题。

最重要的是支持这将是一个巨大的痛苦:

  • 代理保持活动
  • SSL不起作用(以正确的方式,你会得到弹出窗口)
  • .NET库严格遵循RFC,导致一些请求失败(即使IE,FF和世界上任何其他浏览器都可以工作)。
  • 你需要做的是:

  • 听一个TCP端口
  • 解析浏览器请求
  • 解压主机在TCP级别连接到该主机
  • 一切来回,除非你想添加自定义标题等。
  • 我用.NET编写了2个不同的HTTP代理,它们有不同的要求,我可以告诉你这是最好的方法。

    Mentalis这样做,但他们的代码是“代表意大利面条”,比GoTo更糟:)


    代理可以按照以下方式工作。

    步骤1,配置客户端使用proxyHost:proxyPort。

    Proxy是一个在proxyHost上监听的TCP服务器:proxyPort。 浏览器打开与代理的连接并发送Http请求。 代理解析此请求并尝试检测“主机”标头。 这个头部会告诉代理在哪里打开连接。

    第2步:代理服务器打开连接到“主机”标题中指定的地址。 然后它将HTTP请求发送到该远程服务器。 阅读回复。

    步骤3:在从远程HTTP服务器读取响应之后,代理通过先前打开的与浏览器的TCP连接发送响应。

    示意图如下所示:

    Browser                            Proxy                     HTTP server
      Open TCP connection  
      Send HTTP request  ----------->                       
                                     Read HTTP header
                                     detect Host header
                                     Send request to HTTP ----------->
                                     Server
                                                          <-----------
                                     Read response and send
                       <-----------  it back to the browser
    Render content
    
    链接地址: http://www.djcxy.com/p/62487.html

    上一篇: How to create a simple proxy in C#?

    下一篇: How to discover de proxy used in a pac