Как надежно воспроизвести время ожидания curl_multi при тестировании публичных прокси

Я немного изменил BlazeMonger для использования для объекта jQuery ..

var $list = $('li'),
    $listRows = [];


for (var i = 0, len = $list.length, chunk = 4, n = 0; i < len; i += chunk, n++) {
   $listRows[n] = $list.slice(i, i + chunk);
}
8
задан Accountant م 3 April 2019 в 22:33
поделиться

2 ответа

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

0
ответ дан JL2210 3 April 2019 в 22:33
поделиться

Мне кажется, что у вас нет проблем с самим curl, но вы делаете слишком много соединений одновременно с прокси-серверами, если в соединениях отказано. Вы можете быть в черном списке навсегда или на какой-то период.

Проверьте это, запустив свой curl с текущего IP и сделайте stat: сколько соединений было установлено, сколько отказано, сколько истекло. Сделайте это несколько раз и наберите в среднем. Затем измените сервер на другой, который имеет другой IP-адрес, и проверьте, какая у вас там статистика. При первом запуске у вас должна быть намного лучшая статистика, которая, вероятно, если вы повторите тест на новом IP, станет только хуже. Хорошей идеей может быть не использовать весь пул прокси-серверов для подключения к статистике, а выбрать из них срез, проверить фактический IP-адрес и повторить эту проверку нового IP-адреса, поэтому, если причина в том, что вы злоупотребляете сервисом, вы не попадете в черный список все прокси, но все еще будут иметь следующую группу «нетронутых» прокси, чтобы проверить их на новом IP, если это действительно так. Помните, что даже если IP-адреса прокси находятся в разных местах, они могут принадлежать одному и тому же поставщику услуг. Вероятно, у него есть один список злоупотреблений для всех их прокси-серверов, поэтому, если вас плохо видят количество запросов, которые вы делаете в одной стране, вас могут заблокировать и в другой стране, даже до того, как вы подключитесь к прокси-серверу другой страны. [ 1126]

Если вы все еще хотите проверить, не скручивается ли это, вы можете настроить тестовую среду с несколькими подачами. Эту среду тестирования вы можете передать сопровождающему curl, чтобы он мог воспроизвести ошибку. Вы можете использовать docker и создавать 10, 20 или 100 прокси-серверов и подключаться к ним, чтобы увидеть, есть ли у curl проблема или нет.

вам понадобится докер , его можно установить на Win / Mac / Linux
один из прокси-образов для создания прокси
create сетевое учебное пособие для контейнеров (мост должен быть в порядке)
подключать контейнеры к сети - сеть
хорошо установить для каждого прокси-контейнера свои - ip
делают возможным для каждого прокси-контейнера читать конфигурацию и записывать журнал ошибок (так что вы можете узнать, почему они отключились, если это произойдет) с помощью mountig log / config files / direcotires с помощью - том
и все прокси-контейнеры должны быть запущены

вы можете подключиться к прокси, который работает внутри контейнера двумя способами. если вы хотите, чтобы curl находился за пределами этих контейнеров, вам нужно открыть с помощью -p порты этих прокси от контейнера до внешнего мира (curl в вашем случае).

или

вы можете использовать другое изображение контейнера с linux + curl. Например, Alpine linux + curl и подключите его к той же сети, что и с прокси. Если вы делаете это, вам не нужно публиковать (выставлять) порты прокси и не нужно думать о том, какой номер порта прокси я должен предоставить для этого конкретного прокси.

на каждом шаге вы можете выполнить команду

docker ps -a

, чтобы увидеть все контейнеры и их состояние.

чтобы остановить и удалить все контейнеры (не изображения, из которых они исходят, а запущенные контейнеры) на случай, если у вас возникли ошибки с контейнером, который вышел.

docker stop $(docker ps -aq) && docker rm $(docker ps -aq)

или для остановки и удаления из списка определенного контейнера

docker stop <container-id>
docker rm <container-id>

, чтобы увидеть все контейнеры, которые подключены к мостовой сети (по умолчанию)

docker network inspect bridge

Если вы подтвердите, что действительно существует проблема с подключением к прокси, которые находятся на вашем локальном компьютере, тогда это то, что сопровождающий curl может воспроизвести.

просто поместите все команды, как указано выше, чтобы создать все прокси-серверы, подключить их к сети и т. Д. В файле, например сценарий replicate.sh, начиная с

#!/bin/sh

and your comands here

, сохранить этот файл и выполнить команду

[115 ]

, чтобы сделать его исполняемым.

Вы можете запустить его, чтобы перепроверить, все ли работает должным образом

./replicate.sh

и отправить сопровождающего curl для репликации среды, в которой у вас возникла проблема.

Если вы не хотите запускать прокси для запуска множества команд, таких как doker run, вы можете использовать вместо этого docker compose , который позволяет вам определять всю среду тестирования в одном файле. [1143 ]

Если вы запускаете много контейнеров, вы можете ограничить ресурсы, например память , которую использует каждый из них, может помочь вам в случае такого количества прокси

0
ответ дан Jimmix 3 April 2019 в 22:33
поделиться
Другие вопросы по тегам:

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