【问题标题】:Why wget (windows) behind proxy needs PORXY_HTTP/HTTPS environment variables, and Chrome doesn't为什么代理后面的 wget (windows) 需要 PORXY_HTTP/HTTPS 环境变量,而 Chrome 不需要
【发布时间】:2020-08-06 10:32:29
【问题描述】:

我尝试使用 wget(在 Windows 上)使用此处显示的脚本从谷歌驱动器下载文件: [2020年7月-Windows用户批处理文件解决方案]wget/curl large file from google drive.

很好用,但是当电脑在proxy后面时,只有我设置环境变量PROXY_HTTP和PROXY_HTTP才能工作(可能也可以通过命令中的flag设置,但我没试过)

我可以在没有这些环境变量且不为代理设置 chrome 的情况下使用 Chrome 从谷歌驱动器下载文件这一事实让我明白,有一种方法可以在不为代理设置应用程序的情况下在代理后面下载。

我怎样才能使 wget 工作而无需为代理手动设置(通过标志或环境变量)?

【问题讨论】:

    标签: proxy wget


    【解决方案1】:

    您的 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]
    

    这应该就是你需要做的。

    【讨论】:

    • 谢谢,是不是 chrome 会自动“知道”代理 ip/代理端口?
    • 如果您使用的是 Windows,请转到设置 --> 代理。可能是您有自动检测设置(我实际上不确定它们是否在 Chrome 上工作,请参阅this,您有一个脚本或有一个手动配置的代理。
    【解决方案2】:

    我在@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"
    

    这里有三种可能的情况:

    1. 如果后面没有代理,则 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'
    
    1. 万一后面有代理服务器,并且设置了代理的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.
    
    1. 如果后面有代理服务器,但没有设置代理的 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"
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-02-21
      • 1970-01-01
      • 2019-12-18
      • 1970-01-01
      相关资源
      最近更新 更多