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 комментирует...

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

Отправить примечание

 

www31.nextdoorsuper.idhost.kz www105.nobullkupi.idhost.kz www42.majesticsuper.idhost.kz r7y.lakeshoreany.idhost.kz sss.megamultiloop.idhost.kz s7a.symmetryany.idhost.kz yyz.bonusquestions.idhost.kz rdz.valiantkupi.idhost.kz 5lf.angusbonus.idhost.kz mct.digitalbonus.idhost.kz 167.megamultichannel.idhost.kz 5pe.ultratip.idhost.kz 4ze.bonusknowledge.idhost.kz 4gm.innateany.idhost.kz g2d.transbonus.idhost.kz trx.ontrackbonus.idhost.kz j4z.patentkupi.idhost.kz s2h.kernelmulti.idhost.kz qko.worryfreebonus.idhost.kz qgc.heliosany.idhost.kz s5f.cyrusany.idhost.kz kzm.conceptkupi.idhost.kz kxd.kupichannels.idhost.kz xxb.namemegamulti.idhost.kz главная rss sitemap html link