Управление прокси
Четыре метода PK для назначения, исключения, временной блокировки и выбора прокси: точные последствия и безопасные последовательности.
Объект PK предоставляет четыре метода управления прокси. setProxy назначает указанную запись, deleteProxy исключает текущую запись из списка, freezeProxy временно запрещает её повторный выбор, а nextProxy отдельно выбирает следующую доступную запись.
Что выбрать
Назначить точный адрес
Используйте PK.setProxy(proxy, type), если адрес и тип уже известны. Метод добавит запись в список проекта, сделает её текущей и применит к следующим сетевым запросам.
Исключить до конца запуска
Используйте PK.deleteProxy(), если текущую запись больше нельзя выбирать в этом запуске. Для перехода на другую запись после удаления всё равно нужен отдельный PK.nextProxy().
Исключить на время
Используйте PK.freezeProxy(seconds), если запись должна снова стать доступной после указанного числа секунд. Этот метод также не переключает соединение самостоятельно.
Выбрать следующую
Используйте PK.nextProxy(), чтобы выбрать следующую доступную запись и немедленно применить её к соединению. Это единственный метод из четырёх, который возвращает выбранную запись.
Когда изменение начинает действовать
Методы работают с прокси текущего выполнения проекта. Назначение или переключение меняет маршрут для следующего сетевого запроса; уже отправленный запрос продолжает выполняться с прежними параметрами. После успешной смены новое чтение PK.ip, PK.port, PK.proxyType и остальных свойств прокси показывает новую текущую запись.
Удаление и блокировка не переключают прокси
PK.deleteProxy() и PK.freezeProxy(...) изменяют загруженный список, но оставляют текущую прокси назначенной до явного вызова PK.nextProxy() или PK.setProxy(...). Если сразу отправить новый запрос, не выполнив переключение, проект всё ещё хранит прежнюю текущую запись.
Назначить указанную прокси
PK.setProxy(proxy, type)
Добавляет указанную запись в список проекта, делает её текущей и применяет к соединению для следующих запросов. Метод использует тот же механизм, что и функция USEPROXY в in-Line Kit.
proxy: string — адрес и, при необходимости, учётные данные; type: string — точный тип соединения.
Полезного возвращаемого значения нет. Ошибка адреса или типа останавливает вызов исключением.
Запись добавляется в список, становится текущей и применяется к следующему сетевому запросу.
Подробное поведение общего механизма приведено в .
Допустимые адреса и типы
Параметр proxy принимает одну из трёх форм:
Параметр type принимает ровно одно из четырёх значений без учёта регистра:
HTTP и HTTPS приводятся исполнителем к одному внутреннему виду прокси HTTP. Не передавайте пустой адрес, неизвестный тип или строку иной формы: метод завершится явной ошибкой, а сценарий не должен продолжать работу так, будто прокси назначена.
Указывайте тип явно
У функции in-Line Kit тип может быть взят из настроек проекта, если он отсутствует в строке. У метода JavaScript второй параметр обязателен по публичному договору, поэтому передавайте его при каждом вызове: так результат не зависит от внешней настройки списка.
Пример с учётными данными:
Не записывайте учётные данные в журнал
Строка proxy, PK.proxy, PK.proxyURI и PK.proxyPassword могут содержать пароль открытым текстом. Не включайте их в console.log, сообщения об ошибках, статистику и сторонние запросы.
Исключить текущую прокси
PK.deleteProxy()
Удаляет исходную запись текущей прокси из загруженного списка, чтобы список больше не выбирал её в текущем запуске. Назначенная текущая запись при этом не очищается и не заменяется автоматически.
Параметров нет.
Полезного возвращаемого значения нет.
Текущая запись исключается из загруженного списка; текущий маршрут остаётся назначенным до отдельного переключения.
Если текущей прокси нет, метод ничего не меняет и не сообщает об этом отдельным результатом. Отсутствие ошибки не доказывает, что запись существовала или была удалена. Точное соответствие функции in-Line Kit описано в .
Временно заблокировать текущую прокси
PK.freezeProxy(seconds)
Запрещает повторный выбор происхождения текущей прокси на указанное число секунд. Текущий адрес и соединение не меняются, поэтому для продолжения через другую запись нужен отдельный вызов PK.nextProxy().
seconds: number — положительное целое число секунд.
Полезного возвращаемого значения нет.
Исходная запись временно блокируется в списке; назначенная текущая запись остаётся прежней.
Исполнитель оставляет в аргументе только цифры: например, -180 фактически превращается в 180, а значение без цифр приводит к тихому пропуску действия. Не полагайтесь на это исправление. Проверьте число до вызова и передайте положительное целое значение:
Если текущей прокси нет, метод ничего не блокирует. Полезного результата у него нет, поэтому сам вызов нельзя использовать как подтверждение выполненной блокировки. Поведение исходной функции разобрано в .
Выбрать следующую прокси
PK.nextProxy()
Просит список выбрать следующую доступную запись, делает её текущей, очищает сведения о прежнем соединении и применяет новый маршрут.
Параметров нет.
string — текст выбранной записи. Пустая строка означает, что после попытки текущий указатель пуст.
Следующая доступная запись становится текущей и применяется к соединению.
Не разбирайте selectedProxy по двоеточиям ради адреса, порта или пароля: форма зависит от записи и наличия учётных данных. После успешного выбора читайте нужные части через PK.ip, PK.port, PK.proxyType, PK.proxyLogin и PK.proxyPassword. Полный договор исходной функции приведён в .
Что происходит с соединением
При назначении или выборе исполнитель сравнивает адрес, порт, тип и учётные данные с уже применённым маршрутом. Если хотя бы одна часть изменилась, прежнее постоянное соединение закрывается до записи новых параметров. Следующий запрос поэтому не продолжает старое соединение через другую прокси.
Одинаковая запись не требует лишнего разрыва
Если все параметры маршрута совпали, исполнитель сохраняет пригодное постоянное соединение. Сценарию не нужно закрывать его вручную: методы объекта PK сами применяют решение, принятое владельцем соединения.
Безопасные последовательности
Исключение и выбор — две разные операции. Сначала измените доступность текущей записи, затем явно выберите следующую и проверьте строковый результат до нового сетевого запроса.
Заблокировать на время и продолжить
Здесь проверяется именно результат nextProxy, потому что freezeProxy ничего полезного не возвращает. Новый сетевой запрос можно выполнять только после непустого результата переключения.
Удалить до конца запуска и продолжить
Эта последовательность подходит для записи, которую нельзя снова использовать в текущем запуске. Если запрет должен закончиться через некоторое время, применяйте freezeProxy, а не deleteProxy.
Проверить текущую запись
Свойства прокси являются живыми: каждое чтение получает текущее состояние проекта, а не снимок на момент начала сценария. Поэтому читайте их после setProxy или успешного nextProxy.
Назначение всех семи свойств и правила работы с паролем собраны в .