Парсинг динамических страниц

12
ДП
На сайте с 23.11.2009
Offline
203
#11

Если отвечать на поставленный вопрос - то да, можно :)

Если решать проблему, то для начала расскажите чем вы запрос отправляете.

curl, file_get_contents, сокеты, или какую-нибудь либо типа guzzle юзаете?

Вообще гуглите просто как отправить куки с помощью того средства, которым вы запросы делаете.

K
На сайте с 17.05.2016
Offline
25
#12
Дикий пионер:
Если отвечать на поставленный вопрос - то да, можно :)
Если решать проблему, то для начала расскажите чем вы запрос отправляете.
curl, file_get_contents, сокеты, или какую-нибудь либо типа guzzle юзаете?
Вообще гуглите просто как отправить куки с помощью того средства, которым вы запросы делаете.

через file_get_contents. Погуглил... Ниче не понял. Я просто в принципе не очень хорошо понимаю как с куками работать. Пытался сделать так (метод с php.net):

<?php

// Создаем поток
$opts = array(
'http'=>array(
'method'=>"GET",
'header'=>"Cookie: tv_channels=661; tv_region=585;\r\n"
)
);

$context = stream_context_create($opts);

$file = file_get_contents('http://www.example.com/', false, $context);
?>

вообще ничего не работает...

Проверенная видеореклама (https://goo.gl/vhomjx) для любых сайтов Нормальные пацаны покупают и продают сайты здесь (https://goo.gl/nKv5Vk)
ДП
На сайте с 23.11.2009
Offline
203
#13

Очень странно, куки я так не отправлял, а вот авторизацию по логину/паролю делал. Там она тоже через заголовки делается.

Ну что могу сказать, или ищите способ посмотреть что у вас уходит на сервер (через fiddler может или еще как), или пробуйте с помощью курла, сокетов или других способов.

Вывод ошибок еще может включить, вдруг что-то пишет всё-таки?

K
На сайте с 17.05.2016
Offline
25
#14

На всякий случай накатаю для таких как я.

Если вы юзаете file_get_contents и нужно отправить куки, то не мучайте голову и юзайте cURL. Это действительно удобнее и действительно работает))

Вы делали раньше так:


$donor = "http://example.com";
$text = file_get_contents($donor);
$pattern = '~<div id="target">(.*)</div>~Usi';
preg_match ($pattern, $text, $matches);
$maintxt = $matches[1];
echo $maintxt;

Но нужно было отправить куки, например "region=77; country=43", так как сайт по умолчанию выдавал данные не того региона, который нужен был. Оказывается всё очень просто... почти... Делаем так:

 
if( $curl = curl_init("http://example.com") ) {
curl_setopt($curl, CURLOPT_RETURNTRANSFER,true);
curl_setopt($curl, CURLOPT_COOKIE, "region=77; country=43");
$text = curl_exec($curl);
curl_close($curl);
}
$pattern = '~<div id="target">(.+?)</div>~Usi';
preg_match ($pattern, $text, $matches);
$maintxt = $matches[1];
echo $maintxt;

Обратите внимание на то, что perg_match не работает, если в pattern стоит (.*). Нужно чтобы стояло (.+?). Как по фен-шую это всё называется и в чем корень зла сказать затрудняюсь, но в этом есть смысл. Может кто-то ниже сможет дать умное объяснение, но мне сейчас достаточно того, что нашелся просто рабочий способ.

Ну и вообще это хорошая замена file_get_contents, так как просто удаляем строчку

    curl_setopt($curl, CURLOPT_COOKIE, "region=77; country=43");

и получаем полностью аналогичную функцию. Умные говорят, что cURL круче file_get_contents. Я так понимаю, в основном тем, что можно помимо куков отправить еще кучу всякого добра, но повторюсь, я пока не всё изучил. Гуглите подробности и будет Вам счастье. Я тут просто описал примитивнейшее применение, которое довольно просто понять как использовать и дополнить нужными штуками.

12

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