为何调用Steam API获取CSGO库存仅5-6次就触发429限流?
解决Steam社区库存接口429限流问题
你触发429的核心原因是:你调用的steamcommunity.com/inventory是Steam网页端的非官方API接口,它的限流规则和Steam Web API公开的10万次/日限制完全无关。
具体原因
- 该接口对单IP的短时间请求频率限制极严,哪怕日调用量远低于10万,短时间内连续请求5-6次就会触发限流。
- 你的请求没有携带浏览器标识头(
User-Agent),被判定为非人工请求,进一步触发了反爬机制。
解决办法
添加浏览器请求头
给requests.get加上模拟浏览器的请求头,避免被识别为爬虫:import requests import json steamIDs = [ 76561198323251063, # Enyém 76561199013264816 # Rolié ] gameID = "730" def jprint(obj): text = json.dumps(obj, sort_keys=True, indent=4) return text # 添加浏览器请求头 headers = { "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/114.0.0.0 Safari/537.36" } response = requests.get(f"http://steamcommunity.com/inventory/{steamIDs[1]}/{gameID}/2", headers=headers) print(response.status_code) with open("data.txt", "w") as f: f.write(jprint(response.json()))添加请求间隔
如果需要批量请求多个用户的库存,在每次请求后加入延时,降低请求频率:import time # 遍历SteamID列表时,每次请求后等待2秒 for steam_id in steamIDs: response = requests.get(f"http://steamcommunity.com/inventory/{steam_id}/{gameID}/2", headers=headers) # 处理响应... time.sleep(2)改用官方Steam Web API接口
官方的IEconItems_730/GetPlayerItems接口限流规则更透明,只要不超过10万次/日的限额就不会轻易触发429。使用前需要先在Steam开发者平台申请API密钥,示例代码:import requests import json API_KEY = "你的Steam API密钥" steamIDs = [ 76561198323251063, # Enyém 76561199013264816 # Rolié ] def jprint(obj): text = json.dumps(obj, sort_keys=True, indent=4) return text response = requests.get(f"https://api.steampowered.com/IEconItems_730/GetPlayerItems/v1/?key={API_KEY}&steamid={steamIDs[1]}") print(response.status_code) with open("data.txt", "w") as f: f.write(jprint(response.json()))
内容的提问来源于stack exchange,提问作者rektdie
相关产品推荐
相关产品推荐

