【问题标题】:Python Requests module - does it use system level (on windows) proxy settings?Python Requests 模块 - 它是否使用系统级别(在 Windows 上)代理设置?
【发布时间】:2021-01-28 05:03:31
【问题描述】:

背景

我有一个应用程序使用请求模块来处理连接到远程网络服务器。这非常有效,但我想使用企业代理服务器在组织内部署它。组织中的机器在操作系统级别配置了代理(即 windows 设置系统代理)。

我希望我的应用自动使用已配置的操作系统代理设置,而不是必须向他们询问信息(尤其是当他们使用基本身份验证时,所以我必须安全地存储用户名/密码,而不仅仅是代理主机/端口)。

问题

如果您自己不直接指定代理,Requests 会自动使用操作系统的代理设置吗?

在阅读了 Request 的文档或底层 urllib3 之后,我找不到明确的答案。

在我的开发机器上,我没有要测试的代理,因此我想在去之前知道答案,并在我的应用程序中编写手动代理处理代码,这实际上可能没有必要......

更多信息

因此,此时,我在文档中找不到请求或 urllib3 的明确答案,但确实有一个 SO 帖子说明请求将使用操作系统级别配置,通过调用 urllib.requests.getproxies() 本身。

...那么任何人都可以确认/否认这种情况吗?

谢谢!

【问题讨论】:

    标签: python-3.x python-requests urllib3


    【解决方案1】:

    你的问题有两个方面

    1。请求是否使用 urllib.request.getproxies ?

    requests=2.25.1版本开始,从Session.request source开始,如果没有提供,代理信息从self.merge_environment_settings获取

    if self.trust_env:
        # Set environment's proxies.
        no_proxy = proxies.get('no_proxy') if proxies is not None else None
        env_proxies = get_environ_proxies(url, no_proxy=no_proxy)
    

    get_environ_proxies 使用getproxieseither imported from urllib (py2) or from urllib.request (py3)

    所以答案是YES

    2。 urllib.request.getproxies 是否能够在 windows 上获取操作系统代理配置?

    据我所知,“操作系统配置的”在 Windows 上并不可靠。至少在我的公司机器上,urllib.request.getproxies 不会选择代理。从其文档或ProxyHandler 中的文档中声明

    如果没有设置代理环境变量,则在 Windows 环境中,从注册表的 Internet 设置部分获取代理设置,在 Mac OS X 环境中,从 OS X 系统配置框架检索代理信息。

    source code 我看到它在HKEY_CURRENT_USER > 'Software\Microsoft\Windows\CurrentVersion\Internet Settings' 下读取,ProxyEnableProxyServer 的值。在我的机器上,配置了代理,这是空的 - 设置似乎存储在 Internet Explorer / .Net 堆栈中的某个地方。

    请注意,在企业环境中,代理通常是从 .pac 设置的:

    因此,至少从今天开始,在 Windows 上得出结论,我们不能可靠地信任 urllib.request.getproxies。这就是为什么我开发envswitch 让我和我的同事可以非常轻松地一键来回切换所有与代理相关的环境变量(家庭-火车-飞机/办公室)。至少urllib(和requests)在设置它们时可以可靠地使用它们。 (注意:即使工具的文档页面上有“构建失败”标记,该工具也能正常工作:))

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-11-07
      • 1970-01-01
      • 1970-01-01
      • 2011-03-17
      • 1970-01-01
      相关资源
      最近更新 更多