我在将新的业务凭证合并到Python请求模块时遇到了问题,我以前一直使用免费用户API键来创建请求。你知道吗
我一直遵循Google给出的身份验证指导-(1)将基本URL解析为其路径和查询部分(2)将私钥解码为二进制(3)使用此私钥和使用HMAC SHA1的URL编码字符串创建签名(4)使用base64编码二进制签名
我的代码如下-
import requests
import csv
import json
import urlparse
import hashlib
import base64
import hmac
from pprint import pprint
url_raw = 'https://maps.googleapis.com/maps/api/directions/json&client=REMOVED'
Private_Key = 'REMOVED'
with open('./Origins.csv', 'rU') as csvfile:
reader = csv.DictReader(csvfile)
origincoords = ['{Y},{X}'.format(**row) for row in reader]
with open('./Destinations.csv', 'rU') as csvfile:
reader = csv.DictReader(csvfile)
destinationcoords = ['{Y},{X}'.format(**row) for row in reader]
results=[]
url = urlparse.urlparse('url_raw')
url_to_sign = url.path + '?' + url.query
decodedKey = base64.urlsafe_b64decode(Private_Key)
signature = hmac.new(decodedKey, url_to_sign, hashlib.sha1)
encodedSignature = base64.urlsafe_b64encode(signature.digest())
originalUrl = url.scheme + "://" + url.netloc + url.path + '?' + url.query
Full_URL = originalUrl + "&signature=" + encodedSignature
for i in range(0,(len(origincoords))):
params ={'origin': origincoords[i],
'destination': destinationcoords[i],
'encodedSignature': encodedSignature}
directions = requests.get(Full_URL, params=params).json()
results.append(directions)
在这一点上,我解析了我的研究相关信息的结果。感谢@fredtantini之前的帮助。你知道吗
我当前收到的错误消息与请求.异常,说明我没有使用有效的架构。但是,在我的代码中,我包含了url.scheme方案在originalUrl变量中,该变量构成请求生成中使用的完整URL的一部分。你知道吗
您没有解析
url_raw
的值。您正在用内容'url_raw'
分析字符串:删除
url_raw
周围的引号,您希望解析与变量关联的值,而不是一个恰好包含与变量名相等的文本的字符串。你知道吗演示:
注意在第一种情况下
scheme
是一个空字符串,而在解析实际URL时,scheme被设置为'https'
。你知道吗接下来,您需要为查询字符串生成整个的签名,而不仅仅是路径加上客户机id
通过创建一个准备的请求,在之后附加查询参数,您可以实现这一点:
这将使用^{} object 为我们生成URL,因此我们可以再次解析它以便于签名。然后^{} method 允许我们将签名添加到该对象的URL,之后我们可以轻松地将其与session对象一起发送。你知道吗
相关问题 更多 >
编程相关推荐