【问题标题】:Google Maps PHP CURL issue "Your client has issued a malformed or illegal request. That’s all we know."Google Maps PHP CURL 问题“您的客户发出了格式错误或非法的请求。这就是我们所知道的。”
【发布时间】:2017-11-14 06:21:19
【问题描述】:

我有一个使用 CURL 和 Google Maps API 返回地址坐标的函数。

代码如下:

function get_coordinates($address_string) {

    $address = urlencode($address_string);
    $url = "https://maps.googleapis.com/maps/api/geocode/json?address=" . $address . "&key=" . $api_key;

    $ch = curl_init();
    curl_setopt($ch, CURLOPT_URL, $url);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
    curl_setopt($ch, CURLOPT_PROXYPORT, 3128);
    curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 0);
    curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0);
    $response = curl_exec($ch);
    curl_close($ch);
    $response_a = json_decode($response);
    $status = $response_a->status;

    return $response;

}

该代码适用于我和我使用它的 99% 的网络服务器 - 但对于大约 1% 的服务器,Google 会返回错误消息:

Your client has issued a malformed or illegal request. That’s all we know.

我已经检查过,Google API 密钥是正确的,PHP CURL 已启用并且 PHP 版本与它正在使用的 PHP 版本匹配。

谁能想到任何其他可能导致 Google 返回此消息的原因?

【问题讨论】:

  • 对我来说,问题在于添加 CURLOPT_TIMEOUT 值。由于某种原因,添加超时将返回操作错误,而在没有超时值的情况下发出请求,将返回成功的响应。

标签: php google-maps curl google-api


【解决方案1】:

由于您的 $address 变量的地址带有空格,请使用 str_replace 并将空格替换为 + 号。

它会起作用,我遇到了同样的问题并以这种方式修复。

【讨论】:

  • 这也解决了我的问题。因为我的案例起源是硬编码的,城市和国家仍然有空格。虽然我直接在浏览器中使用了相同的空格字符串并且它有效。
【解决方案2】:

该错误是由空格引起的,因此请确保您的 $address_string 没有空格。

【讨论】:

    【解决方案3】:

    我尝试了rescue1155建议的解决方案,但没有奏效。

    urlencode($address)
    

    确实为我工作。

    【讨论】:

      猜你喜欢
      • 2021-12-25
      • 1970-01-01
      • 1970-01-01
      • 2011-12-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-11-01
      • 1970-01-01
      相关资源
      最近更新 更多