2013-09-24 66 views
2

我正在嘗試用curl編寫請求。我想要得到兩點之間的距離。因此,我從我的數據庫中獲取這些點的數據來構建字符串。當我回應它時,最後的字符串看起來像這樣。無法通過cuRL從谷歌地圖請求中獲取JSON數據

http://maps.googleapis.com/maps/api/distancematrix/json?origins=40215+Düsseldorf+Königsallee 59&destinations=40215+Düsseldorf&sensor=false 

我也試過用https代替http,但結果是一樣的。如你所見,它會返回一個非常好的JSON響應,但是當我這樣做後,我總是得到一個錯誤。

public function request($signedUrl) { 
     $ch = curl_init($signedUrl); 
     curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); 
     curl_setopt($ch, CURLOPT_HEADER, 0); 
     $data = curl_exec($ch); 
     curl_close($ch); 
     $this->response = json_decode($data); 
    } 

$signedUrl是requestUrl。

從谷歌的錯誤我得到的,當我var_dump($data)

400. That’s an error. 

Your client has issued a malformed or illegal request. That’s all we know. " 

當我的var_dump的響應,它只是給我空。

這裏有什麼問題,我該如何解決?我也試着用file_get_contents讀取它,但沒有成功

+0

在URL中'Königsallee'和'59'之間的空白怎麼樣? – Havelock

+0

嗨@Havelock - 嘗試用'+'替換空格,並嘗試完全刪除它,但我仍然得到相同的結果。仍然說NULL。 這這裏是requestURL改變它 'HTTP後://maps.googleapis.com/maps/api/distancematrix/json起源= 40215 + +杜塞爾多夫Königsallee59&目的地= 40215 +杜塞爾多夫&傳感器= FALSE' – devShuba

回答

4

作品[測試]。由於網址未經過編碼,因此您收到了錯誤的請求。

<?php 
$urlx='http://maps.googleapis.com/maps/api/distancematrix/json?origins=40215+D%C3%BCsseldor%20%E2%80%8Bf+K%C3%B6nigsallee59&destinations=40215+D%C3%BCsseldorf&sensor=false'; 
$ch = curl_init($urlx); 
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); 
curl_setopt($ch, CURLOPT_HEADER, 0); 
$data = curl_exec($ch); 
curl_close($ch); 
var_dump(($data)); 
+0

哈哈,OK,是的,工作。所以我想只需使用urlencode(url)將url包裝好,就可以完成工作,對吧? – devShuba

+0

我認爲你必須編碼參數。 –