Как получить доступ к RESTful API через PHP - PullRequest
11 голосов
/ 03 ноября 2011

Я довольно новичок в PHP и в целом работаю с RESTful API.Все, что я хочу сейчас сделать, - это успешно выполнить простой HTTP-запрос GET к OpenStreetMap API .

. Я использую простой PHP REST-клиент от tcdent иЯ в основном понимаю, что это функциональность.Мой пример кода для получения текущих наборов изменений в OSM:

<?php
 include("restclient.php");

 $api = new RestClient(array(
     'base_url' => "http://api.openstreetmaps.org/", 
     'format' => "xml")
 );
 $result = $api->get("api/0.6/changesets");

 if($result->info->http_code < 400) {         
     echo "success:<br/><br/>";         
 } else {
     echo "failed:<br/><br/>";
 }
 echo $result->response;
?>

Когда я ввожу URL "http://api.openstreetmaps.org/api/0.6/changesets" в браузере, он доставляет файл XML. Однако через этот код PHP он возвращает OSMСтраница 404 Файл не найден.

Полагаю, это довольно глупый вопрос для новичка в PHP, но я не вижу, что мне не хватает, так как я не очень много знаю (пока) обо всех этих клиент-серверных процессах и т. Д..

Спасибо за помощь!

Ответы [ 2 ]

15 голосов
/ 03 ноября 2011

Используйте curl. Смотри http://www.lornajane.net/posts/2008/using-curl-and-php-to-talk-to-a-rest-service

   $service_url = 'http://example.com/rest/user/';
   $curl = curl_init($service_url);
   $curl_post_data = array(
        "user_id" => 42,
        "emailaddress" => 'lorna@example.com',
        );
   curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
   curl_setopt($curl, CURLOPT_POST, true);
   curl_setopt($curl, CURLOPT_POSTFIELDS, $curl_post_data);
   $curl_response = curl_exec($curl);
   curl_close($curl);

$ xml = new SimpleXMLElement ($ curl_response);

4 голосов
/ 04 ноября 2011

ОК, проблема, очевидно, заключалась в спецификации 'format' => "xml".Без него и с помощью SimpleXMLElement (спасибо Мартину) я теперь правильно загружаю данные XML:

<?php
   include("restclient.php");
   $api = new RestClient(); 
   $result = $api->get("http://api.openstreetmap.org/api/capabilities");
   $code = $result->info->http_code;
   if($code == 200) {
       $xml = new SimpleXMLElement($result->response);
       echo "Loaded XML, root element: ".$xml->getName();
   } else {
       echo "GET failed, error code: ".$code;
   }
?>

Хотя это не очень гибкий подход, поскольку он работает только для ответов XML, ондостаточно на данный момент и хороший момент, чтобы начать с OSM API.

Спасибо за помощь!

...