CURL парсер + PROXY

12
TF-Studio
На сайте с 17.08.2010
Offline
334
#11

туда же куда и файл сам.

но каждый раз в функции дергать файл...

а если прокси 1к?

Всё ещё лучший способ заработка для белых сайтов: GoGetLinks (https://www.gogetlinks.net/?inv=fahbn8).
TitanIKS
На сайте с 25.01.2013
Offline
46
#12
Jacker:

И ещё: как лучше попорядку или рандомно прокси брать? Наверное зависит от количества прокси в списке?

Если брать по порядку, то надо считать количество строк для возврата к началу и запоминать ключ массива в сессию, что в принципе немного увеличит размер функции.

Вот пример:

public function check($url)

{

$proxy = file('proxy.dat');

$count = count($proxy);

if(empty($_SESSION['proxy'])) //Если первый раз запустили скрипт, начинаем с первой строки

$_SESSION['proxy'] = 0;

if($_SESSION['proxy'] >= $count) //Если достигли конца списка, переходим в начало

$_SESSION['proxy'] = 0;

$ch = curl_init("тут url откуда парсим");

curl_setopt($ch, CURLOPT_HEADER, 0);

curl_setopt($ch, CURLOPT_RETURNTRANSFER,1);

curl_setopt($ch, CURLOPT_PROXYTYPE, CURLPROXY_HTTP);

curl_setopt($ch, CURLOPT_PROXY, $proxy[$_SESSION['proxy']]);

$result = curl_exec($ch);

if(curl_errno($ch) != 0)

die("curl_errno(".curl_errno($ch)."), curl_error(".curl_error($ch).")");

curl_close($ch);

$_SESSION['proxy']++;

return substr($result, 9);

}

TF-Studio
На сайте с 17.08.2010
Offline
334
#13

TitanIKS, какой-то у вас извращенный способ...

Милованов Ю.С
На сайте с 24.01.2008
Offline
196
#14

Если КУРЛ за время работы скрипта отрабатывает тока 1 раз, то переписываем файл с проксяксями, опуская вниз то что было на 1 строке.

Если за время работы скрипта КУРЛ делает несколько запросов, то по такому же алгоритму опускаем использованные прокси в низ списка(файла с проксями)

Подпись))
Д
На сайте с 01.04.2012
Offline
165
#15
Jacker:
Извините, пожалуйста, но где прописывать адрес этого .dat файла в коде?

Вопрос: куда ложить файл proxy.dat? Пожалуйста, подскажите!

тужа же где и сам скрипт.

J
На сайте с 18.10.2010
Offline
46
#16

Внедрил код парсера с рандомным выбором прокси, но парсер работает через раз - прокси проверенные 100% рабочие.

Код:

public function check($url)

{

$proxy = file('proxy.dat');

shuffle($proxy);

$ch = curl_init("тут url откуда парсим");

curl_setopt($ch, CURLOPT_HEADER, 0);

curl_setopt($ch, CURLOPT_RETURNTRANSFER,1);

curl_setopt($ch, CURLOPT_PROXYTYPE, CURLPROXY_HTTP);

curl_setopt($ch, CURLOPT_PROXY, $proxy[0]);

$result = curl_exec($ch);

if(curl_errno($ch) != 0)

die("curl_errno(".curl_errno($ch)."), curl_error(".curl_error($ch).")");

curl_close($ch);

return substr($result, 9);

}

Ошибка следующая, когда не работает:

curl_errno(52), curl_error(Empty reply from server)

Может подскажете что добавить в код CURL? Может useragent?

С уважением.

дани мапов
На сайте с 06.09.2012
Offline
204
#17

Попробуйте, в любом случае это желательно прописать


curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 10);// таймаут соединения 10 секунд
curl_setopt($ch, CURLOPT_TIMEOUT, 10);// таймаут ожидания также 10 секунд
Написание и доработка скриптов (PHP, MySQL, JavaScript, jQuery) (/ru/forum/811046)
J
На сайте с 18.10.2010
Offline
46
#18

Добавил в код вот эти строки:

curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 0);

curl_setopt($ch, CURLOPT_TIMEOUT, 600);

curl_setopt($ch, CURLOPT_USERAGENT, 'Mozilla/5.0 (Windows; U; Windows NT 5.1; ru; rv:1.9.0.17) Gecko/2009122116 Firefox/3.0.17');

Теперь код выглядит так:

public function check($url)

{

$proxy = file('proxy.dat');

shuffle($proxy);

$ch = curl_init("тут url откуда парсим");

curl_setopt($ch, CURLOPT_HEADER, 0);

curl_setopt($ch, CURLOPT_RETURNTRANSFER,1);

curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 0);

curl_setopt($ch, CURLOPT_TIMEOUT, 600);

curl_setopt($ch, CURLOPT_USERAGENT, 'Mozilla/5.0 (Windows; U; Windows NT 5.1; ru; rv:1.9.0.17) Gecko/2009122116 Firefox/3.0.17');

curl_setopt($ch, CURLOPT_PROXYTYPE, CURLPROXY_HTTP);

curl_setopt($ch, CURLOPT_PROXY, $proxy[0]);

$result = curl_exec($ch);

if(curl_errno($ch) != 0)

die("curl_errno(".curl_errno($ch)."), curl_error(".curl_error($ch).")");

curl_close($ch);

return substr($result, 9);

}

Но ОШИБКА curl_errno(52), curl_error(Empty reply from server) всёравно выскакивает через раз при парсинге.

Подскажите, пожалуста, в чём дело!!!

Милованов Ю.С
На сайте с 24.01.2008
Offline
196
#19

Пустой ответ от сервера.

Возможные причины:

1) Сервер Вас как-то идентифицирует и таким образом бреет.

2) На сервере(который парсите) установлен лимит на количество обрабатываемых запросов в единицу времени.

3) Челябинский метеорит дает о себе знать:)

12

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий