Мне предоставили RESTful URL для загрузки на сайт WordPress, который я сейчас обновляю. На этих страницах уже есть RESTful URL, я просто обновляю их новыми URL. Однако, как только я переключаю старый на новый, я получаю следующую ошибку:
Предупреждение:
file_get_contents (http://rest.vivapvd.com/agenda/52/2015-11-02 /)
[function.file-get-contents]: не удалось открыть поток: HTTP-запрос
не удалось! HTTP / 1.1 400 неверный запрос в
/nas/…../includes/thomas_functions.php
на линии 86
Вот строчка 86
function fetch_url_content($url=false){
if(empty($url)) return $url;
$contents = file_get_contents($url);
$array = json_decode($contents,true);
return $array;
}
ПРИМЕЧАНИЕ. Предполагается, что это будет работать со страницей шаблона, подготовленной предыдущим разработчиком. Вот страница ниже:
<?php
/*
Template Name: Agenda Pages
*/
add_filter( 'genesis_pre_get_option_site_layout', '__genesis_return_sidebar_content' );
remove_action( 'genesis_after_content', 'genesis_get_sidebar' );
add_action( 'genesis_after_content', 'td_custom_page_sidebar' );
/*---------------------------------------------------------------------------------------*/
add_action('genesis_after_loop', 'agenda_restful_content');
function agenda_restful_content(){
global $post;
$url = get_post_meta($post->ID, 'wpcf-rest-url', true);
$agenda = fetch_url_content($url);
if($agenda){
//echo '<pre>'; var_dump($agenda); echo '</pre>';
$topictitle=false;
if(isset($agenda[0]['TopicTitle']) && !empty($agenda[0]['TopicTitle']))
echo '<h2>'.$agenda[0]['TopicTitle'].'</h2>';
echo '<table>';
echo '<tbody>';
foreach($agenda as $a){
if($topictitle===false)
$topictitle=$a['TopicTitle'];
if( $topictitle!=$a['TopicTitle'] ){
$topictitle=$a['TopicTitle'];
echo '</tbody></table>';
echo !empty($a['TopicTitle']) ? "<h2>$a[TopicTitle]</h2>" : '';
echo '<table>';
echo '<tbody>';
}
?>
<tr>
<th class="time"><?php echo date('g:i A', strtotime($a['StartDate'])) ?>-<?php echo date('g:i A', strtotime($a['EndDate'])) ?></th>
<td>
<?php echo isset($a['Title']) ? $a['Title'].'<br>' : ''; ?>
<?php echo isset($a['SpeakerNames']) ? $a['SpeakerNames'] : ''; ?>
</td>
</tr>
<?php
}
echo '</tbody></table>';
}
}
/*---------------------------------------------------------------------------------------*/
genesis();
?>
После многих попыток причина этой ошибки была в документе, предоставленном мне клиентом, который содержал пути URL с нечитаемыми дефисами. Когда я скопировал и вставил URLhttp://rest.vivapvd.com/agenda/52/11‐02‐2015 / «в слово, это придумали как»http://rest.vivapvd.com/agenda/52/11%E2%80%9002%E2%80%902015/«
Итак, я случайно вошел и вручную набрал дефисы за URL, и все получилось просто отлично!
Спасибо за вашу помощь, ребята! Это было странно.
Похоже, он не может найти действительный файл по этому адресу. Вы должны попытаться указать имя файла … например: http://rest.vivapvd.com/agenda/52/2015/post.php
Кроме того, вы уверены, что URL-адреса REST полностью настроены на веб-сервере? Вы установили их в mod_rewrite (для apache)?
Неверный запрос кода состояния 400 означает, что с сервером проблем нет, но вы что-то не так делаете с запросом. (Например, вы используете get там, где требуется публикация или вы не указали обязательные параметры)
Исходя из кода этого URL, я предполагаю, что вам необходимо отправить запрос на публикацию. File_get_contents сделает запрос get, который, возможно, является «неправильным» с точки зрения сервера.
Я бы порекомендовал не использовать file_get_contents, а хотя бы модуль curl в php (в качестве альтернативы есть несколько высокоуровневых http-клиентов, доступных для PHP). Там вы можете указать метод http и многое другое (например, дополнительные заголовки, аутентификация, …)