为什么proxy后面的wget(windows)需要PORXY_HTTP/HTTPS环境变量,而Chrome不需要
Why wget (windows) behind proxy needs PORXY_HTTP/HTTPS environment variables, and Chrome doesn't
我尝试使用此处显示的脚本使用 wget(在 windows 上)从 google 驱动器下载文件:
[2020 年 7 月 - Windows 用户批处理文件解决方案]wget/curl large file from google drive.
它运行良好,但是当计算机在代理后面时,只有在我设置环境变量 PROXY_HTTP 和 PROXY_HTTP 时它才会工作(可能它也可以通过标志在命令,但我没试过)
我可以使用 Chrome 从 google 驱动器下载文件而无需这些环境变量且无需为代理设置 chrome 这一事实让我了解到有一种方法可以在代理后下载,无需为代理设置应用程序。
如何使 wget 工作而无需为代理手动设置(通过标志或环境变量)?
很可能您的 Chrome 也以某种方式设置了代理。无论如何,为 wget 定义代理的最简单方法是在本地主文件夹中创建一个 .wgetrc 文件并设置以下内容:
> vi ~/.wgetrc
use_proxy=on
http_proxy=http://[proxy_ip]:[proxy_port]
https_proxy=https://[proxy_ip]:[proxy_port]
ftp_proxy=http://[proxy_ip]:[proxy_port]
这就是您需要做的全部。
我在他指出的@Wilmar 评论后找到了解决方案 here(谢谢!)。
应用程序可以通过发送“http://wpad/wpad.dat”自动发现它是否在代理后面。
如果代理服务器落后,它会回复一条消息,其中包含带有代理详细信息的 PAC 文件。然后应用程序可以提取任何所需设置的代理详细信息。这就是 Chrome 可以自动为代理设置自身的方式。
在 windows 中使用 wget 查找代理详细信息的示例
在Windows中,您可以使用wget如下获取代理服务器的详细信息。必须从文本消息中提取详细信息,您可以使用 jrepl 等工具来完成此类任务。这里我只展示细节所在。
call wget "http://wpad/wpad.dat" -o "ProcessLog.txt" -O "PAC.txt"
这里有三种可能的情况:
- 如果后面没有代理,则PAC.txt为空,ProcessLog.txt包含与此类似的短信。
ProcessLog.txt
--2020-09-01 08:38:29-- http://wpad/wpad.dat
Resolving wpad (wpad)... failed: The requested name is valid, but no data of the requested type was found. .
wget: unable to resolve host address 'wpad'
- 万一后面有代理服务器,windows设置代理环境变量:
http_proxy=http://proxy.mc.company.com:777
https_proxy=https://proxy.mc.company.com:777
然后 wget 已经知道代理地址,所以 PAC.txt 是空的,ProcessLog.txt 包含类似于以下包含代理详细信息的文本消息。在此示例中,代理详细信息为 [proxy_ip]:[proxy_port] = proxy.mc.company.com:777
ProcessLog.txt
--2020-09-01 08:29:59-- http://wpad/wpad.dat
Resolving proxy.mc.company.com (proxy.mc.company.com)... 10.100.200.150
Connecting to proxy.mc.company.com (proxy.mc.company.com)|10.100.200.150|:777... connected.
Proxy request sent, awaiting response... 302 Found
Location: http://www.wpad.com/wpad.dat [following]
--2020-09-01 08:30:00-- http://www.wpad.com/wpad.dat
Connecting to proxy.mc.company.com (proxy.mc.company.com)10.100.200.150|:777... connected.
Proxy request sent, awaiting response... 403 Forbidden
2020-09-01 08:30:00 ERROR 403: Forbidden.
- 如果后面有代理服务器,但没有设置代理的 windows 环境变量,则 wget 从代理服务器获取代理详细信息。在这种情况下 PAC.txt 包含类似于以下包含代理详细信息的长文本消息。在此示例中,代理详细信息为 [proxy_ip]:[proxy_port] = proxy.mc.company.com:777
PAC.txt
function FindProxyForURL(url,host) {
var me=myIpAddress();
var resolved_ip = dnsResolve(host);
if (host == "127.0.0.1") {return "DIRECT";}
if (host == "localhost") {return "DIRECT";}
if (isPlainHostName(host)) {return "DIRECT";}
if (url.substring(0,37) == "http://lyncdiscoverinternal.company.com") {return "DIRECT";}
if (!resolved_ip) { if (url.substring(0,6) == "https:") {return "PROXY proxy-mc.company.com:778";} else {return "PROXY proxy-mc.company.com:777";}}
if (host == "moran-for-localhost-only.com") {return "DIRECT";}
...
...
在 windows 中简化使用 wget 查找代理详细信息
当使用 wget 查找代理详细信息时,我们可以使用标志 --no-proxy
命令它忽略代理环境变量(如果已设置)。这让我们只剩下上述两种可能的情况 (1) 和 (3)。所以我们只需要 ProxyInfo 文件。如果它是空的(场景 1)则没有代理在后面,如果它包含文本(场景 3),它在代理后面,您可以从中提取代理详细信息。
call wget --no-proxy "http://wpad/wpad.dat" -O "PAC.txt"
我尝试使用此处显示的脚本使用 wget(在 windows 上)从 google 驱动器下载文件: [2020 年 7 月 - Windows 用户批处理文件解决方案]wget/curl large file from google drive.
它运行良好,但是当计算机在代理后面时,只有在我设置环境变量 PROXY_HTTP 和 PROXY_HTTP 时它才会工作(可能它也可以通过标志在命令,但我没试过)
我可以使用 Chrome 从 google 驱动器下载文件而无需这些环境变量且无需为代理设置 chrome 这一事实让我了解到有一种方法可以在代理后下载,无需为代理设置应用程序。
如何使 wget 工作而无需为代理手动设置(通过标志或环境变量)?
很可能您的 Chrome 也以某种方式设置了代理。无论如何,为 wget 定义代理的最简单方法是在本地主文件夹中创建一个 .wgetrc 文件并设置以下内容:
> vi ~/.wgetrc
use_proxy=on
http_proxy=http://[proxy_ip]:[proxy_port]
https_proxy=https://[proxy_ip]:[proxy_port]
ftp_proxy=http://[proxy_ip]:[proxy_port]
这就是您需要做的全部。
我在他指出的@Wilmar 评论后找到了解决方案 here(谢谢!)。
应用程序可以通过发送“http://wpad/wpad.dat”自动发现它是否在代理后面。 如果代理服务器落后,它会回复一条消息,其中包含带有代理详细信息的 PAC 文件。然后应用程序可以提取任何所需设置的代理详细信息。这就是 Chrome 可以自动为代理设置自身的方式。
在 windows 中使用 wget 查找代理详细信息的示例
在Windows中,您可以使用wget如下获取代理服务器的详细信息。必须从文本消息中提取详细信息,您可以使用 jrepl 等工具来完成此类任务。这里我只展示细节所在。
call wget "http://wpad/wpad.dat" -o "ProcessLog.txt" -O "PAC.txt"
这里有三种可能的情况:
- 如果后面没有代理,则PAC.txt为空,ProcessLog.txt包含与此类似的短信。
ProcessLog.txt
--2020-09-01 08:38:29-- http://wpad/wpad.dat
Resolving wpad (wpad)... failed: The requested name is valid, but no data of the requested type was found. .
wget: unable to resolve host address 'wpad'
- 万一后面有代理服务器,windows设置代理环境变量:
http_proxy=http://proxy.mc.company.com:777
https_proxy=https://proxy.mc.company.com:777
然后 wget 已经知道代理地址,所以 PAC.txt 是空的,ProcessLog.txt 包含类似于以下包含代理详细信息的文本消息。在此示例中,代理详细信息为 [proxy_ip]:[proxy_port] = proxy.mc.company.com:777
ProcessLog.txt
--2020-09-01 08:29:59-- http://wpad/wpad.dat
Resolving proxy.mc.company.com (proxy.mc.company.com)... 10.100.200.150
Connecting to proxy.mc.company.com (proxy.mc.company.com)|10.100.200.150|:777... connected.
Proxy request sent, awaiting response... 302 Found
Location: http://www.wpad.com/wpad.dat [following]
--2020-09-01 08:30:00-- http://www.wpad.com/wpad.dat
Connecting to proxy.mc.company.com (proxy.mc.company.com)10.100.200.150|:777... connected.
Proxy request sent, awaiting response... 403 Forbidden
2020-09-01 08:30:00 ERROR 403: Forbidden.
- 如果后面有代理服务器,但没有设置代理的 windows 环境变量,则 wget 从代理服务器获取代理详细信息。在这种情况下 PAC.txt 包含类似于以下包含代理详细信息的长文本消息。在此示例中,代理详细信息为 [proxy_ip]:[proxy_port] = proxy.mc.company.com:777
PAC.txt
function FindProxyForURL(url,host) {
var me=myIpAddress();
var resolved_ip = dnsResolve(host);
if (host == "127.0.0.1") {return "DIRECT";}
if (host == "localhost") {return "DIRECT";}
if (isPlainHostName(host)) {return "DIRECT";}
if (url.substring(0,37) == "http://lyncdiscoverinternal.company.com") {return "DIRECT";}
if (!resolved_ip) { if (url.substring(0,6) == "https:") {return "PROXY proxy-mc.company.com:778";} else {return "PROXY proxy-mc.company.com:777";}}
if (host == "moran-for-localhost-only.com") {return "DIRECT";}
...
...
在 windows 中简化使用 wget 查找代理详细信息
当使用 wget 查找代理详细信息时,我们可以使用标志 --no-proxy
命令它忽略代理环境变量(如果已设置)。这让我们只剩下上述两种可能的情况 (1) 和 (3)。所以我们只需要 ProxyInfo 文件。如果它是空的(场景 1)则没有代理在后面,如果它包含文本(场景 3),它在代理后面,您可以从中提取代理详细信息。
call wget --no-proxy "http://wpad/wpad.dat" -O "PAC.txt"