0
我在curl請求時遇到問題 - 將文本搜索發佈到Google Places API。Curl POST請求返回來自Google Places API的錯誤。 「服務需要密鑰」
代碼在下面,但是如果我手動構建URL,請求很好&返回我的正確搜索數據。似乎我的curl請求(POST)由於某種原因未發送發佈數據。
任何人有任何想法我在這裏做錯了嗎?
<?php
$options = array(
'url' => 'https://maps.googleapis.com/maps/api/place/textsearch/xml?',
'query' => 'my+query+terms',
'location' => '43.836296,-79.0851207',
'radius' =>'5000',
'key' => '_my_api_key_'
);
$api = array_shift($options);
$ch = curl_init();
curl_setopt($ch, CURLOPT_VERBOSE, TRUE);
curl_setopt($ch, CURLINFO_HEADER_OUT, TRUE);
curl_setopt($ch, CURLOPT_URL, $api);
curl_setopt($ch, CURLOPT_POST, TRUE);
curl_setopt($ch, CURLOPT_POSTFIELDS, $options);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE);
$result = curl_exec($ch);
$request = curl_getinfo($ch);
curl_close($ch);
echo '<pre>'; print_r($request); echo '</pre>';
echo '<pre>'; print_r($result); echo '</pre>';
return;
這是我得到的迴應,如果網絡能夠看到數據是否從請求標頭髮布?
Array
(
[url] => https://maps.googleapis.com/maps/api/place/textsearch/xml?
[content_type] => application/xml; charset=UTF-8
[http_code] => 200
[header_size] => 418
[request_size] => 218
[filetime] => -1
[ssl_verify_result] => 0
[redirect_count] => 0
[total_time] => 1.047086
[namelookup_time] => 0.000911
[connect_time] => 0.002002
[pretransfer_time] => 0.033092
[size_upload] => 495
[size_download] => 183
[speed_download] => 174
[speed_upload] => 472
[download_content_length] => -1
[upload_content_length] => 495
[starttransfer_time] => 1.034263
[redirect_time] => 0
[certinfo] => Array
(
)
[primary_ip] => xxx.xxx.xxx.xxx
[primary_port] => 443
[local_ip] => xxx.xxx.xxx.xxx
[local_port] => 52630
[redirect_url] =>
[request_header] => POST /maps/api/place/textsearch/xml? HTTP/1.1
Host: maps.googleapis.com
Accept: */*
Content-Length: 495
Expect: 100-continue
Content-Type: multipart/form-data; boundary=------------------------xxxxxxx
)
REQUEST_DENIED
This service requires an API key.
訂正工作CODE:
<?php
$options = array(
'url' => 'https://maps.googleapis.com/maps/api/place/textsearch/xml?',
'query' => '_the_query_string_',
'location' => '43.836296,-79.0851207',
'radius' =>'5000',
'key' => '_my_api_key_'
);
$headers = array(
'Accept: application/xml',
'Content-Type: application/xml',
);
$api = array_shift($options) . http_build_query($options);
$ch = curl_init();
curl_setopt($ch, CURLOPT_VERBOSE, TRUE); // not really needed
curl_setopt($ch, CURLINFO_HEADER_OUT, TRUE);
curl_setopt($ch, CURLOPT_URL, $api);
curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE);
$result = curl_exec($ch);
// $request = curl_getinfo($ch); // also not needed
curl_close($ch);
echo $result;
return;
而非POST請求嘗試與形成爲URL的查詢字符串部分中的參數的GET請求 – RamRaider
facepalm!那真是令人尷尬!是的 - 獲取請求是去這裏的方式。我會假設谷歌只是無視任何得到張貼... –