У библиотеки есть
форма поиска книг. Но первоначально на странице нет тега
<form>
и инпутов с нужными name.
Пользователь пишет название книги и нажимает кнопку. Как я понимаю, после этого срабатывает скрипт, который считывает заполненные данные, формирует с ними настоящую форму и отправляет методом POST.
Без перезагрузки страницы пользователь получает результат поиска:
Мне нужно программно заполнить эту форму и вывести страницу результата. Анализирую с помощью панели Network, какие данные передаются, повторяю запрос с такими параметрами, но
не работает.
require 'vendor/autoload.php';
// Подключаем класс Client
use GuzzleHttp\Client;
// Инициализируем класс для работы с удаленными веб-ресурсами
$client = new Client();
// Делаем запрос, получаем ответ
$response = $client->request("POST", "http://opac.rgub.ru/cgiopac/opacg/opac.exe", [
"form_params" => [
"arg0" => "GUEST",
"arg1" => "GUESTE",
"TypeAccess" => "FreeAccess",
"_errorXsl" => "/opacg/html/common/xsl/error.xsl",
"_wait" => "6M",
"_xsl" => "/opacg/html/search/xsl/search_results.xsl",
"_version" => "2.0.0",
"_service" => "STORAGE:opacfindd:FindView",
"outform" => "SHOTFORM",
"length" => "15",
"query/body" => "%28TI+%CE%E1%EB%EE%EC%EE%E2%29",
"query/open" => "{NC:<span class='red_text'>}",
"query/close" => "{NC:</span>}",
"userId" => "GUEST",
"session" => "495180",
"iddb" => "5",
"level[0]" => "Full",
"level[1]" => "Retro"
]
]);
// Выводим ответ
echo $response->getBody();
Чего не хватает?
UPD
Не хватало данных, которые передаются с
opac.rgub.ru/opacg/guest.html в
opac.rgub.ru/cgiopac/opacg/opac.exe:
"arg0" => "GUEST",
"arg1" => "GUESTE",
"TypeAccess" => "FreeAccess"
Уже лучше. Вместо «Не хватает входных данных. Вернитесь к поиску.» выводится хтмл, но на странице ничего не отображается.
Пытаюсь спарсить название первой книги в выдаче, ничего не выводится.
// Находим нужное из хтмла выдачи
$htmlRGBM = $response->getBody();
$docRGBM = new DOMDocument();
@$docRGBM->loadHTML($htmlRGBM);
$xpathRGBM = new DOMXpath($docRGBM);
echo $xpathRGBM->query('//entry[1]/text()')[0]->nodeValue;