@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);


?>


Подскажите пожалуйста, как это можно реализовать
  • Вопрос задан
  • 939 просмотров
Пригласить эксперта
Ответы на вопрос 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; и посмотреть что там.
Ответ написан
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы
11 мая 2024, в 00:19
1000 руб./за проект
10 мая 2024, в 23:51
30000 руб./за проект
10 мая 2024, в 23:33
2500 руб./за проект