2015-10-10 2 views
0

Это казалось бы легкой задачей, но я не могу заставить ее работать.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 без каких-либо данных сообщения: ничего не возвращается), поэтому я не уверен, что сообщение успешно, но ничего не возвращается, потому что некоторые параметры неверны или код неправильный.

Опубликованные данные должны быть точными, поскольку я скопировал их непосредственно из успешного запроса, который я сделал вручную. Что мне не хватает?

+0

Вы забыли объяснить, в чем проблема. Вы просто говорите «не работает». –

+0

Ну, поскольку он возвращает bool (false), это явно не данные, которые я пытаюсь извлечь. – DavidTonarini

+1

Добавьте '' ignore_errors '=> true' в свой контекст и посмотрите, что вы получаете. Кроме того, сделайте 'var_dump ($ http_response_header);' впоследствии, чтобы узнать, отвечает ли удаленный сервер кодом ошибки. – CBroe

ответ

0

Получается, что cURL - лучший способ сделать это, благодаря CBroe за советом.

Вот фиксированный код, я использую, если кто-то нуждается в нем:

<?php 
//$url and $data are the same as above 

//initialize cURL 
$handle = curl_init($url); 

//post values 
curl_setopt($handle, CURLOPT_POST, true); 
curl_setopt($handle, CURLOPT_POSTFIELDS, $data); 

//set to return the response 
curl_setopt($handle, CURLOPT_RETURNTRANSFER, true); 

//execute 
$response = (curl_exec($handle)); 
?> 
Смежные вопросы