Прикрутить прокси к PHP скрипту

Статус
В этой теме нельзя размещать новые ответы.

zek24

Мой дом здесь!
Команда форума
Модератор
Регистрация
14 Ноя 2009
Сообщения
811
Реакции
310
  • Автор темы
  • Модер.
  • #1
Приветствую,
пробую написать простенький парсер яндекс выдачи.
Т.к. запросов будет много и для личного опыта, решил прикрутить прокси.
Список прокси имеется.
Подскажите в какую сторону копать...

скрипт берет из тхт построчно домены и проверяет их ТИЦ
PHP:
$homepage = file_get_contents("http://yaca.yandex.ua/yca/cy/ch/$domen/");
потом при помощи preg_match получаю нужную цифру из контента загруженной страницы
Т.к. кол-во запросов может быть более 1000, то ставлю паузу (2-4с), но это явно не идет на пользу скорости.
Сам скрипт пишу для себя, для практики и радует, что он работает, но без прокси он явно не имеет будущего.
Вот и решил узнать как их можно использовать.
Как-то так.
 
:)
судя по комментариям к официальному мануалу, Для просмотра ссылки Войди или Зарегистрируйся можно сделать так:
PHP:
<?php
 
// Define a context for HTTP.
$aContext = array(
'http' => array(
'proxy' => 'tcp://127.0.0.1:8080', // This needs to be the server and the port of the NTLM Authentication Proxy Server.
'request_fulluri' => True,
),
);
$cxContext = stream_context_create($aContext);
 
// Now all file stream functions can use this context.
 
$sFile = file_get_contents("http://www.php.net", False, $cxContext);
 
echo $sFile;
?>

однако, некоторые предупреждают, что такой способ нельзя использовать для получения страниц по https-протоколу
 
Есть такая вот отличкая штука, как Для просмотра ссылки Войди или Зарегистрируйся, которая умеет ходить через https через прокси, рекомендовал бы использовать ее вместо сокетов, и для увичения скорость парсинга, распаралель скрипт на потоки, читать Для просмотра ссылки Войди или Зарегистрируйся. Либо же используй многопоточный курл.
 
Приветствую,
пробую написать простенький парсер яндекс выдачи.
Предлагаю рассмотреть вариант парсить яндекс через phpQuery вариант на Для просмотра ссылки Войди или Зарегистрируйся официальный блог Для просмотра ссылки Войди или Зарегистрируйся
 
А CURL уже отменили?
Буквально на недели писал скрипт где пропарсивал Для просмотра ссылки Войди или Зарегистрируйся, файл доменов примерно в мегабайт, скрипт прошел без проксей, так что надо ли использовать прокси. Стаяла задержка 3-5 секунд.

На курле все ок, если надо прокси просто добавляешь пару параметров.
 
  • Автор темы
  • Модер.
  • #6
Предлагаю рассмотреть вариант парсить яндекс через phpQuery вариант на Для просмотра ссылки Войди или Зарегистрируйся официальный блог Для просмотра ссылки Войди или Зарегистрируйся
Парсер пишу не ради парсера, а больше чтобы руку набить. Так сказать применить знания на практике.
А CURL уже отменили?
Буквально на недели писал скрипт где пропарсивал Для просмотра ссылки Войди или Зарегистрируйся, файл доменов примерно в мегабайт, скрипт прошел без проксей, так что надо ли использовать прокси. Стаяла задержка 3-5 секунд.

На курле все ок, если надо прокси просто добавляешь пару параметров.
К сожаление не знаком с курлом, а толковых мануалов так и не нашел. Был бы благодарен за информацию, где можно достать подробное описание, как работать с курл. Пока читаю ПХП мануал - но там скудное описание.
 
К сожаление не знаком с курлом, а толковых мануалов так и не нашел. Был бы благодарен за информацию, где можно достать подробное описание, как работать с курл.
Это ж как так искать то нужно, что бы про курл не найти? Относительно курла документации просто огромное кол-во. Например:

неплохая статейка по curl: Для просмотра ссылки Войди или Зарегистрируйся
описание функций курла: Для просмотра ссылки Войди или Зарегистрируйся
описание некоторых констант курла: Для просмотра ссылки Войди или Зарегистрируйся

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

PHP:
$proxys=array();
//читаем список проксей с файла
// формат "ip\tport\t"
$handle2 = fopen('proxy.txt', "r");
if ($handle2)
{
    while (!feof($handle2))
    {
        $buffer = fgets($handle2, 4096);
        $buffera = explode("\t", $buffer);
        $ssss = $buffera[0].":".$buffera[1];   
    }
    fclose($handle2);
}
// проверяем что у нас
//var_dump($proxys);die();
 
// для простоти и дебага
    function simple_get($ch, $url, $proxy, $headers=null)
    {
        //echo "<br>GET: $url";
        curl_setopt($ch,  CURLOPT_URL, $url);
        $result = curl_exec ($ch);
        //echo "<br/>Return:<textarea style='width:100%; height:300px'>$result</textarea>";
        return $result;
    }
//
// набор простих хидеров
//
$headers = array(
  "Accept:*/*",
  "Accept-Charset:ISO-8859-1,utf-8;q=0.7,*;q=0.3",
  "Accept-Encoding:gzip,deflate,sdch",
  "Accept-Language:en-US,en;q=0.8,ru;q=0.6"
);
//
//проходим по всех проксях
//
$ccc = count($proxys)-1;
//
$url = "http://polls.polldaddy.com/vote-js.php?p=<тут нужно Poll ID>&b=2&a=<тут нужен Anser ID>,&o=&va=0&cookie=0&url=".urlencode("<тут нужен сайт откуда голосовать, к примеру где вставлен Poll>")."&n=";
// ету строчку ви сможете найти когда делаете Vote
$url2 = "http://polldaddy.com/n/aa2404e3c5dd25d7deaa798e46d9cf66/XXXXXXXX?1336929939273";
 
 
$total_vote = 0;
$total_num = 0;
 
for($i=0; $i<$ccc;$i++)
{
    $proxy = $proxys[$i];
    echo "$proxy <br>";
//
// часть исползование curl и proxy
//
    $ch = curl_init();
    curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
    curl_setopt($ch, CURLOPT_TIMEOUT, 3);
    curl_setopt($ch, CURLOPT_HEADER, 1);
 
    curl_setopt($ch, CURLOPT_PROXY, $proxy);
    curl_setopt($ch, CURLOPT_USERAGENT, "Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.8.1.13) Gecko/20080311 Firefox/2.0.0.13");
    curl_setopt($ch, CURLOPT_REFERER, "< Рефер сайта тут >");
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
 
    //
    $dd1 = mktime();
    $dd = $dd1.rand(0,999);
    //
    $nonce = simple_get($ch, $url2.$dd, $proxy);
        //тут нужно поосмотреть что у вас возвращает
    $nnn1 = strpos($nonce, "PDV_nXXXXXXXX='");
    $nnn2 = strpos($nonce, "';PD_voteXXXXXXXX(");
    $nonce = substr($nonce, $nnn1+14, $nnn2-$nnn1-14);
    //
    //curl_setopt($ch,  CURLOPT_COOKIE, "PD_poll_ XXXXXXXX=".$dd1.";"); 
    //
    if($nnn2!== false && $nonce != "")
    {
        echo "<br> Found: $nonce";
        $result = simple_get($ch, $url.$nonce, $proxy);
        // проверяем что у нас все хорошо
        $nnn = strpos($result, "Thank you for voting");
        if($nnn !== false)
        {
            $total_vote++;
            echo ">>><BR><font color=green>Found</font>";
        }
    }
    $total_num++;
    curl_close ($ch);
}
 
echo ">>>".$total_vote."/".$total_num." is ".(int)(100*$total_vote/$total_num)."%";
 
Статус
В этой теме нельзя размещать новые ответы.
Назад
Сверху