zkrvndm
@zkrvndm
Архитектор решений

Почему не работает функция shExpMatch внутри pacScript?

Пишу расширение для Google Chrome которое на лету меняла бы прокси в браузере в зависимости от адреса.

Добавил в background.js такой конфиг:
config = {
	mode: "pac_script",
	pacScript: {
	data: `
			function FindProxyForURL(url, host) {
				if (shExpMatch(url, "*1")) {
					return 'PROXY 193.56.186.165:65233';
				}
			}
		`
	}
};

chrome.proxy.settings.set(
	{value: config, scope: 'regular'},
	function() {}
);


То есть в теории, если адрес сайта содержит единицу в конце, то должен был применяться указанный прокси, но увы, этого не происходит. И я даже не знаю, как мне заглянуть внутрь пак-скрипта, чтобы понять, что там происходит под копотом(

Для тестов я заходил сюда:
https://yandex.ru/internet/?proxy=1

И да, ошибок в коде не вижу, так как если например в условиях вместо регулярки просто выставить true то смена прокси вполне себе работает и Яндекс показывает другой IP, что говорит о том, что принципиально сам способ смены прокси верный. Вопрос лишь в том, почему не отрабатывает регулярка...
  • Вопрос задан
  • 95 просмотров
Решения вопроса 1
zkrvndm
@zkrvndm Автор вопроса
Архитектор решений
Я нашел в чем проблема. Оказалось, что в переменную url внутри pac-скрипта полный адрес открытой страницы передается только если сайт открыт по протоколу http. В том случае, если сайт открывается по протоколу https браузер режет пути оставляя только домен:
spoiler
The URL being accessed. The path and query components of https:// URLs are stripped. In Chrome (versions 52 to 73), you can disable this by setting PacHttpsUrlStrippingEnabled to false in policy or by launching with the --unsafe-pac-url command-line flag (in Chrome 74, only the flag works, and from 75 onward, there is no way to disable path-stripping; as of Chrome 81, path-stripping does not apply to HTTP URLs, but there is interest in changing this behavior to match HTTPS); in Firefox, the preference is network.proxy.autoconfig_url.include_path.

К большому моему сожалению это и изменить то нельзя, так как флага PacHttpsUrlStrippingEnabled в настройках хрома я не нашел, а запуск через опцию --unsafe-pac-url не помогает. Даже и не знаю, что теперь делать(
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
@acwartz
Тут должна быть ваша реклама.
У вас проблема с пониманием рег. выражений а не с функцией.
То есть в теории, если адрес сайта содержит единицу в конце

Ваше рег. выражение не только не ищет единицу в конце строки но и вообще ошибочно.

Кроме того вы ищите в url, в не IP адресе, надо пропустить хост через dnsResolve и на выходе будет IP-адрес сервера на который собираются попасть.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы