首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何在C#中创建一个简单的代理?

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

Stack Overflow用户
提问于 2008-10-22 17:31:21
回答 10查看 177.2K关注 0票数 147

我几周前下载了Privoxy,为了好玩,我好奇地想知道它的一个简单版本是如何做到的。

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

我已经在网络上搜索了C#和http proxy,但还没有找到能让我正确理解其幕后工作原理的东西。(我相信我不想要反向代理,但我不确定)。

你们中有谁有一些解释或信息可以让我继续这个小项目吗?

更新

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

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

Step2代理查看新连接,读取HTTP头并查看他必须执行的请求。他执行该请求。

Step3代理接收来自请求的应答。现在他必须将答案从网络发送到客户端,但是如何发送呢?

有用的链接

Mentalis Proxy:我发现这个项目是一个代理(但我想要更多)。我可能会检查源代码,但我真的想要一些基本的东西来更多地理解这个概念。

ASP Proxy:我也许也能在这里得到一些信息。

Request reflector:这是一个简单的例子。

这是一个Git Hub Repository with a Simple Http Proxy

EN

回答 10

Stack Overflow用户

回答已采纳

发布于 2008-10-22 17:34:07

您可以使用HttpListener类和HttpWebRequest类构建一个监听传入请求和中继请求的类。

票数 36
EN

Stack Overflow用户

发布于 2009-04-30 11:05:35

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

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

  • Proxy RFC将无法工作(正确地说,您将获得弹出窗口)
  • .NET库严格遵循RFC,这会导致一些请求失败(即使IE、FF和世界上任何其他浏览器都可以工作。)

您需要做的是:

  • 侦听TCP端口
  • 解析浏览器请求
  • 提取主机在TCP中与该主机连接所有内容,除非您想要添加自定义标头等。

我用.NET编写了两个不同的HTTP代理,有不同的需求,我可以告诉你,这是最好的方法。

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

票数 94
EN

Stack Overflow用户

发布于 2015-01-06 10:10:40

我最近使用TcpListenerTcpClient在c# .net中编写了一个轻量级代理。

https://github.com/titanium007/Titanium-Web-Proxy

它以正确的方式支持安全HTTP,客户端需要信任代理所使用的根证书。还支持WebSockets中继。除管道外,HTTP 1.1的所有功能都受支持。无论如何,大多数现代浏览器都不使用流水线。还支持windows身份验证(普通、摘要)。

您可以通过引用项目来挂接您的应用程序,然后查看和修改所有流量。(请求和响应)。

至于性能,我已经在我的机器上进行了测试,没有任何明显的延迟。

票数 34
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/226784

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档