Python中的Google Map API签名生成

Python中的Google Map API签名生成,python,google-maps,Python,Google Maps,我基本上在做以下工作: 在MacBook上的Python2.7.3和Windows 64位服务器环境下的Python2.7.5中,我无法复制正确的签名,而我完全遵循了原始示例。我做了一个这样的函数: import sys import hashlib import urllib import hmac import base64 import urlparse def process_url(input_url, private_key): print("URL To Sign: "

我基本上在做以下工作:

在MacBook上的Python2.7.3和Windows 64位服务器环境下的Python2.7.5中,我无法复制正确的签名,而我完全遵循了原始示例。我做了一个这样的函数:

import sys
import hashlib
import urllib
import hmac
import base64
import urlparse

def process_url(input_url, private_key):
    print("URL To Sign: " + input_url)
    url = urlparse.urlparse(input_url)
    print("Private Key: " + private_key)
    url_to_sign = url.path + "?" + url.query
    print("Original Path + Query: " + url_to_sign)
    decoded_key = base64.urlsafe_b64decode(private_key)
    signature = hmac.new(decoded_key, url_to_sign, hashlib.sha1)
    encodedSignature = base64.urlsafe_b64encode(signature.digest())
    print("B64 Signature: " + encodedSignature)
    original_url = url.scheme + "://" + url.netloc + url.path + "?" + url.query
    full_url = original_url + "&signature=" + encodedSignature
    print "Full URL: " + full_url
    return full_url
根据谷歌的说法,现在应该给出以下信息:

  • URL:{clientID}
  • 私钥:vnixe0xsrmjlyv-12Nj_BvUPaw=
  • 要签名的URL部分:/maps/api/geocode/json?address=New+York&sensor=false&client={clientID}
  • 签字:KRU1TVQM7UR0I8I7K3HUIW3MSA=
  • 完整签名URL:{clientID}&signature=KrU1TzVQM7Ur0i8i7K3huiw3MsA=
但是,当我执行以下操作时:

process_url('http://maps.googleapis.com/maps/api/geocode/json?address=New+York&sensor=false&client={clientID}', 'vNIXE0xscrmjlyV-12Nj_BvUPaw=')
我得到:

  • 要签名的URL:{clientID}
  • 私钥:vnixe0xsrmjlyv-12Nj_BvUPaw=
  • 原始路径+查询:/maps/api/geocode/json?address=New+York&sensor=false&client={clientID}
  • B64签名:WLCBIKR9WMB9UPHXWMAGCJG2m4=
  • 完整URL:{clientID}&signature=WLCBIKR9WMB9UPHXWMAGCJG2m4=
所以我得到了“WlcBIkr9WMB9uPhXWmAGcjG_2M4=”而不是“KrU1TzVQM7Ur0i8i7K3huiw3MsA=”。我发誓这曾经是有效的,但我在不同的系统中得到了一致的新W值


有人知道我做错了什么吗?是页面不正确还是我做了一些基本的不正确的事情???

您没有做错任何事情,您正在为不同的数据签名,从而获得不同的签名

在谷歌的例子中,如果你复制并粘贴,你会注意到大括号在剪贴板中被省略了;因此,它对以下URL进行签名:

http://maps.googleapis.com/maps/api/geocode/json?address=New+York&sensor=false&client=clientID
但当您尝试时,您会逐字复制它,包括花括号:

http://maps.googleapis.com/maps/api/geocode/json?address=New+York&sensor=false&client={clientID}

因此,请庆幸,您的代码是正确的,唯一的问题是示例数据

您没有做错任何事情,您正在为不同的数据签名,从而获得不同的签名

在谷歌的例子中,如果你复制并粘贴,你会注意到大括号在剪贴板中被省略了;因此,它对以下URL进行签名:

http://maps.googleapis.com/maps/api/geocode/json?address=New+York&sensor=false&client=clientID
但当您尝试时,您会逐字复制它,包括花括号:

http://maps.googleapis.com/maps/api/geocode/json?address=New+York&sensor=false&client={clientID}

因此,请庆幸,您的代码是正确的,唯一的问题是示例数据

我现在有这个很棒的尤里卡/阿格组合,哈哈,非常感谢!:)我现在有这个很棒的尤里卡/阿格组合,哈哈,非常感谢!:)