Python 请求模块 - 它是否使用系统级在 Windows 上代理设置? 1.请求使用 urllib.request.getproxies 吗?2. urllib.request.getproxies 是否能够在 Windows 上获取操作系统代理配置?

如何解决Python 请求模块 - 它是否使用系统级在 Windows 上代理设置? 1.请求使用 urllib.request.getproxies 吗?2. urllib.request.getproxies 是否能够在 Windows 上获取操作系统代理配置?

背景

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

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

问题

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

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

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

更多信息

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

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

谢谢!

解决方法

你的问题有两个方面

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 使用 getproxies,即 either 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 堆栈中的某处。

enter image description here

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

enter image description here

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

enter image description here

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


使用本地python环境可以成功执行 import pandas as pd import matplotlib.pyplot as plt # 设置字体 plt.rcParams['font.sans-serif'] = ['SimHei'] # 能正确显示负号 p
错误1:Request method ‘DELETE‘ not supported 错误还原:controller层有一个接口,访问该接口时报错:Request method ‘DELETE‘ not supported 错误原因:没有接收到前端传入的参数,修改为如下 参考 错误2:cannot r
错误1:启动docker镜像时报错:Error response from daemon: driver failed programming external connectivity on endpoint quirky_allen 解决方法:重启docker -> systemctl r
错误1:private field ‘xxx‘ is never assigned 按Altʾnter快捷键,选择第2项 参考:https://blog.csdn.net/shi_hong_fei_hei/article/details/88814070 错误2:启动时报错,不能找到主启动类 #
报错如下,通过源不能下载,最后警告pip需升级版本 Requirement already satisfied: pip in c:\users\ychen\appdata\local\programs\python\python310\lib\site-packages (22.0.4) Coll
错误1:maven打包报错 错误还原:使用maven打包项目时报错如下 [ERROR] Failed to execute goal org.apache.maven.plugins:maven-resources-plugin:3.2.0:resources (default-resources)
错误1:服务调用时报错 服务消费者模块assess通过openFeign调用服务提供者模块hires 如下为服务提供者模块hires的控制层接口 @RestController @RequestMapping("/hires") public class FeignControl
错误1:运行项目后报如下错误 解决方案 报错2:Failed to execute goal org.apache.maven.plugins:maven-compiler-plugin:3.8.1:compile (default-compile) on project sb 解决方案:在pom.
参考 错误原因 过滤器或拦截器在生效时,redisTemplate还没有注入 解决方案:在注入容器时就生效 @Component //项目运行时就注入Spring容器 public class RedisBean { @Resource private RedisTemplate<String
使用vite构建项目报错 C:\Users\ychen\work>npm init @vitejs/app @vitejs/create-app is deprecated, use npm init vite instead C:\Users\ychen\AppData\Local\npm-
参考1 参考2 解决方案 # 点击安装源 协议选择 http:// 路径填写 mirrors.aliyun.com/centos/8.3.2011/BaseOS/x86_64/os URL类型 软件库URL 其他路径 # 版本 7 mirrors.aliyun.com/centos/7/os/x86
报错1 [root@slave1 data_mocker]# kafka-console-consumer.sh --bootstrap-server slave1:9092 --topic topic_db [2023-12-19 18:31:12,770] WARN [Consumer clie
错误1 # 重写数据 hive (edu)> insert overwrite table dwd_trade_cart_add_inc > select data.id, > data.user_id, > data.course_id, > date_format(
错误1 hive (edu)> insert into huanhuan values(1,'haoge'); Query ID = root_20240110071417_fe1517ad-3607-41f4-bdcf-d00b98ac443e Total jobs = 1
报错1:执行到如下就不执行了,没有显示Successfully registered new MBean. [root@slave1 bin]# /usr/local/software/flume-1.9.0/bin/flume-ng agent -n a1 -c /usr/local/softwa
虚拟及没有启动任何服务器查看jps会显示jps,如果没有显示任何东西 [root@slave2 ~]# jps 9647 Jps 解决方案 # 进入/tmp查看 [root@slave1 dfs]# cd /tmp [root@slave1 tmp]# ll 总用量 48 drwxr-xr-x. 2
报错1 hive> show databases; OK Failed with exception java.io.IOException:java.lang.RuntimeException: Error in configuring object Time taken: 0.474 se
报错1 [root@localhost ~]# vim -bash: vim: 未找到命令 安装vim yum -y install vim* # 查看是否安装成功 [root@hadoop01 hadoop]# rpm -qa |grep vim vim-X11-7.4.629-8.el7_9.x
修改hadoop配置 vi /usr/local/software/hadoop-2.9.2/etc/hadoop/yarn-site.xml # 添加如下 <configuration> <property> <name>yarn.nodemanager.res