当前位置:  开发笔记 > 前端 > 正文

如何找到浏览器的代理设置?

如何解决《如何找到浏览器的代理设置?》经验,为你挑选了1个好方法。

我正在为Windows编写一个命令行工具,它使用libcurl从Internet下载文件.

显然,当用户在代理服务器后面时,下载不起作用,因为需要配置代理.我希望尽可能简化我的工具,而不必为用户配置代理负担.我的工具甚至没有配置文件,因此用户否则必须在每个命令上传递代理设置,或设置环境变量或某些 - 太麻烦了.

所以我想,每个人的浏览器通常都已经正确设置,代理配置和一切.即使是最基本的用户也是如此,否则"他们的互联网将无法正常工作".

所以我认为我可以通过查看IE的代理设置来了解是否使用代理.

我该怎么做?进一步来说:

在Windows中是否有一组"代理设置",所有浏览器(可能是IE)使用,或者我是否必须为IE,Firefox,Opera等编写不同的例程?

我知道如果手动配置,我可以直接从相应的注册表位置读取值,但这是否也适用于"自动检测代理服务器?" 我甚至不得不打扰这个选项,或者(几乎)从未使用过?

在人们开始建议替代方案之前:我正在使用C,所以我只限于Win32 API,我真的很想继续使用C和libcurl.



1> JSBձոգչ..:

您正在寻找的函数是WinHttpGetIEProxyConfigForCurrentUser(),该文档在http://msdn.microsoft.com/en-us/library/aa384096(VS.85).aspx中有记录.Firefox和Opera使用此功能默认获取其代理设置,但您可以按浏览器覆盖它们.但是,不要这样做.正确的做法(这是其他人所做的)是获取IE设置并假设它们是正确的,因为它们几乎总是如此.

以下是相关逻辑的示例,您应该根据自己的需要进行调整:

if( WinHttpGetIEProxyConfigForCurrentUser( &ieProxyConfig ) )
{
    if( ieProxyConfig.fAutoDetect )
    {
        fAutoProxy = TRUE;
    }

    if( ieProxyConfig.lpszAutoConfigUrl != NULL )
    {
        fAutoProxy = TRUE;
        autoProxyOptions.lpszAutoConfigUrl = ieProxyConfig.lpszAutoConfigUrl;
    }
}
else
{
    // use autoproxy
    fAutoProxy = TRUE;
}

if( fAutoProxy )
{
    if ( autoProxyOptions.lpszAutoConfigUrl != NULL )
    {
        autoProxyOptions.dwFlags = WINHTTP_AUTOPROXY_CONFIG_URL;
    }
    else
    {
        autoProxyOptions.dwFlags = WINHTTP_AUTOPROXY_AUTO_DETECT;
        autoProxyOptions.dwAutoDetectFlags = WINHTTP_AUTO_DETECT_TYPE_DHCP | WINHTTP_AUTO_DETECT_TYPE_DNS_A;
    }

    // basic flags you almost always want
    autoProxyOptions.fAutoLogonIfChallenged = TRUE;

    // here we reset fAutoProxy in case an auto-proxy isn't actually
    // configured for this url
    fAutoProxy = WinHttpGetProxyForUrl( hiOpen, pwszUrl, &autoProxyOptions, &autoProxyInfo );
}

if ( fAutoProxy )
{
    // set proxy options for libcurl based on autoProxyInfo
}
else
{
    if( ieProxyConfig.lpszProxy != NULL )
    {
        // IE has an explicit proxy. set proxy options for libcurl here
        // based on ieProxyConfig
        //
        // note that sometimes IE gives just a single or double colon
        // for proxy or bypass list, which means "no proxy"
    }
    else
    {
        // there is no auto proxy and no manually configured proxy
    }
}


这是一个非常好的答案,但很可能还有缓存的代理凭证(用户名和密码),它们需要转发到代理服务器,我不认为有这种方法可以实现这一点吗?
推荐阅读
云聪京初瑞子_617
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有