Следующий скрипт:
<?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.