PHP get_file_contents из формы aspnet после POST

0

Я пытаюсь извлечь информацию со следующего веб-сайта: http://www.borsabcn.es/esp/aspx/Empresas/Empresas.aspx

Как вы можете видеть, на этом веб-сайте перечислены компании, которые находятся на Барселонской фондовой бирже. Но он отображает только первую страницу по алфавитному порядку. Я работаю с PHP, чтобы автоматически получать информацию со ВСЕХ СТРАНИЦ. Например, если вы нажмете ссылку вверху, где указано ERC - HUL, перейдите на страницу, содержащую больше фирменных наименований, начиная с букв: ERC.

У меня нет большого опыта работы с APSX, но то, что я мог видеть после расследования, заключается в том, что при нажатии этой ссылки срабатывает следующая функция JS:

var GoPag = function (inicio) {
    document.forms.aspnetForm['ctl00_Contenido_GoPag'].value = inicio;
    document.forms.aspnetForm.submit();
}

Это в основном просто представляет форму со скрытым полем ввода (id="ctl00_Contenido_GoPag" name="ctl00$Contenido$GoPag") со значением, содержащим номер страницы, который мы хотим показать. Значение по умолчанию равно 0, а значение для ERC - HUL равно 3.

Я пытаюсь получить страницу, соответствующую странице 3, у меня есть следующий PHP-код, который я создал после нескольких исследований:

$postdata = http_build_query(
    array(
        'ctl00$Contenido$GoPag' => '3'
    )
);

$opts = array('http' =>
    array(
        'method'  => 'POST',
        'header'  => 'Content-type: application/xhtml+xm',
        'content' => $postdata
    )
);

$context  = stream_context_create($opts);

$result = file_get_contents('http://www.borsabcn.es/esp/aspx/Empresas/Empresas.aspx', false, $context);

echo $result;

Однако это всегда возвращает результат для страницы по умолчанию (0), в которой перечислены компании, начинающиеся с буквы A. Кажется, что опубликованные данные не интерпретируются правильно.

Я на правильном пути? Кто-нибудь знает, что я могу сделать, чтобы получить данные, которые я ищу?

Благодарю!

1 ответ

0
Лучший ответ

Я закончил поиск рабочего метода с использованием CURL в PHP. Я адаптировал код из этого ответа: Php Curl Posting to.aspx

Вот какой рабочий код для отправки данных на страницу.aspx и получения правильного ответа:

$p = 1; //page number to get

$postdata = http_build_query(
    array(
        '__EVENTTARGET' => '',
        '__EVENTARGUMENT' => '',
        '__VIEWSTATE' => 'your_event_state_value',
        '__EVENTVALIDATION' => 'your_event_validation_value',
        'ctl00$Contenido$GoPag' => $p
    )
);

$url = 'http://www.borsabcn.es/esp/aspx/Empresas/Empresas.aspx';

// Initialise cURL
$ch = curl_init($url);

// Set options (post request, return body from exec)
curl_setopt($ch, CURLOPT_POST, TRUE);
curl_setopt($ch, CURLOPT_POSTFIELDS, $postdata);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE);

// Do the request
$result = curl_exec($ch);

//show/check the result
echo $result;

Я удалил значения для переменных __VIEWSTATE и __EVENTVALIDATION в приведенном выше примере, но вы можете найти их, исследуя HTML для этой страницы в своем браузере.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню