使用Python调用Bitly API缩短URL时遭遇403 Forbidden错误求助
你的Bitly API 403 Forbidden错误分析与修复方案
看起来你遇到的403问题主要来自几个关键的配置和代码细节,咱们一步步拆解解决:
1. group_guid 用错了——它不是用户名!
Bitly v4 API要求的group_guid是你账户下对应群组的唯一标识符,绝对不是你的用户名。你可以通过这条curl命令获取自己的群组GUID:
curl -H "Authorization: Bearer YOUR_API_TOKEN" https://api-ssl.bitly.com/v4/groups
返回的JSON数据里会有一个guid字段,把这个值替换掉你当前用的os.environ["BITLY_USER"]就行。
2. 请求没告诉服务器你发的是JSON
你的代码用json.dumps生成了JSON格式的payload,但直接传给requests.post的data参数时,没有设置Content-Type: application/json请求头。Bitly API会因为无法识别请求格式而拒绝访问。
有两种简单的修复方式:
- 更省心的方式:用
requests.post的json参数替代data,requests会自动帮你设置正确的请求头,还不用手动dumps:response = requests.post( "https://api-ssl.bitly.com/v4/shorten", json={'long_url': u[1], "domain": "bit.ly", "group_guid": group_guid }, headers={'Authorization': f"Bearer {api_key}" } ) - 手动加头的方式:如果坚持用
data参数,记得补上Content-Type:response = requests.post( "https://api-ssl.bitly.com/v4/shorten", data=payload, headers={ 'Authorization': f"Bearer {api_key}", 'Content-Type': 'application/json' } )
3. 确认你的API令牌有权限
你提到用curl获取的API令牌,要确保这个令牌属于有权限操作对应群组的账户,且令牌拥有缩短链接的权限。可以用这条命令验证令牌有效性:
curl -H "Authorization: Bearer YOUR_API_TOKEN" https://api-ssl.bitly.com/v4/user
如果返回正常的用户信息,说明令牌是没问题的。
修复后的完整代码参考
import re import sys import glob import json import requests import os from pprint import pprint if len(sys.argv) > 1: urls_json = sys.argv[1] else: urls_json = "enlaces.json" with open( urls_json ) as data_file: urls = json.load(data_file) api_key = os.environ["BITLY_TOKEN"] # 替换成你通过/groups接口拿到的真实group_guid group_guid = os.environ["BITLY_GROUP_GUID"] shortened_links = [] for u in urls: # 直接用json参数自动处理序列化和请求头 payload = {'long_url': u[1], "domain": "bit.ly", "group_guid": group_guid } response = requests.post( "https://api-ssl.bitly.com/v4/shorten", json=payload, headers={'Authorization': f"Bearer {api_key}" } ) # 打印响应JSON比raw对象更方便调试 response_data = response.json() pprint(response_data) if 'link' in response_data: shortened_links.append(response_data['link']) # 可选:把缩短后的链接保存到文件 with open("shortened_links.json", "w") as f: json.dump(shortened_links, f, indent=2)
额外调试小技巧
如果还是遇到403,试试这些:
- 检查你的账户是否还有创建短链接的额度(免费账户有数量限制)
- 确认你要缩短的
long_url是有效的、可正常访问的链接,Bitly会拒绝无效或违规的URL - 一定要看
response.json()返回的具体错误信息,API会告诉你到底是权限、参数还是格式问题,比看response.raw有用多了
内容的提问来源于stack exchange,提问作者jjmerelo
相关产品推荐
相关产品推荐

