2011-11-03 54 views
10

Tôi khá mới đối với PHP và toàn bộ việc làm với RESTful APIs. Tất cả những gì tôi muốn làm tại thời điểm này là đưa ra yêu cầu HTTP GET đơn giản tới số OpenStreetMap API.Cách truy cập RESTful API qua PHP

Tôi đang sử dụng simple PHP REST client by tcdent và về cơ bản tôi hiểu chức năng của nó. mã ví dụ của tôi để nhận được changesets hiện tại OSM là:

<?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; 
?> 

Khi tôi nhập URL "http://api.openstreetmaps.org/api/0.6/changesets" trong trình duyệt, nó cung cấp các tập tin XML . Tuy nhiên, thông qua mã PHP này, nó trả về trang OSM 404 File not Found.

Tôi đoán đây là một câu hỏi PHP-người mới chứ không phải ngu ngốc nhưng tôi không thể nhìn thấy những gì tôi đang mất tích, kể từ khi tôi không biết nhiều (chưa) về tất cả những mặt tiến trình client-server, vv

Cám ơn bạn Cứu giúp!

Trả lời

12

Sử dụng curl. Xem 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" => '[email protected]', 
     ); 
    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);

+0

Cảm ơn, nhưng lớp RestClient của tôi sử dụng nội bộ curl. Mã tôi đăng gần với những gì tcdent gợi ý trên trang web git-website về cách sử dụng ứng dụng khách của anh ấy. Về cơ bản, tôi chỉ thay đổi định dạng từ JSON thành XML vì API OSM luôn trả về XML. Vì vậy, có lẽ nó có thể là một vấn đề định dạng ?! – matze09

4

OK, sự cố rõ ràng là đặc điểm 'định dạng' => "xml". Nếu không có nó và với sự giúp đỡ của SimpleXMLElement (nhờ Martin), bây giờ tôi đang nhận dữ liệu XML được nạp đúng cách:

<?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; 
    } 
?> 

Mặc dù đây không phải là một phương pháp rất linh hoạt vì nó chỉ hoạt động cho phản ứng XML, nó là đủ cho thời điểm này và một điểm tốt để bắt đầu với API OSM.

Cảm ơn sự giúp đỡ của bạn!

Các vấn đề liên quan