Php 来自Google places API的Curl POST请求返回错误&引用;服务需要密钥;
我遇到了一个curl请求的问题——在GooglePlacesAPI上发布了一个文本搜索 下面是代码,但是如果我手动构建URL,请求就可以了&返回正确的搜索数据。我的curl请求(POST)似乎出于某种原因没有发送POST数据 有人知道我做错了什么吗Php 来自Google places API的Curl POST请求返回错误&引用;服务需要密钥;,php,curl,google-api,Php,Curl,Google Api,我遇到了一个curl请求的问题——在GooglePlacesAPI上发布了一个文本搜索 下面是代码,但是如果我手动构建URL,请求就可以了&返回正确的搜索数据。我的curl请求(POST)似乎出于某种原因没有发送POST数据 有人知道我做错了什么吗 <?php $options = array( 'url' => 'https://maps.googleapis.com/maps/api/place/textsearch/xml?', 'query' => '
<?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;
修订的工作代码:
<?xml version="1.0" encoding="UTF-8"?>
<PlaceSearchResponse>
<status>OK</status>
<result>
<name>Forfar</name>
<type>locality</type>
<type>political</type>
<formatted_address>Forfar DD8, UK</formatted_address>
<geometry>
<location>
<lat>56.6435580</lat>
<lng>-2.8890620</lng>
</location>
<viewport>
<southwest>
<lat>56.6225256</lat>
<lng>-2.9239470</lng>
</southwest>
<northeast>
<lat>56.6601780</lat>
<lng>-2.8580524</lng>
</northeast>
</viewport>
</geometry>
<icon>https://maps.gstatic.com/mapfiles/place_api/icons/geocode-71.png</icon>
<reference>CmRbAAAACjwLAMU8k-MwG-Dmf6KhKmBG5Ms7CHJ6TZyH4g2pZlotgC93vbvl8aAAa3Xfc2sE7GnFFbr48auYaykQItR2jfSRUkr04rG0-luAyb1hm97OtSf6yCDqMzvd3z8e0q14EhA6m7z1cLhYlNt_rXB3K3-xGhQQe0bxNrmWATf8wqWydqlsp16Lrg</reference>
<id>7a7c726f4d8b907b1bcd39503c4348c6965916d9</id>
<photo>
<photo_reference>CmRaAAAABNJLUk7ET6Wa4JXEh9OSwj1s3dvIr25twTy_Yk7ey5n2LxGmVm_anlebTTbJ2e6ZTrtHMa4ij7vYLypy6XMhr6F9CFF0fx9XqQ_0ozgFno_VXuSWDmblc-q4-02nTaHmEhDAuJtLHpMk6RvkltH68iD2GhTCSqmyDYq3qY58O5qJoqJwlrCITg</photo_reference>
<width>4912</width>
<height>1920</height>
<html_attribution><a href="https://maps.google.com/maps/contrib/109648577636572315039/photos">L Hill</a></html_attribution>
</photo>
<place_id>ChIJW5AkiE1ghkgRfVEeH582Uzg</place_id>
</result>
</PlaceSearchResponse>
Array
(
[url] => https://maps.googleapis.com/maps/api/place/textsearch/xml?query=Forfar&location=52,-2.5&radius=50&key=AIzaSyD3tAJwB463-PpaqVS7pcMqWkkqnki0Kgk
[content_type] => application/xml; charset=UTF-8
[http_code] => 200
[header_size] => 394
[request_size] => 171
[filetime] => -1
[ssl_verify_result] => 20
[redirect_count] => 0
[total_time] => 0.39
[namelookup_time] => 0
[connect_time] => 0.047
[pretransfer_time] => 0.203
[size_upload] => 0
[size_download] => 1410
[speed_download] => 3615
[speed_upload] => 0
[download_content_length] => -1
[upload_content_length] => 0
[starttransfer_time] => 0.39
[redirect_time] => 0
[certinfo] => Array()
)
“\u查询\u字符串”,
'位置'=>'43.836296,-79.0851207',
“半径”=>“5000”,
'键'=>'\u我的api\u键'
);
$headers=数组(
“接受:应用程序/xml”,
'内容类型:应用程序/xml',
);
$api=数组移位($options)。http_build_query($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_HTTPHEADER,$headers);
curl_setopt($ch,CURLOPT_RETURNTRANSFER,TRUE);
$result=curl\u exec($ch);
//$request=curl_getinfo($ch);//也不需要
卷曲关闭($ch);
回声$结果;
返回;
我不知道您现在是否已将其排序,但您可以尝试类似的方法。这将使用查询字符串作为url的一部分,而不是使用POST
$key='AIzaSyD3tAJwB463-PPAQVS7PCMQWKKQNKI0KK';
$query='Forfar';
$location='52,-2.5';
$cacert='c:/wwwroot/cacert.pem';
$format='xml';
$options=array(
'url'=>'https://maps.googleapis.com/maps/api/place/textsearch/“.$格式。”?”,
'query'=>$query,
“位置”=>$location,
“半径”=>“50”,
“key”=>$key
);
$url=urldecode(数组移位($options)。http构建查询($options));
$ch=curl_init();
curl_setopt($ch,CURLOPT_URL,$URL);
curl_setopt($ch,CURLINFO_HEADER_OUT,false);
curl_setopt($ch,CURLOPT_RETURNTRANSFER,true);
curl_setopt($ch,CURLOPT_CAINFO,$cacert);
curl_setopt($ch,CURLOPT_SSL_VERIFYPEER,false);
curl_setopt($ch,CURLOPT_SSL_VERIFYHOST,2);
$data=curl\u exec($ch);
$info=curl\u getinfo($ch);
卷曲关闭($ch);
回显“”,打印($data,1),打印($info,1),“”;
这就产生了
好啊
福法尔
地点
政治的
英国福法尔DD8
56.6435580
-2.8890620
56.6225256
-2.9239470
56.6601780
-2.8580524
https://maps.gstatic.com/mapfiles/place_api/icons/geocode-71.png
CMRBAAACJWLAMU8K-MwG-DMF6KHKMBG5MS7CHJ6ZYH4G2PZLOTG93VBVL8AAAA3XFC2SE7GNFFBR48AUYAYKQITR2JFSRUKR04RG0-LUAYB1HM97OTSF6YCDQMZVD3Z8E0Q14EHA6M7Z1HYLU rXB3K3-XGHQE0BXNRMWATF8WYDQLS16RG
7A7C726F4D8B907B1BCD3503C4348C6965916D9
CmRaAAAABNJLUk7ET6Wa4JXEh9OSwj1s3dvIr25twTy Yk7ey5n2LxGmVm和EBTTBJ2E6ZRTHMA4IJ7VYLYP6XMHR6F9CFF0FX9XQQ\u0OZGFNO\uVxUSWDMBLC-q4-02NTAHMEHDAUJTLHPMK6RVKLTH68ID2GHTCSQMYDQ3QY58O5QJOQWLRCITG
4912
1920
ChIJW5AkiE1ghkgRfVEeH582Uzg
排列
(
[网址]=>https://maps.googleapis.com/maps/api/place/textsearch/xml?query=Forfar&location=52,-2.5&半径=50&键=AIzaSyD3tAJwB463-PPAQVS7PCMQWKKQNKI0KK
[content\u type]=>application/xml;字符集=UTF-8
[http_代码]=>200
[标题大小]=>394
[请求大小]=>171
[filetime]=>-1
[ssl\u验证\u结果]=>20
[重定向\u计数]=>0
[总时间]=>0.39
[namelookup\u time]=>0
[连接时间]=>0.047
[预传输时间]=>0.203
[上传大小]=>0
[下载大小]=>1410
[速度下载]=>3615
[速度上传]=>0
[下载内容长度]=>-1
[上传内容长度]=>0
[开始传输时间]=>0.39
[重定向时间]=>0
[certinfo]=>数组()
)
不要使用POST请求,而应尝试使用urlfacepalm的querystring部分中的参数作为GET请求!太尴尬了!是的-get请求是到这里的方法。我认为谷歌只是忽略了任何发布的内容。。。。
<?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;
$key='AIzaSyD3tAJwB463-PpaqVS7pcMqWkkqnki0Kgk';
$query='Forfar';
$location='52,-2.5';
$cacert='c:/wwwroot/cacert.pem';
$format='xml';
$options = array(
'url' => 'https://maps.googleapis.com/maps/api/place/textsearch/'.$format.'?',
'query' => $query,
'location' => $location,
'radius' => '50',
'key' => $key
);
$url = urldecode( array_shift( $options ) . http_build_query( $options ) );
$ch = curl_init();
curl_setopt( $ch, CURLOPT_URL, $url );
curl_setopt( $ch, CURLINFO_HEADER_OUT, false );
curl_setopt( $ch, CURLOPT_RETURNTRANSFER, true );
curl_setopt( $ch, CURLOPT_CAINFO, $cacert );
curl_setopt( $ch, CURLOPT_SSL_VERIFYPEER, false );
curl_setopt( $ch, CURLOPT_SSL_VERIFYHOST, 2 );
$data = curl_exec( $ch );
$info = curl_getinfo( $ch );
curl_close( $ch );
echo '<textarea cols=100 rows=20>',print_r($data,1),print_r($info,1),'</textarea>';
<?xml version="1.0" encoding="UTF-8"?>
<PlaceSearchResponse>
<status>OK</status>
<result>
<name>Forfar</name>
<type>locality</type>
<type>political</type>
<formatted_address>Forfar DD8, UK</formatted_address>
<geometry>
<location>
<lat>56.6435580</lat>
<lng>-2.8890620</lng>
</location>
<viewport>
<southwest>
<lat>56.6225256</lat>
<lng>-2.9239470</lng>
</southwest>
<northeast>
<lat>56.6601780</lat>
<lng>-2.8580524</lng>
</northeast>
</viewport>
</geometry>
<icon>https://maps.gstatic.com/mapfiles/place_api/icons/geocode-71.png</icon>
<reference>CmRbAAAACjwLAMU8k-MwG-Dmf6KhKmBG5Ms7CHJ6TZyH4g2pZlotgC93vbvl8aAAa3Xfc2sE7GnFFbr48auYaykQItR2jfSRUkr04rG0-luAyb1hm97OtSf6yCDqMzvd3z8e0q14EhA6m7z1cLhYlNt_rXB3K3-xGhQQe0bxNrmWATf8wqWydqlsp16Lrg</reference>
<id>7a7c726f4d8b907b1bcd39503c4348c6965916d9</id>
<photo>
<photo_reference>CmRaAAAABNJLUk7ET6Wa4JXEh9OSwj1s3dvIr25twTy_Yk7ey5n2LxGmVm_anlebTTbJ2e6ZTrtHMa4ij7vYLypy6XMhr6F9CFF0fx9XqQ_0ozgFno_VXuSWDmblc-q4-02nTaHmEhDAuJtLHpMk6RvkltH68iD2GhTCSqmyDYq3qY58O5qJoqJwlrCITg</photo_reference>
<width>4912</width>
<height>1920</height>
<html_attribution><a href="https://maps.google.com/maps/contrib/109648577636572315039/photos">L Hill</a></html_attribution>
</photo>
<place_id>ChIJW5AkiE1ghkgRfVEeH582Uzg</place_id>
</result>
</PlaceSearchResponse>
Array
(
[url] => https://maps.googleapis.com/maps/api/place/textsearch/xml?query=Forfar&location=52,-2.5&radius=50&key=AIzaSyD3tAJwB463-PpaqVS7pcMqWkkqnki0Kgk
[content_type] => application/xml; charset=UTF-8
[http_code] => 200
[header_size] => 394
[request_size] => 171
[filetime] => -1
[ssl_verify_result] => 20
[redirect_count] => 0
[total_time] => 0.39
[namelookup_time] => 0
[connect_time] => 0.047
[pretransfer_time] => 0.203
[size_upload] => 0
[size_download] => 1410
[speed_download] => 3615
[speed_upload] => 0
[download_content_length] => -1
[upload_content_length] => 0
[starttransfer_time] => 0.39
[redirect_time] => 0
[certinfo] => Array()
)