【发布时间】:2010-12-24 08:31:08
【问题描述】:
我正在制作一个程序,它可以在 Windows 上从互联网上下载一个简单的文件,使用 Wininet 系列 API,因为我想利用其与 IE 兼容的代理行为。众所周知,当前的 IE 有几个代理设置:自动检测(WPAD)、自动配置(PAC)、手动单个 URL、每个协议的代理服务器、socks、直接……对于大多数用户来说,“直接下载“ 工作正常;但是对于某些用户(尤其是防火墙/NAT 后面的用户),他们在建立连接时总是需要特殊的代理设置。
编写代码来处理所有这些情况很痛苦,所以我希望带有InternetOpen (INTERNET_OPEN_TYPE_PRECONFIG) 的 WinINET 可以帮助我。它适用于大多数用户,但是我仍然发现一些用户抱怨连接失败。这些用户可能有非常特殊的网络环境(例如,代理需要用户名/密码验证),直接连接对他们不起作用。
有时虚拟用户配置错误,我希望 wininet 为我尝试“所有”可能的代理设置;不幸的是,INTERNET_OPEN_TYPE_PRECONFIG 只会尝试用户配置的那个,而不是“所有可能的代理设置”。
所以我的问题是,我如何为虚拟用户(即他们不了解如何配置他们的系统)制作一个具有最强解决所有 http 连接(尤其是代理配置)的能力的程序? 是否有任何建议的方法来建立 HTTP 连接而无需处理代理的东西? (即,一个“超级”连接求解器,它将尝试所有可能的代理设置),或者是否有任何方法告诉 WinINET 启用其所有代理设置来创建连接?
【问题讨论】:
-
弗朗西斯,我遇到过这个问题。简单的解决方案不存在;有太多变数,而贾斯汀描述的场景是唯一可靠的方法。更糟糕的是,这仅适用于 Internet Explorer——随着 Firefox 的市场份额不断增长,应该添加获取 Firefox 代理设置的方法以获得完整列表。
-
@J.J. - 好点子。我最初写答案时想到了firefox案例,并准备回来添加有关Firefox的步骤。你的cmets提醒我这样做!请参阅下面的新步骤 #4。 :-)
-
太糟糕了,没有简单的解决方案……有趣的是,也没有包含所有这些痛苦东西的库。我尝试过 libcurl 和 libproxy,但它们实际上是按照自己的方式工作,并不像 IE 那样工作。
标签: winapi proxy wininet winhttp