Это казалось бы легкой задачей, но я не могу заставить ее работать.Php: получить ответ от опубликованной формы на внешнем сервисе
Мне нужно получить доступ к некоторым данным, публично предоставленным Банком Мексики. Данные доступны по форме, которую вы можете найти по ссылке: http://www.banxico.org.mx/SieInternet/consultarDirectorioInternetAction.do?accion=consultarCuadro&idCuadro=CP5&locale=es Вы можете увидеть пример данных, которые мне нужны, щелкнув по кнопке «html» в левом верхнем углу. Когда эта таблица открыта, я знаю, как получить нужные мне данные и работать с ними. Тем не менее, я хотел бы иметь это как автоматизированную задачу, чтобы скрипт мог регулярно проверять, когда доступны новые данные.
Итак, я пытаюсь использовать file_get_contents() вместе с stream_context_create(), чтобы опубликовать параметры, которые мне нужны, и открыть страницу результатов, чтобы я мог работать с ней.
Я пробовал несколько разных способов (сначала я использовал http_post_fields()), но ничего не работает. Сейчас мой код это:
<?php
$url = 'http://www.banxico.org.mx/SieInternet/consultarDirectorioInternetAction.do?accion=consultarSeries';
$data = array(
'anoFinal' => 2015,
'anoInicial' => 2015,
'formatoHTML.x' => 15,
'formatoHTML.y' => 7,
'formatoHorizontal' => false,
'idCuadro' => 'CP5',
'locale' => 'es',
'sector' => 8,
'series' => 'SP1',
'tipoInformacion' => '',
'version' => 2
);
$postdata = http_build_query($data);
$opts = array('http' =>
array(
'method' => 'POST',
'header' => 'Content-type: application/x-www-form-urlencoded',
'content' => $postdata
)
);
$context = stream_context_create($opts);
$result = file_get_contents($url, false, $context);
//returns bool(false)
?>
Что мне не хватает? Я заметил, что страница на самом деле ничего не возвращает, если отправляются неправильные параметры (как вы можете видеть, просто открывая http://www.banxico.org.mx/SieInternet/consultarDirectorioInternetAction.do?accion=consultarSeries без каких-либо данных сообщения: ничего не возвращается), поэтому я не уверен, что сообщение успешно, но ничего не возвращается, потому что некоторые параметры неверны или код неправильный.
Опубликованные данные должны быть точными, поскольку я скопировал их непосредственно из успешного запроса, который я сделал вручную. Что мне не хватает?
Вы забыли объяснить, в чем проблема. Вы просто говорите «не работает». –
Ну, поскольку он возвращает bool (false), это явно не данные, которые я пытаюсь извлечь. – DavidTonarini
Добавьте '' ignore_errors '=> true' в свой контекст и посмотрите, что вы получаете. Кроме того, сделайте 'var_dump ($ http_response_header);' впоследствии, чтобы узнать, отвечает ли удаленный сервер кодом ошибки. – CBroe