如何从脚本更改 Windows 中的代理设置?

问题描述 投票:0回答:1

我实现了一个使用 HTTPS 协议的抓取工具。为了避免验证码和 HTTP 429 错误,我使用代理。但这并不能保证没有验证码,所以有时我需要解锁代理手动输入验证码。我使用的是 Windows,因此我从 Internet 属性 > 连接 选项卡更改 LAN 设置,在浏览器中打开站点,然后输入验证码。这个过程有点耗时,因为我需要打开菜单、多次单击鼠标、复制/粘贴 IP:端口等。我希望开发一个脚本来自动完成部分工作:它应该设置代理 IP/端口,只剩下输入验证码的麻烦了。

正如我已经发现的,此设置位于注册表中:

HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Internet Settings\ProxyServer
,更改注册表值不是问题。然而,此更改不会立即生效,我仍然需要打开对话框来应用更改。

我的第一个问题是如何自动应用更改(我可以从 Python/C++/bash 等中执行这些操作)更广泛的问题是是否有更可靠的方法来解决问题:不显式触摸注册表,而是使用进行更改/应用设置等的工具?

windows proxy registry
1个回答
0
投票

有一个 Powershell 命令用于打开代理,然后还有另一个命令用于设置代理。

要打开代理,

Set-ItemProperty -path "HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Internet Settings"  ProxyEnable -value 1

要关闭代理,请将值设置为 0 并运行 Powershell 命令。

设置代理和端口,

Set-ItemProperty -path "HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Internet Settings" ProxyServer -value (proxy to be used):(port to be used)

来自超级用户文章,

https://superuser.com/questions/710921/windows-7-disable-proxy-via-cmd-and-put-in-effect/944980#944980

不幸的是,没有简单的方法。正如您所注意到的,您错过了神奇的“立即读取这些设置”命令:

InternetSetOption(NULL, INTERNET_OPTION_SETTINGS_CHANGED, NULL, NULL) InternetSetOption(NULL, INTERNET_OPTION_REFRESH, NULL, NULL)
当然,你不能只从 cmd 调用 C 函数。然而,有一种(相对)可行的方法可以使用 PowerShell 来完成此操作。

如果您想要最小的更改,您可以在更改注册表后调用从 Python 运行的脚本来运行这些命令。

© www.soinside.com 2019 - 2024. All rights reserved.