2012-02-28 4 views
3

Я пишу веб-приложение, для которого требуется много прокси. У меня также есть список прокси, но я не знаю, какие из них работают и какой тип они (носки, http, https).Проверьте прокси-сервер с помощью PHP

Предположим, у меня 5000 прокси в формате ip: port. Каков самый быстрый способ проверить их все?

Я пробовал fsockopen, но это довольно медленно. Может быть, pinging их сначала сэкономит время?

+0

Вы должны опубликовать свой код, он может быть Объемами или какая-то проблема у вас есть в методе вы делаете проверки. – hakre

ответ

1

Вы можете использовать cURL для проверки прокси. Некоторая хорошая статья дана here Надеюсь, это поможет

1

Порт обычно дает вам хорошую подсказку про тип прокси.
80,8080,3128, как правило, HTTP
1080, как правило, SOCKS

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

Вы также можете попробовать отсортировать свой список в SOCKS и HTTP так хорошо, как можете, и ввести его в the Proxycollective. Это бесплатный проект, но вам нужен код приглашения или билет на 99cent, чтобы стать участником. Как только вы являетесь участником, вы можете загрузить свои списки прокси, и они будут протестированы. Все рабочие будут возвращены вам сортируемыми.
Итак, если вы не хотите что-то программировать самостоятельно, это может быть ваш лучший выбор, иногда можно найти коды приглашения на разных форумах.

Но имейте в виду, что я сказал, если у вас есть список из 5000 случайных прокси, я уверен, вы вряд ли найдете более 10 работающих там. Общественные прокси живут только коротко.

1

Этот proxy checker API может быть именно тем, что вы ищете. Вы можете легко проверить список прокси с этим.

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

3
<?php 
$proxies = file ("proxies.txt"); 
$mc = curl_multi_init(); 
for ($thread_no = 0; $thread_no<count ($proxies); $thread_no++) 
{ 
$c [$thread_no] = curl_init(); 
curl_setopt ($c [$thread_no], CURLOPT_URL, "http://google.com"); 
curl_setopt ($c [$thread_no], CURLOPT_HEADER, 0); 
curl_setopt ($c [$thread_no], CURLOPT_RETURNTRANSFER, 1); 
curl_setopt ($c [$thread_no], CURLOPT_CONNECTTIMEOUT, 5); 
curl_setopt ($c [$thread_no], CURLOPT_TIMEOUT, 10); 
curl_setopt ($c [$thread_no], CURLOPT_PROXY, trim ($proxies [$thread_no])); 
curl_setopt ($c [$thread_no], CURLOPT_PROXYTYPE, 0); 
curl_multi_add_handle ($mc, $c [$thread_no]); 
} 

do { 
while (($execrun = curl_multi_exec ($mc, $running)) == CURLM_CALL_MULTI_PERFORM); 
if ($execrun != CURLM_OK) break; 
while ($done = curl_multi_info_read ($mc)) 
{ 
$info = curl_getinfo ($done ['handle']); 
if ($info ['http_code'] == 301) { 
echo trim ($proxies [array_search ($done['handle'], $c)])."\r\n"; 
} 
curl_multi_remove_handle ($mc, $done ['handle']); 
} 
} while ($running); 
curl_multi_close ($mc); 
?> 
+0

Отредактируйте ответ как изменения, которые вы внесли. – Avijit

Смежные вопросы