Почему wget (windows) за прокси-сервером нужны переменные среды PORXY_HTTP / HTTPS, а Chrome нет - PullRequest
0 голосов
/ 06 августа 2020

Я пытался загрузить файлы с диска Google с помощью wget (на windows), используя сценарий, показанный здесь: [ИЮЛЬ 2020 - Windows пакетное решение для файлов пользователей] большой файл wget / curl с диска Google .

Он работает хорошо, но когда компьютер находится за прокси-сервером, он будет работать ТОЛЬКО, если я установлю переменные среды PROXY_HTTP и PROXY_HTTP (возможно, это также можно установить флагом в команде, но я не не пробовать)

Тот факт, что я могу загружать файлы с диска Google, используя Chrome без этих переменных среды и без установки chrome для прокси, дает мне понимание, что есть способ загрузки прокси без установки приложения для прокси.

Как я могу заставить wget работать без необходимости устанавливать его вручную (с помощью флага или переменных среды) для прокси?

Ответы [ 2 ]

1 голос
/ 12 августа 2020

Скорее всего, ваш Chrome также каким-то образом настроен прокси. В любом случае, самый простой способ определить прокси для wget - создать файл .wgetr c в вашей локальной домашней папке и установить следующее:

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

Это должно быть все, что вам нужно сделать .

0 голосов
/ 01 сентября 2020

Я нашел решение после комментария @Wilmar, который он указал здесь (спасибо!).

Приложение может автоматически определить, находится ли оно за прокси-сервером, отправив "http://wpad/wpad.dat ". Если прокси-сервер находится позади, он ответит сообщением, содержащим файл PA C с данными прокси. Затем приложение может извлечь сведения о прокси для любых необходимых настроек. Вот как Chrome может автоматически установить себя для прокси.

Пример использования wget в windows для поиска деталей прокси

В Windows вы можете использовать wget, чтобы получить информацию о прокси-сервере. Детали должны быть извлечены из текстовых сообщений, и вы можете использовать такой инструмент, как jrepl, для этой задачи. Здесь я только показываю детали.

call wget "http://wpad/wpad.dat" -o "ProcessLog.txt" -O "PAC.txt"

Здесь есть три возможных сценария ios:

  1. В случае отсутствия прокси-сервера, тогда PA C .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 уже знает адрес прокси, поэтому PA C .txt пуст, а ProcessLog.txt содержит текстовое сообщение, подобное следующему, которое содержит детали прокси. В этом примере сведения о прокси-сервере: [proxy_ip]: [proxy_port] = proxy.m c .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 получает данные прокси с прокси-сервера. В этом случае PA C .txt содержит длинное текстовое сообщение, подобное следующему, которое содержит детали прокси. В этом примере сведения о прокси-сервере: [proxy_ip]: [proxy_port] = proxy.m c .company.com: 777

PA C .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";}
...
...

Упрощение использования wget в windows для поиска деталей прокси

При использовании wget для поиска деталей прокси мы можем дать ему команду игнорировать переменные окружения прокси (если установлены) с помощью флага --no-proxy. Это оставляет нам только два возможных сценария ios (1) и (3), описанных выше. Так что нам просто нужен файл ProxyInfo. Если он пуст (сценарий 1), значит, прокси-сервер отсутствует, если он содержит текст (сценарий 3), он находится за прокси-сервером, и вы можете извлечь из него данные прокси.

call wget --no-proxy "http://wpad/wpad.dat" -O "PAC.txt"
...