TextBlob调用translate翻译文本时报HTTP 400 Bad Request错误如何解决
问题原因
TextBlob的translate()方法底层依赖谷歌已经废弃的公开无密钥翻译接口,2023年之后谷歌完全下线了该接口的无认证调用支持,所以所有直接调用TextBlob原生翻译方法的请求都会返回HTTP Error 400: Bad request错误,和你的VSCode运行环境、代码本身没有关联。
适配证书限制场景的解决方案
- 方案1:修改TextBlob底层翻译调用逻辑,适配谷歌云翻译新版API
如果你所在工作场景允许申请谷歌云服务密钥,可以优先选择该方案,原有业务代码不需要改动:- 进入Python环境依赖安装目录,找到
textblob模块下的translate.py文件 - 将原有旧版谷歌翻译请求地址、参数逻辑替换为新版谷歌云翻译API的调用逻辑,在请求参数中加入你申请到的有效API密钥
- 工作场景如果有自定义证书校验要求,可在请求方法中新增
verify参数指定内部证书路径即可
- 进入Python环境依赖安装目录,找到
- 方案2:调用国内翻译厂商开放API自行封装翻译方法
如果无法申请谷歌云相关权限,可申请百度、有道等国内翻译厂商的开放API服务,自行封装和原有TextBlob翻译方法调用逻辑一致的工具函数,示例代码如下:import requests import hashlib import random # 自行申请对应翻译厂商的APPID和密钥后填入 APP_ID = "你的应用ID" APP_SECRET = "你的应用密钥" # 如需配置内部证书,在此处指定证书文件路径 CERT_PATH = "你的内部证书路径" def text_translate(content, target_lang): salt = str(random.randint(32768, 65536)) sign_content = APP_ID + content + salt + APP_SECRET sign = hashlib.md5(sign_content.encode("utf-8")).hexdigest() req_params = { "q": content, "from": "auto", "to": target_lang, "appid": APP_ID, "salt": salt, "sign": sign } resp = requests.get( url="对应翻译厂商的API请求地址", params=req_params, verify=CERT_PATH ) resp_data = resp.json() return " ".join([item["dst"] for item in resp_data["trans_result"]]) # 调用方式和原有TextBlob方法基本一致 res = text_translate("The weather is beautiful today. Tomorrow looks like bad weather.", "spa") print(res) - 方案3:使用离线翻译模型本地运行
如果工作场景完全不允许调用公网API,可使用transformers等开源库加载本地离线翻译模型,完全不需要网络请求,自然不会触发证书限制问题。
内容的提问来源于stack exchange,提问作者Roney Wesley Galan
相关产品推荐
相关产品推荐

