Я нашел решение после комментария @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:
- В случае отсутствия прокси-сервера, тогда 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"