You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

调用Google Safe Browsing API遇403 Forbidden错误,求解决方案

解决Google Safe Browsing API 403 Forbidden错误

下面是针对该问题的具体排查和修复步骤:

1. 修正请求URL的格式

你代码中传入的example1.com这类地址缺少HTTP/HTTPS协议,而Google Safe Browsing API要求完整的带协议URL。格式不规范会导致API无法正常解析请求,进而触发权限验证失败。

修改main函数中的URL列表:

urls = ['https://example1.com', 'https://example2.com']

2. 固定Client ID,避免频繁生成UUID

每次请求都用uuid.uuid4()生成新的clientId,可能会被Google API判定为异常请求。建议固定一个唯一的客户端标识,比如项目名称或自定义字符串:

def check_urls(urls):
    payload = {
        "client": {
            "clientId": "my-url-safety-checker",  # 替换为你的固定标识
            "clientVersion": "1.1"
        },
        # 其余payload内容保持不变
    }

3. 验证API密钥的权限与配额

即使确认启用了API,仍需检查以下细节:

  • 密钥是否归属正确的Google Cloud项目,且该项目已启用Safe Browsing API。
  • 检查密钥的IP白名单限制:如果设置了IP允许列表,确保运行代码的设备IP在列表内。
  • 检查配额使用情况:Safe Browsing API有免费配额(每日最多10000次请求),配额耗尽也会返回403,可在Google Cloud控制台的API配额页面查看。

4. 优化请求参数传递方式

将API Key通过params参数单独传递,避免URL拼接可能出现的编码问题,同时简化代码:

def check_urls(urls):
    base_url = 'https://safebrowsing.googleapis.com/v4/threatMatches:find'
    params = {'key': API_KEY}
    
    # 直接用json参数传递payload,requests自动处理序列化和Content-Type头
    response = requests.post(base_url, json=payload, params=params)

修复后的完整代码示例

import requests

API_KEY = 'your-api-key-here'

def check_urls(urls):
    base_url = 'https://safebrowsing.googleapis.com/v4/threatMatches:find'
    params = {'key': API_KEY}

    payload = {
        "client": {
            "clientId": "my-url-safety-checker",
            "clientVersion": "1.1"
        },
        "threatInfo": {
            "threatTypes": ["MALWARE", "SOCIAL_ENGINEERING", "UNWANTED_SOFTWARE"],
            "platformTypes": ["ANY_PLATFORM"],
            "threatEntryTypes": ["URL"],
            "threatEntries": [{"url": url} for url in urls]
        }
    }

    try:
        response = requests.post(base_url, json=payload, params=params)
        response.raise_for_status()
        data = response.json()
        return [match["threat"]["url"] for match in data.get("matches", [])]
    except requests.exceptions.RequestException as e:
        print("Error:", e)
        return []

def main():
    urls = ['https://example1.com', 'https://example2.com']
    malicious_urls = check_urls(urls)

    if malicious_urls:
        print("Malicious URLs found:")
        for url in malicious_urls:
            print(url)
    else:
        print("No malicious URLs found.")

if __name__ == "__main__":
    main()

额外排查点

如果以上步骤无效,可尝试:

  • 用Postman直接发送请求测试API密钥有效性,排除代码逻辑问题。
  • 确认Google Cloud账号未被限制访问该API。

内容的提问来源于stack exchange,提问作者nolan

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.18 08:22:49