PHP: мне нужно использовать куки в этом сценарии cURL? - PullRequest
0 голосов
/ 09 апреля 2019

Следующий скрипт:

<?php
$sDataFile = '<path>\journal-issue-ToC.htm';
$sURL = 'https://onlinelibrary.wiley.com/toc/14678624/2014/85/1';
$bHeader = false;
$sCAinfo = '<path>\cacert.pem';

$cURLhandle = curl_init();
$FilePointer = fopen($sDataFile, 'wb');

curl_setopt($cURLhandle, CURLOPT_URL, $sURL);
curl_setopt($cURLhandle, CURLOPT_FILE, $FilePointer);
curl_setopt($cURLhandle, CURLOPT_HEADER, $bHeader);
curl_setopt($cURLhandle, CURLOPT_CAINFO, $sCAinfo);

curl_exec($cURLhandle);

curl_close($cURLhandle);
fclose($FilePointer);

сохраняет файл «journal-issue-ToC.htm», содержащий только одну следующую строку:

The URL has moved <a href="https://onlinelibrary.wiley.com/toc/14678624/2014/85/1?cookieSet=1">here</a>

Если я открою этот файл вв браузере написано «URL-адрес переместился сюда», а слово «здесь» связано с нужным URL-адресом с суффиксом «? cookieSet = 1».Если я нажму на эту ссылку, я попаду на страницу, которую пытаюсь сохранить с помощью cURL.

Я подумал, что, возможно, я смогу смоделировать нажатие на эту ссылку, добавив к суффиксу URL «? CookieSet = 1» извоню cURL_exec() во второй раз.Поэтому для этого я добавил в скрипт три строки:

<?php
$sDataFile = '<path>\journal-issue-ToC-2.htm';
$sURL = 'https://onlinelibrary.wiley.com/toc/14678624/2014/85/1';
$bHeader = false;
$sCAinfo = '<path>\cacert.pem';

$cURLhandle = curl_init();
$FilePointer = fopen($sDataFile, 'wb');

curl_setopt($cURLhandle, CURLOPT_URL, $sURL);
curl_setopt($cURLhandle, CURLOPT_FILE, $FilePointer);
curl_setopt($cURLhandle, CURLOPT_HEADER, $bHeader);
curl_setopt($cURLhandle, CURLOPT_CAINFO, $sCAinfo);

curl_exec($cURLhandle);

$sURL .= '?cookieSet=1';
curl_setopt($cURLhandle, CURLOPT_URL, $sURL);
curl_exec($cURLhandle);

curl_close($cURLhandle);
fclose($FilePointer);

Этот скрипт сохраняет файл «journal-issue-ToC-2.htm», содержащий только следующие две строки:

The URL has moved <a href="https://onlinelibrary.wiley.com/toc/14678624/2014/85/1?cookieSet=1">here</a>
The URL has moved <a href="http://onlinelibrary.wiley.com/action/cookieAbsent">here</a>

Если я открываю этот файл в браузере, он говорит: «URL-адрес переместился сюда» дважды, при этом первое слово «здесь» связано с нужным URL-суффиксом, как и раньше, а второе слово «здесь» связано с бесполезной страницей."http://onlinelibrary.wiley.com/action/cookieAbsent".

Я гуглил php curl "The URL has moved here". Большинство результатов были получены на иностранных языках, и ни один из них не дал никаких намеков на причину такого поведения или на то, как справиться с этим и получить нужную страницу.

Интересно, проблема в том, что мне нужно что-то делать с куки в curl_setopt(). Я раньше не работал с куки, и я читал об опциях для них в curl_setopt() и чувствую себя немногоМожет кто-нибудь объяснить, что происходит в этих сценариях и что мне нужно изменить, чтобы заставить сценарии работать?

Я использую PHP 7.2.2 на IIS 7.5 под 64-битной Windows 7.

1 Ответ

0 голосов
/ 09 апреля 2019

Нужно ли использовать куки в этом сценарии cURL?

Да


Вам необходимо настроить curl для хранения / обновления файлов cookie, полученных веб-сайтом, и отправлять их обратно при каждом запросе.

Кроме того, поскольку сайт будет отображать контент только при отправке файлов cookie, необходимо выполнить два запроса. Первый из них просто позволит получать и хранить файлы cookie. Второй (который отправит обратно сохраненные файлы cookie) получит фактический контент.

Чтобы хранить полученные куки и отправлять их при каждом запросе, вам нужны следующие строки:

curl_setopt($cURLhandle, CURLOPT_COOKIEFILE, "path_to\cookies.txt");
curl_setopt($cURLhandle, CURLOPT_COOKIEJAR,  "path_to\cookies.txt");

path_to\cookies.txt - это абсолютный путь к файлу, в котором локально хранятся файлы cookie. Файл создается при первом вызове. Конечно, целевой каталог должен быть доступен для чтения / записи.

Наконец сделайте два вызова curl:

1) просто загрузить домашнюю страницу https://onlinelibrary.wiley.com/

2) загрузить нужную страницу https://onlinelibrary.wiley.com/toc/14678624/2014/85/1


Обратите внимание, что если вы собираетесь получить несколько страниц, вам нужно выполнить шаг 1 только в первый раз.

...