【问题标题】:file get content google geocode not working文件获取内容谷歌地理编码不起作用
【发布时间】:2021-03-26 13:56:18
【问题描述】:

当我尝试执行下面的代码时,它不起作用。

        $json = file_get_contents('https://maps.google.com/maps/api/geocode/json?address=R%20GRANJAO,%2021&sensor=false&key=MYAPIHERE');
        var_dump($json);

上面的代码返回“ZERO_RESULTS”。

但是如果我手动访问链接,它会返回内容。

下面的例子:

当然,我使用的是有效的 API,因为大多数地址都有效,但也有少数,就像这个例子一样,没有。

我也尝试使用 urlencode(),但这里似乎不是问题。

【问题讨论】:

  • 尝试使用 curl 进行此操作,将 Useragent 设置为与您的浏览器相同。
  • 我已经尝试过 curl,但没有成功,然后我设法解决它在标题上添加 'accept-language'
  • 服务器日志说明了为什么它们返回不同的东西?也许是 Cookie 或缓存的凭据?还是重定向?
  • 我没有在服务器日志上做任何努力,因为API返回了一些信息,'ZERO_RESULTS'......好像她没有返回任何东西给我,这可能意味着地址不存在,但是由于它是手动工作的,我知道退货中的某些东西是错误的

标签: php json google-geocoder


【解决方案1】:

我看到有必要添加一个标题设置'accept-language'。

        $url = "https://maps.google.com/maps/api/geocode/json?address=".urlencode($address)."&sensor=false&key=$apiKey";
        $header = array('Accept-Language: pt-BR,pt;q=0.8,en-US;q=0.5,en;q=0.3');
        $curl = curl_init();
        curl_setopt($curl, CURLOPT_URL, $url);
        curl_setopt($curl, CURLOPT_HTTPHEADER, $header);
        curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
        $json = curl_exec($curl);
        $err = curl_error($curl);
        curl_close($curl);

        $response = json_decode($json, true);

这解决了问题!

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-06-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多