2016-08-17 87 views
4

我的網址是:PHP捲曲的錯誤請求400 - Mapquest服務地理編碼

http://www.mapquestapi.com/geocoding/v1/batch?key=dNBvDLtTx85L3akdg8vBoHQXrWpDJSEI&location=HEBRON,KY,US&location=CINCINNATI,KY,US&location=CINCINNATI,KY,US&location=BEDFORD PARK,IL,US&location=BEDFORD PARK,IL,US&location=HODGKINS,IL,US&location=HODGKINS,IL,US&location=HODGKINS,IL,US&location=BALDWIN PARK,CA,US&location=BALDWIN PARK,CA,US&location=BALDWIN PARK,CA,US&location=,,US 

很長,但它應該是符合https://www.mapquestapi.com/geocoding/

當我運行下面的PHP代碼的奧祕展開:

$ch = curl_init(); 

curl_setopt($ch, CURLOPT_VERBOSE, true); 
curl_setopt($ch, CURLOPT_URL, $urlForGeocode); 
curl_setopt($ch, CURLOPT_HTTPGET, 1); 
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); 
curl_setopt($ch, CURLOPT_FRESH_CONNECT, TRUE); 


$return = curl_exec ($ch); 
curl_close ($ch); 
echo($return); 


$output = shell_exec('curl ' . $urlForGeocode); 
echo($output); 

變量$urlEncode保存上面url的值。第一輸出是:

<html><body><b>Http/1.1 Bad Request</b></body> </html> 

第二個請求的輸出是:

{ 
    "info": { 
     "statuscode": 400, 
     "copyright": { 
      "text": "\u00A9 2016 MapQuest, Inc.", 
      "imageUrl": "http://api.mqcdn.com/res/mqlogo.gif", 
      "imageAltText": "\u00A9 2016 MapQuest, Inc." 
     }, 
     "messages": ["no 'json' parameter found"] 
    }, 
    "options": { 
     "maxResults": -1, 
     "thumbMaps": true, 
     "ignoreLatLngInput": false 
    }, 
    "results": [{ 
     "providedLocation": {}, 
     "locations": [] 
    }] 
} 

這兩個不同的捲曲請求返回基本上是相同的事情。當我從本地機器的終端運行cURL時,400也會返回。

如果我把URL放在瀏覽器中,我不會失望,它會返回我正在查找的數據和200狀態碼。

瀏覽器獲取請求和cURL有什麼不同?

+3

試着加上'curl_setopt($ CH,CURLOPT_HTTPHEADER,陣列( '接受:應用/ JSON'));'在Chrome瀏覽器中,打開開發工具>網絡,找到請求並按副本作爲捲曲,您可以看到它用來發出請求的所有設置,以便您可以進行比較。 –

+1

您是否嘗試過編碼url,即將空格變成%20?此外,爲了直接回答關於curl請求與瀏覽器請求不同的內容,是用戶代理。你有沒有試過讓你的瀏覽器用戶代理捲曲? – chiliNUT

+0

你們倆都是對的......非常感謝副本的捲曲。我做到了,看着網址,唯一不同的是空間。我不相信這只是空間,所以我沒有嘗試蝙蝠的權利。好的。有趣的是,我嘗試urlencode()和rawurlencode()都沒有結果。 – stackOverFlew

回答

1

像@Matt忍者和@chiliNut建議,我需要看看這兩個請求之間的區別。

唯一的區別是空間。我嘗試運行urlencode() php函數以及rawurlencode() php函數,但都沒有影響結果。

這是我現在使用的,而不是url編碼是什麼:

$urlForGeocodeURLEncoded = str_replace(' ', '%20', $urlForGeocode); 

enter image description here

0

似乎是一個問題,你設置變量的方式$urlForGeocode ..你使用'"

它應該是前者。

第二個請求失敗,因爲URL字段中存在產生格式錯誤的請求的(空格)。

+0

關於url,我把它設置爲一個由''包圍的字符串。我不認爲第二個因爲空間而失敗。這個空間是運行命令所必需的(如果你指的是shell執行)。 – stackOverFlew