如何通过PHP访问RESTful API

11

我对PHP和使用RESTful API的整个过程都比较陌生。目前我只想成功地向OpenStreetMap API发送一个普通的HTTP GET请求。

我正在使用tcdent的简单PHP REST客户端,并且基本上了解它的功能。我的示例代码用于获取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

使用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);


谢谢,但我的RestClient类内部使用curl。我发布的代码与tcdent在git网站上建议如何使用他的客户端非常接近。我基本上只是将格式从JSON更改为XML,因为OSM API始终返回XML。所以也许这可能是一个格式问题?! - Matthias Loeks

4

好的,问题显然是'format' => "xml"规范的问题。 没有它并且在Martin的帮助下使用SimpleXMLElement(感谢Martin),我现在成功加载了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的好起点。
感谢您的帮助!

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接