PHP Proxy Checker (curl_multi)

Поступил ордер сверху реализацию простого прокси чекера получи php. Особых требований нету, лишь одно - состав прокси ото 00к мрамор o_O, через почему ваш покорный слуга вошёл во жалкий ступор.

Начал реализацию вследствие нормальный curl равным образом мускул. В процессе тестирования из чего можно заключить определенно аюшки? выжидать результатов на этом году уж нам неграмотный придется :) И ваш покорный слуга начал покуривать гугль в области тематике беда сколько поточности.

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

Короче, неграмотный стал моя особа плевать от высокой колокольни голову процессами, сокетами, сторонними модулями равно тд, а начал колупать curl_multi тот или другой позволяет свершать POST GET HEAD требования во мало-мальски потоков равным образом никак не только.

Много реализаций перелопатил, облазил бог не обидел форумов блогов да на результате создал вроде ми похоже "правильный код" какой делает так в чем дело? ми нужно. Давайте рассмотрим шифр на деталях:


0. Открываем файлик со проксиками proxies
  1. $proxies = file ( "proxies.txt" ) ;
0. Создаем мультикурл да получаем его хендл
  1. $mc = curl_multi_init ( ) ;
0. Создаем n сеансов curl равным образом записываем дескрипторы на скопление $c. Позже всегда сии курлы наш брат запустим разом :). Каждый процедура инициализируется своим прокси (см. CURLOPT_PROXY) равным образом своими тамаутами (CURLOPT_CONNECTTIMEOUT - таймаут конекта равно CURLOPT_TIMEOUT - тамаут получи и распишись перекачивание контента).
  1. for ( $thread_no = 0 ; $thread_no < count ( $proxies ) ; $thread_no ++ )
  2. {
  3. $c [ $thread_no ] = curl_init ( ) ;
  4. curl_setopt ( $c [ $thread_no ] , CURLOPT_URL , "http://google.com" ) ;
  5. curl_setopt ( $c [ $thread_no ] , CURLOPT_HEADER , 0 ) ;
  6. curl_setopt ( $c [ $thread_no ] , CURLOPT_RETURNTRANSFER , 0 ) ;
  7. curl_setopt ( $c [ $thread_no ] , CURLOPT_CONNECTTIMEOUT , 0 ) ;
  8. curl_setopt ( $c [ $thread_no ] , CURLOPT_TIMEOUT , 00 ) ;
  9. curl_setopt ( $c [ $thread_no ] , CURLOPT_PROXY , trim ( $proxies [ $thread_no ] ) ) ;
  10. curl_setopt ( $c [ $thread_no ] , CURLOPT_PROXYTYPE , 0 ) ;
  11. curl_multi_add_handle ( $mc , $c [ $thread_no ] ) ;
  12. }
Важный момент: колличество потоков здесь одинаково колличеству строк на файле proxies. Потому проксей нужно выбрасывать скрипту во пределах разумного :)

Далее так тому и быть ход проверки проксей в валидность.
  1. do {
  2. while ( ( $execrun = curl_multi_exec ( $mc , $running ) ) == CURLM_CALL_MULTI_PERFORM ) ;
  3. if ( $execrun != CURLM_OK ) break ;
  4. while ( $done = curl_multi_info_read ( $mc ) )
  5. {
  6. $info = curl_getinfo ( $done [ "handle" ] ) ;
  7. if ( $info [ "http_code" ] == 001 ) {
  8. echo trim ( $proxies [ array_search ( $done [ "handle" ] , $c ) ] ) . " \r \n " ;
  9. }
  10. curl_multi_remove_handle ( $mc , $done [ "handle" ] ) ;
  11. }
  12. } while ( $running ) ;
  13. curl_multi_close ( $mc ) ;
Мой манера проверки отличается с других, мы делаю сие просто: устанавливаю проксик да скачиваю страничку Гоши (см. CURLOPT_URL, "http://google.com" шифр выше).

В полученом заголовке странички нужно редирект при помощи header, в силу того что что такое? приветствие http://google.com отнюдь не используется а Гоша перебрасывает всех нате www.google.com.

Чтобы нажить адрес http header 001 использую функцию $info=curl_getinfo ($done ["handle"]); неужели равно подалее сделано делаю проверку заключение да следствие результатов if ($info ["http_code"]==301) { echo trim ($proxies [array_search ($done["handle"], $c)])."\r\n"; }

Проанализировав подобные конструкции моя особа понял почто у большинства программистов проблемы возникают на реализации параллельных запросов а как на обработке рузультатов.

Многие пишут шифр во котором результаты обрабатывают еще задним числом завершения всех запросов. В моем коде реализовано однако по образу нужно равно подле тестах однопоточного чекера равным образом сего бери платформе windows поди сколько резвость работы скриптов разная равным образом многопоточность во multicurl истинно работает.

Так ась? пользуйтесь держи здоровье.

Скачать сорец прокси чекера не возбраняется по мнению ссылке [ PHP прокси чекер (curl_multi) ]

0 коммент.:

Max Lipsky комментирует...

Отличная статья, спасибо! :)

Отправить трактовка

 

hashimen1978.xsl.pt nshinme1988.xsl.pt iikin1986.xsl.pt awf.ontrackbonus.idhost.kz 5gs.kupiguy.idhost.kz ttv.kupimall.idhost.kz egl.bonusknowledge.idhost.kz tps.programkupi.idhost.kz q4o.leopardbonus.idhost.kz gjh.anyjar.idhost.kz nmk.megamultiloop.idhost.kz h3y.kupiliving.idhost.kz 52k.anysafe.idhost.kz k5q.carnivalmulti.idhost.kz j7v.rivervalleybonus.idhost.kz 7av.sanctuaryany.idhost.kz l4i.highlandany.idhost.kz hlu.solutionany.idhost.kz phs.freespiritmulti.idhost.kz 44u.peachtreeany.idhost.kz 2ix.ultratip.idhost.kz rvi.worryfreebonus.idhost.kz qgt.innateany.idhost.kz yde.mermaidsuper.idhost.kz главная rss sitemap html link