Задать вопрос
@fomenko_alexandr

Как последовательно перейти по нескольким ссылкам curl?

Здравствуйте мастера.
Вот осваиваю curl. Учусь парсить даные (ходят слухи, что это пригодится для интернет-магазина), но я использую для парсинга картинок, что очень удобно.

Вот пытаюсь написать скрипт, который авторизируруется на сайте (это получилось), берет регуляркой ссылку (это тоже получилось), и переходит по этой ссылке (что никак не получается). Ссылка парсится рабочая. При переходе вручную, всё выполняется (обновляются данные), но не выходит это сделать автоматически.

Есть ли вариант сделать это последовательно, не использую мультикурла, и прочих классов?

<?php

$url = 'http://url';

$ci = curl_init();
curl_setopt($ci, CURLOPT_URL, $url);
curl_setopt($ci, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ci, CURLOPT_AUTOREFERER, 1);
curl_setopt($ci, CURLOPT_USERAGENT, "Mozilla/4.0 (compatible; MSIE 5.01; Windows NT 5.0)");
curl_setopt($ci, CURLOPT_COOKIEFILE, $_SERVER['DOCUMENT_ROOT'].'/coo.txt');
curl_setopt($ci, CURLOPT_COOKIEJAR, $_SERVER['DOCUMENT_ROOT'].'/coo.txt');

curl_setopt($ci, CURLOPT_FOLLOWLOCATION, 10);
curl_setopt($ci, CURLOPT_HEADER, 1);
curl_setopt($ci, CURLOPT_POST, 1);

curl_setopt($ci, CURLOPT_POSTFIELDS, "log=log&password=pass");
$result = curl_exec($ci);
curl_close($ci);

echo '<pre>';
preg_match('~<a href="(.*)">.*(Добавить|Взять|Положить).*<\/a>~U', $result, $found);
preg_match('~<a href=".*">~', $result, $found);
print_r($found);

$link = $url.'/'.$found[1];

$ci2 = curl_init();
curl_setopt($ci2, CURLOPT_URL, $link);
curl_setopt($ci2, CURLOPT_HEADER, 1);
curl_setopt($ci2, CURLOPT_FOLLOWLOCATION, 10);
curl_setopt($ci2, CURLOPT_USERAGENT, "Mozilla/4.0 (compatible; MSIE 5.01; Windows NT 5.0)");
curl_setopt($ci2, CURLOPT_COOKIEFILE, $_SERVER['DOCUMENT_ROOT'].'/coo.txt');
curl_setopt($ci2, CURLOPT_COOKIEJAR, $_SERVER['DOCUMENT_ROOT'].'/coo.txt');
curl_setopt($ci, CURLOPT_POST, 1);
$exec = curl_exec($ci2);
curl_close($ci2);

print_r($ci2);


?>


Подскажите пожалуйста, как это можно реализовать
  • Вопрос задан
  • 958 просмотров
Подписаться 1 Оценить 1 комментарий
Пригласить эксперта
Ответы на вопрос 3
glebovgin
@glebovgin
Full Stack Web Developer
День добрый.

Вам
curl_setopt($ci, CURLOPT_POST, 1) (upd: я уже заметил, что не в этом дело)
в данном случае не нужен. Вы же не отправляете никаких POST-данных.
Если $link точно верный, то вы получите в $exec необходимые данные.

UPD: и вы забыли curl_setopt($ci2, CURLOPT_RETURNTRANSFER, true);
Ответ написан
@esvlad
Веб-разработчик
Для парсинга советую, библиотеку SimpleHtmlDOM
Почитать о ней можно тут.
Не придется париться с регулярками.
Ответ написан
@springimport
ходят слухи, что это пригодится для интернет-магазина

Какого такого магазина?

Нужно сделать echo $link; и посмотреть что там.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы