Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > PHP: Сеть > cURL и Proxy


Автор: Aliance 5.10.2006, 14:10
Подключаюсь к серверу и хочу использовать прокси сервер, т.к. страница специально предназначена для парсинга, но не чаще раза в 5 минут. А мне нужно чаще. Посоветовали использовать прокси. Вот код, не работает:

Код

...
    $proxy_list = array(
        "200.47.10.10:8080",
        "130.104.72.200:3124",
        "200.163.47.193:8080"
    );

function whois($name, $bd_id) {

   global $server, $proxy_list, $link;

   $rnd = rand(0, 7);

   $ch = curl_init();

   curl_setopt($ch, CURLOPT_URL, "http://" . $server[$rnd] . "?login=" . urlencode($name) . "...");
   curl_setopt($ch, CURLOPT_PROXY, $proxy_list[$rnd]);
   curl_setopt($ch, CURLOPT_HEADER, 0);
   curl_setopt($ch, CURLOPT_RETURNTRANSFER, 0);
   curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
   curl_setopt($ch, CURLOPT_REFERER, "http://www.mail.ru/");
...


Тоесть сервер меня блокирует временно из-за того, что я слишком часто его парсю. Соотв. прокси не помогает/работает. Может я с кодом напутал?

Автор: MuToGeN 5.10.2006, 16:31
Попробуй установить следующие параметры:
CURLOPT_HTTPPROXYTUNNEL => true
CURLOPT_PROXYPORT => порт прокся
CURLOPT_PROXY => адрес прокси

Автор: Aliance 6.10.2006, 10:54
Понял, ошибка в 12 строчке.

Но спасибо за совет, сейчас буду пробовать!

Автор: Vaulter 6.10.2006, 11:43
Aliance, зачем тебе рандом? иди по очереди.

Автор: Aliance 6.10.2006, 16:14
У меня есть функция. Так вот, каждый раз когда она вызывается, я хочу использовать рандомные адреса проксей.

Добавлено @ 16:23 
Цитата

Notice: Use of undefined constant CURLOPT_PROXYPORT - assumed 'CURLOPT_PROXYPORT'


Код

<?php

error_reporting(E_ALL);

$link = mysql_connect(...);

    if (!$link) die();
    if(!mysql_select_db(...)) die();

    $proxy_list = array(
        array("200.47.10.10", "8080"),
        array("130.104.72.200", "3124"),
        array("200.163.47.193", "8080")
    );

function whois($name, $bd_id) {

    global $proxy_list, $link;

    $rnd = rand(0, 7);
    $rnd2 = rand(0, 2);

    $ch = curl_init();

    curl_setopt($ch, CURLOPT_URL, ...);
    curl_setopt($ch, CURLOPT_HTTPPROXYTUNNEL, true);
    curl_setopt($ch, CURLOPT_PROXY, "http://" . $proxy_list[$rnd2][0]);
    curl_setopt($ch, CURLOPT_PROXYPORT, $proxy_list[$rnd2][1]);
    curl_setopt($ch, CURLOPT_HEADER, 0);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 0);
    curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
    curl_setopt($ch, CURLOPT_REFERER, "http://www.mail.ru/");

    $info = curl_exec($ch);

    if (curl_errno($ch)) return false;
}

whois("Aliance", 1);

mysql_close($link);

?>

Автор: MuToGeN 12.10.2006, 17:22
Цитата(Aliance @  6.10.2006,  16:14 Найти цитируемый пост)
У меня есть функция

Код

function blabla() {
    static $i;
    $i++;
    $i %= count($proxy_list);
}
?
Кстати
Ты уверен, что все 8 проксей доступны по всем 3м портам?

Автор: Aliance 12.10.2006, 18:17
MuToGeN, не очень тебя понял. В коде выше у меня перечислено 3 прокси. Недавно нашел другие, теперь их у меня больше, изменил. Но все прокси - проверенные проксичекером. Но результата никакого. Код последний таков:
Код

<?php

error_reporting(E_ALL);

$link = mysql_connect(...);

    if (!$link) die();
    if(!mysql_select_db(...)) die();

    $server = array(...);

    $proxy_list = array(
        array("211.178.7.70", "8080"),
        array("125.138.133.168", "1930"),
        array("200.176.25.117", "6588"),
        array("201.17.174.240", "6588"),
        array("201.37.214.107", "6588"),
        array("59.30.41.203", "8080"),
        array("219.25.26.97", "8080")
    );

function whois($name) {

    global $server, $proxy_list, $link;

    $rnd = rand(0, 7);

    // proxy random...
    $rnd2 = rand(0, 6);

    $ch = curl_init();

    curl_setopt($ch, CURLOPT_URL, "http://" . $server[$rnd] . "inf.pl?login=" . urlencode($name) . "&short=1");
    curl_setopt($ch, CURLOPT_HTTPPROXYTUNNEL, true);
    curl_setopt($ch, CURLOPT_PROXY, "http://" . $proxy_list[$rnd2][0]);
    curl_setopt($ch, CURLOPT_PROXYPORT, $proxy_list[$rnd2][1]);
    curl_setopt($ch, CURLOPT_HEADER, 0);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 0);
    curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
    curl_setopt($ch, CURLOPT_REFERER, "http://www.mail.ru/");

    $info = curl_exec($ch);

    if (curl_errno($ch)) return false;
}

whois("Aliance spb");

mysql_close($link);

?>

Автор: MuToGeN 12.10.2006, 19:29
Цитата(MuToGeN @  12.10.2006,  17:22 Найти цитируемый пост)
все 8 проксей доступны по всем 3м портам

- имел ввиду, что у тебя есть ip1:por1, ip2:port2 и ip3:port3. Будут варианты, при которых скрипт будет ломиться на ip1:port2 или ip2:port1. Не заметил, что используется только $rnd2 (резонный вопрос - зачем тогда $rnd?)

Насчет переключения проксей по очереди - 
Код
<?php
function whois($name) {
    global $server, $proxy_list, $link;
    static $i = -1;
    $i++;
    $i %= count($proxy_list);

    $ch = curl_init();
    curl_setopt($ch, CURLOPT_URL, "http://" . $server[$rnd] . "inf.pl?login=" . urlencode($name) . "&short=1");
    curl_setopt($ch, CURLOPT_HTTPPROXYTUNNEL, true);
    curl_setopt($ch, CURLOPT_PROXY, "http://" . $proxy_list[$i][0]);
    curl_setopt($ch, CURLOPT_PROXYPORT, $proxy_list[$i][1]);
    curl_setopt($ch, CURLOPT_HEADER, 0);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 0);
    curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
    curl_setopt($ch, CURLOPT_REFERER, "http://www.mail.ru/");
    $info = curl_exec($ch);
    if (curl_errno($ch)) return false;
}
?>

Автор: Aliance 12.10.2006, 19:56
Не будет каненчо. Глянь внимательнее на скрипт, перменная $rnd нужна для 33 строчки, она не имеет отношения к прокси.

На счет переключения проксей по очереди, теперь понял. Только разве это что-то решает?
Не думаю, что проблема пройдет.

Автор: CyClon 5.11.2006, 20:24
Сорри, может не в тему, но...

Aliance, это в девиле новую антифлуд защиту поставили? А то у меня скрипт на девилсе загинается, а остальные города нормально пашут. Может тоже придется прокси юзать.

Добавлено @ 20:25 
Цитата
Но результата никакого.


В смысле? Пустая страница, ошибка, зависание???

Автор: Aliance 5.11.2006, 23:54
Не в курсе. А у тебя есть рабочий вариант? Не поделишься?

Автор: CyClon 6.11.2006, 10:26
У меня на fsockopen, он на девилсити загинается при часто обновлении.

Автор: KPOT 29.11.2006, 14:30
Если не жалко в студию бжалосто, очень актуально! Зацепило.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)