使用Python调用Google街景API时遭遇HTTP 400错误请求问题
排查并解决Google Street View API的HTTP 400错误
HTTP 400错误本质是请求格式不符合API的要求,我帮你梳理几个核心问题点,对应修改代码就能解决:
1. 替换URL中的HTML转义字符&为&
你代码里的base和key部分用了&——这是HTML里的转义字符,但直接放在URL里会被API识别成无效的参数分隔符,导致参数解析失败。把所有&换成普通的&:
base = "https://maps.googleapis.com/maps/api/streetview?size=400x400&location=" key = "&key=" + "your_valid_api_key" # 这里直接用&,不要用&
2. 对地址参数做URL编码
如果你的测试地址(比如Tests里的内容)包含空格、逗号、特殊符号,直接拼接到URL里会破坏请求格式。必须用urllib.parse.quote()对地址进行编码,让它符合URL规范:
from urllib.parse import quote # 先导入这个模块 def GetStreet(Add,SaveLoc): base = "https://maps.googleapis.com/maps/api/streetview?size=400x400&location=" encoded_add = quote(Add) # 对地址进行URL编码 MyUrl = base + encoded_add + key # 其他代码...
3. 确保API Key的有效性和权限
- 去Google Cloud控制台确认你的API Key已经启用了Street View Static API,没启用的话API肯定会报错;
- 检查Key本身有没有输错,有没有多余的空格或特殊字符;
- 之前无Key请求被封禁,换用有效Key后要注意请求频率不要超过API配额。
4. 优化文件名避免后续路径错误(可选但实用)
直接用原始地址当文件名,可能会包含系统不允许的字符(比如/、:),可以简单处理一下:
safe_filename = Add.replace(" ", "_").replace(",", "-").replace("/", "-") + ".jpg"
修改后的完整代码示例
import urllib.request import os from urllib.parse import quote myloc = r"C:\Users\blah\blah" # 替换为你的保存路径 key = "&key=" + "your_valid_api_key" # 替换为你的有效API Key def GetStreet(Add, SaveLoc): base = "https://maps.googleapis.com/maps/api/streetview?size=400x400&location=" encoded_add = quote(Add) MyUrl = base + encoded_add + key # 处理文件名,避免特殊字符导致保存失败 safe_filename = Add.replace(" ", "_").replace(",", "-").replace("/", "-") + ".jpg" urllib.request.urlretrieve(MyUrl, os.path.join(SaveLoc, safe_filename)) # 测试用例 Tests = ["457 West 14th Street, New York, NY"] for addr in Tests: GetStreet(addr, myloc)
按以上步骤修改后,应该就能解决HTTP 400的问题了。如果还是报错,可以加个try-except捕获错误并打印API返回的具体内容,能更精准定位问题。
内容的提问来源于stack exchange,提问作者Maverick
相关产品推荐
相关产品推荐

