1

最近,我开始遇到使用地址的 Google 地图地理编码服务的问题。

发送 LatLng 请求(如下)时,请求成功完成,提供所需的 JSON,但是在发送地址时(使用相同的签名代码和签名过程)我收到403错误消息:

无法验证请求。

提供的“签名”对于提供的客户端 ID 无效。了解更多:https ://developers.google.com/maps/documentation/business/webservices/auth

我玩过httpvs https,不同类型的 URL 编码等,但似乎无法让它工作。

有人有什么想法吗?

为了完整起见,我在下面包含了我的签名代码:

class GoogleGeocoder(Geocoder):

    url = 'https://maps.googleapis.com/maps/api/geocode/json'

    def build_params(self):
        if self.lon and self.lat:
            self.get_params = {
                'latlng': '{lat},{lon}'.format(
                    lat=self.lat,
                    lon=self.lon
                )
            }
        elif self.address:
            self.get_params = {
                'address': self.address
            }
        else:
            raise Exception("Must provide either an address or (lon, lat)")
        self.get_params['sensor'] = 'true'
        self.get_params['client'] = GOOGLE_CLIENT_STRING

        req = requests.Request('GET', self.url, params=self.get_params)
        r = req.prepare()
        url_for_signing = r.path_url
        decodedKey = base64.urlsafe_b64decode(GOOGLE_SIGNING_KEY)
        signature = hmac.new(decodedKey, url_for_signing, hashlib.sha1)
        encodedSignature = base64.urlsafe_b64encode(signature.digest())
        self.get_params['signature'] = encodedSignature
        return self
4

0 回答 0