无法从 WinForms 应用程序设置 WinInet 代理

Posted

技术标签:

【中文标题】无法从 WinForms 应用程序设置 WinInet 代理【英文标题】:Unable to set WinInet proxy from WinForms application 【发布时间】:2012-08-17 18:30:47 【问题描述】:

我正在运行 Windows 7 和 IE9。我正在编写一个在另一个线程上运行代理服务器(使用 TcpListener)的 winforms 应用程序(.net 4.0 & c#)。

在我实例化主窗体之前,我使用 InternetSetOption 设置代理并启动代理服务器。

我的代理设置代码和这里的非常相似:Set Proxy UserName and Password using Wininet in C#

然后我在 IE 中浏览到一个站点,IE 没有连接到我的代理服务器。此外,IE 工具--> 互联网选项--> 连接--> 局域网设置--> 为您的局域网使用代理服务器复选框未被选中。但是当我运行提琴手时,这个复选框被选中。这意味着提琴手正在正确设置代理,但我没有。提琴手是怎么做到的?我已经浏览了无数博客,InternetSetOption 上的 MSDN 文章都是徒劳的。任何帮助表示赞赏。

我的代理服务器代码与这里的非常相似:Simple Http proxy using Sockets: Questions

我知道我的代理服务器可以正常工作,因为当我转到 IE 工具 --> 互联网选项 --> 连接 --> 局域网设置并将代理服务器明确设置为 127.0.0.1:9898 (我运行代理的地方服务器),IE 和所有其他浏览器都连接到我的服务器。

【问题讨论】:

退一步,与其尝试自己编写代理服务器(这需要数千行代码并且需要超过1个线程),为什么不直接使用FiddlerCore呢? (fiddler2.com/core) 感谢埃里克。我确实考虑过 fiddler 核心,但是查看帮助文件,我发现 fiddler 的功能比我需要的要多得多。我需要做的就是检查一个 httprequest 的某些条件,如果满足,我让它通过,如果没有,我中止。我会先用 fiddlercore 完成我的应用程序,然后再回到这个问题。但如果你能指出可靠的 wininet 代理设置代码,那就太好了。感谢 fiddlercore,它是一款很棒的软件。 为了检查“一个 HTTP 请求”,您必须能够确定请求的开始和结束位置,这意味着您必须全面了解 HTTP 协议,包括分块编码, MIME、keep-alive 连接等。如果你想检查 HTTPS 流量,你需要几十种其他技术。 【参考方案1】:

此代码下载中的 WinINET.cs 文件:http://code.msdn.microsoft.com/CSWebBrowserWithProxy-c8535715 具有设置 WinINET 代理的核心功能。它在一些小细节上略有错误,但在大多数情况下都能正常工作。

【讨论】:

是的,我也收到了该代码,但无法让我的应用程序运行。这很可能意味着我做错了什么,或者我的开发盒上的互联网设置有问题。我现在会使用 fiddlercore 并回复你。谢谢。

以上是关于无法从 WinForms 应用程序设置 WinInet 代理的主要内容,如果未能解决你的问题,请参考以下文章

如果我的 Winforms 应用程序的平台设置为 x86,SQLite 会无法运行吗?

Winforms - 程序无法从 app.config 中找到连接字符串

WinForms:无法最大化模糊窗口

在 Winforms 中保存/恢复多个设置文件

在 .NET Winforms 应用程序中保存设置 [重复]

从Winforms设置WPF窗口所有者