В FireFox интернет-соединение сделано через автоматический файл конфигурации прокси "something.pac"
Как я знаю для определенного URL, какой прокси-сервер используется?
Спасибо.
.pac-файл - это просто ECMAscript - он же JavaScript. Прочтите статью в Википедии о формате файлов.
Если вы скопируете код PAC, вы сможете обработать его, чтобы увидеть, какой прокси используется на основе целевого URL. Если вам нравится, вы можете обернуть сценарий в веб-страницу (локально), чтобы создать инструмент для локальной оценки.
Изменить:
В качестве альтернативы методу, который я начал рекомендовать, вы можете проверить PACTester , доступный в Google Code. Это позволит вам быстро протестировать ряд вариантов.
Если у вас есть .Net и вы хотите поиграть с C #, вы можете прочитать эту статью на MSDN , в которой есть код, который вы можете использовать аналогично приведенному выше.
Чтобы расширить исходный метод, описанный выше, существует ряд функций, которые могут (и обычно предоставляются) хост-браузером. Основная функция, которая должна быть реализована в файле pac
, - это FindProxyForUrl ()
. Он принимает два параметра: URL-адрес и хост (хост, производный от имени URL-адреса). К «предоставленным» функциям относятся: isInNet ()
, localHostOrDomainIs ()
, isPlainHostName ()
, isResolvable ()
и т. Д.
Если вы работаете в среде Microsoft, вы можете проверить эту страницу в Technet , которая описывает формат .pac с некоторыми полезными примерами.
Согласно документации Microsoft для isInNet ()
:
Функция
isInNet (хост, шаблон, маска)
возвращаетИСТИНА
, если IP-адрес хоста соответствует указанному шаблону. Маска
указывает, какая часть IP-адреса должна соответствовать (255 = совпадение, 0 = игнорирование).
Если вы хотите получить техническую информацию, вот исходный код Mozilla для реализации служб, связанных с автоконфигурацией прокси. Он определяет код JS для isInNet ()
как:
200 function isInNet(ipaddr, pattern, maskstr) {
201 var test = /^(\d{1,3})\.(\d{1,3})\.(\d{1,3})\.(\d{1,3})$/(ipaddr);
202 if (test == null) {
203 ipaddr = dnsResolve(ipaddr);
204 if (ipaddr == null)
205 return false;
206 } else if (test[1] > 255 || test[2] > 255 ||
207 test[3] > 255 || test[4] > 255) {
208 return false; // not an IP address
209 }
210 var host = convert_addr(ipaddr);
211 var pat = convert_addr(pattern);
212 var mask = convert_addr(maskstr);
213 return ((host & mask) == (pat & mask));
214
215 }
Надеюсь, что это поможет!