За последние 24 часа нас посетили 22825 программистов и 1261 робот. Сейчас ищут 785 программистов ...

Curl + proxy

Тема в разделе "PHP для новичков", создана пользователем joost, 11 ноя 2008.

  1. joost

    joost Guest

    Делаю получение контента вордстата яндекса так
    PHP:
    1.  
    2. $ch = curl_init ();
    3. curl_setopt ($ch , CURLOPT_URL , $url);
    4. curl_setopt ($ch , CURLOPT_USERAGENT , "Mozilla/5.0 (Windows; U; Windows NT 5.1; ru-RU; rv:1.7.12) Gecko/20050919 Firefox/1.0.7");
    5. curl_setopt ($ch , CURLOPT_RETURNTRANSFER , 1 );
    6. $content = curl_exec($ch);
    7.  
    после 20 запросов с sleep(2) - мой ip наверное в игноре.
    интересует как сделать получение контента вордстата яндекса через прокси? список прокси есть
     
  2. joost

    joost Guest

    дописать curl_setopt($curl, CURLOPT_PROXY, "прокси:порт"); будет правильно и достаточно?
     
  3. Петр

    Петр Активный пользователь

    С нами с:
    20 мар 2006
    Сообщения:
    1.253
    Симпатии:
    0
    Адрес:
    Центр Вселенной
    Ну попробуй
     
  4. joost

    joost Guest

    при curl_setopt($curl, CURLOPT_PROXY, "прокси:порт"); вроде как ошибок не выдает, но и в $content пусто.
    без curl_setopt($curl, CURLOPT_PROXY, "прокси:порт"); работает.
    "прокси:порт" - в нем причина?
     
  5. joost

    joost Guest

    PHP:
    1.  
    2. $url="http://meta.ua";
    3. $proxy_host='201.6.3.241';
    4. $proxy_port='80';
    5. $ch = curl_init ();
    6. curl_setopt ($ch , CURLOPT_URL , $url);
    7. curl_setopt ($ch , CURLOPT_USERAGENT , "Mozilla/5.0 (Windows; U; Windows NT 5.1; ru-RU; rv:1.7.12) Gecko/20050919 Firefox/1.0.7");
    8.  
    9. $handle = fsockopen($proxy_host, $proxy_port, $errno, $errstr, $timeout);        
    10.         if (!$handle)
    11.             {
    12.             echo "Not open Proxy - errno=$errno,errstr=$errstr<br>";
    13.             return 0;
    14.         }
    15.         else
    16.         {
    17.          echo "Proxy Open<br>";
    18.         }
    19.  
    20. curl_setopt($ch, CURLOPT_PROXY, "$proxy_host:$proxy_port");
    21. print curl_getinfo($ch,CURLINFO_HTTP_CODE)."<br>";
    22. print $content = curl_exec($ch);
    23.  
    получаю титл "302 Found"
    если без curl_setopt($ch, CURLOPT_PROXY, "$proxy_host:$proxy_port"); все работает.
    пробовал несколько разных прокси - таже история. может прокси подгулявшие?
    кому не трудно попробуйте код у себя (по возможности с 100% робочим прокси, если у кого есть)
     
  6. joost

    joost Guest

    как сделать
    PHP:
    1. $handle = fsockopen($proxy_host, $proxy_port, $errno, $errstr, $timeout);        
    2.          if (!$handle)
    3.              {
    4.              echo "Not open Proxy - errno=$errno,errstr=$errstr<br>";
    5.              return 0;
    6.          }
    7.          else
    8.          {
    9.          echo "Proxy Open<br>";
    10.          }
    через curl?
     
  7. Adamant

    Adamant Активный пользователь

    С нами с:
    8 апр 2007
    Сообщения:
    234
    Симпатии:
    0
    Адрес:
    Казахстан г.Тараз
    Приведенный вами код рабочий, попробуйте прокси с этой странички - http://www.samair.ru/proxy/proxy-01.htm
    А определить прокси "годный" или нет, я думаю можно либо анализируя заголовки ответа сервера - CURLOPT_HEADER (можно CURLOPT_FAILONERROR)

    или взять 1-2 обычно всегда доступных ресурса (например google.com) и сделать через выбранную вами проксю предварительную проверку на ответ сервера (200 или нет)

    PHP:
    1.  
    2. // предварительно проверяем выбранную проксю
    3. $proxy ='111.111.111:80';
    4. $test_url = 'http://google.com';
    5.  
    6. $c = curl_init ();
    7. curl_setopt ($c , CURLOPT_URL , $test_url);
    8. curl_setopt ($c , CURLOPT_USERAGENT , "Mozilla/5.0 (Windows; U; Windows NT 5.1; ru-RU; rv:1.7.12) Gecko/20050919 Firefox/1.0.7");
    9. curl_setopt($c, CURLOPT_PROXY, $proxy);
    10. curl_setopt($c, CURLOPT_HEADER, 1);
    11. curl_setopt($c, CURLOPT_NOBODY, 1);
    12. curl_setopt($c, CURLOPT_RETURNTRANSFER, 1);
    13. $curl_error = curl_error($c);
    14. $header_response = curl_exec($c);
    15.  
    16.  
    17. if (strpos($header_response, '200 OK') !== false) {
    18.     // делаем запрос на  [url=http://meta.ua]http://meta.ua[/url]
    19. } else {
    20.     if (!empty($header_response)) {
    21.         echo 'Ответ сервера - неудача';
    22.     } else {
    23.         echo $curl_error;    
    24.     }
    25. }
    26.  
    Я бы сделал как-то так. Если что, думаю профи меня поправят.