谷歌地图API不与服务器端代码工作,但工作的客户端


Google Maps API not working with server side code but works client side

我正在生成一个URL,如:

http://maps.googleapis.com/maps/api/geocode/json?address=143 Mendon % % 2 c + +黑石+街马2 c + + - + 01756和关键 =***********

如果我在浏览器中打开这个,我成功地得到了一个结果。但是,如果我使用curl使用相同的URL,我得到:

错误:无法连接到主机

这是我的PHP代码
$url = "http://maps.googleapis.com/maps/api/geocode/json?address=".urlencode('143 Blackstone Street, Mendon, MA - 01756')."&key=***********";    
$ch = curl_init();
$options = array(
    CURLOPT_URL => $url,
    CURLOPT_RETURNTRANSFER => 1,
    CURLOPT_TIMEOUT => 100,            
    CURLOPT_SSL_VERIFYHOST => 0,
    CURLOPT_SSL_VERIFYPEER => false
);
curl_setopt_array($ch, $options);
$response = curl_exec($ch);
if(curl_error($ch))
{
    echo 'error:' . curl_error($ch);
}
curl_close ($ch);
print_r($response);

更新

在使用Google api时,我遇到了一个叫做server keybrowser key的术语。然而,在API管理器中,我似乎看不到在哪里设置或更改API类型。

您正在对url中需要以纯文本形式出现的部分进行unlencoding。

只对参数进行urlencode

<?php
$address = urlencode("143 Blackstone Street, Mendon, MA - 01756");
$key = urlencode("************");
$ch = curl_init();
$options = array(
    CURLOPT_URL => "http://maps.googleapis.com/maps/api/geocode/json?address=".$address."&key=".$key,
    CURLOPT_RETURNTRANSFER => 1,
    CURLOPT_TIMEOUT => 100,
    CURLOPT_SSL_VERIFYHOST => 0,
    CURLOPT_SSL_VERIFYPEER => false
);
curl_setopt_array($ch, $options);
$response = curl_exec($ch);
if(curl_error($ch))
{
    echo 'error:' . curl_error($ch);
}
curl_close ($ch);
print_r($response);

如果你从curl中遇到"无法连接到主机"的错误消息,听起来问题可能不在谷歌地图API端,而是在代理/网络端。无论键类型或url参数如何,都应该始终可以连接到maps.googleapis.com。

我会看看这里建议的步骤:如何解决cURL错误(7):could 't connect to host?