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

调用Steam库存API持续返回429错误的问题求助

问题分析与解决方案

核心问题拆解

你遇到的429错误是Steam反爬机制拦截了请求,原因包括:

  • 请求缺少浏览器环境的关键请求头(如User-Agent),Steam识别为非合法浏览器请求并限制访问
  • 自定义Hook useAxios 写法不规范,未返回Promise,导致组件内的异步逻辑完全失效
  • 服务器端Axios请求的withCredentials配置位置错误,无法正确传递必要的会话信息

分步修复

1. 修正useAxios.tsx的写法(若坚持前端直接请求)

自定义Hook需返回Promise,同时添加浏览器风格请求头模拟正常访问:

import axios from 'axios'

const useAxios = (id: string) => {
  // 返回Promise以支持组件内的then/catch链式调用
  return axios.get(`https://steamcommunity.com/inventory/${id}/730/2?l=english&count=2000`, {
    headers: {
      // 模拟Chrome浏览器的User-Agent
      'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/118.0.0.0 Safari/537.36'
    }
  })
}

export default useAxios;

2. 修复服务器端server.ts的请求配置

服务器端请求必须模拟浏览器请求头,同时修正withCredentials的配置位置(它是Axios顶级配置项,不在headers内):

import { Request, Response } from "express";
import axios from 'axios';
import cors from 'cors';
import express from 'express';

const app = express()
app.use(cors())
const PORT = 3001;

app.listen(PORT, () => {
  console.log(`Server listening on ${PORT}`);

  app.get('/api/getGameInventory/', async (req: Request, res: Response) => {
    try {
      const result = await axios.get(`https://steamcommunity.com/inventory/${req.query['id']}/730/2?l=english&count=2000`, {
        withCredentials: true,
        headers: {
          'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/118.0.0.0 Safari/537.36',
          // 可选:添加Referer增强请求合法性
          'Referer': `https://steamcommunity.com/profiles/${req.query['id']}/`
        }
      });
      res.send(result.data);
    } catch (err: any) {
      const status = err.response?.status || 500;
      res.status(status).send({ message: err.message });
    }
  })
});

3. 调整前端请求逻辑(推荐使用服务器代理)

直接从前端请求Steam接口易触发跨域和反爬,建议改为调用自身服务器的代理接口:
修改InputField.tsx的handleSubmit方法:

import axios from 'axios';

// ...其他代码保持不变

const handleSubmit = async (event: any) => {
  event.preventDefault();

  if (!accountId) {
    setError('NO_INPUT');
    return;
  }

  setIsLoading(true);
  
  try {
    // 调用自己的服务器代理接口
    const result = await axios.get(`/api/getGameInventory/?id=${accountId}`);
    console.log(result);
    setIsLoading(false);
  } catch (err: any) {
    console.log(err);
    setErrorStatus(err.response?.status || 0);
    setError(err.response?.data?.message || err.code);
    setIsLoading(false);
  }
}

同时移除对自定义useAxios的依赖。

额外注意事项

  • Steam反爬会根据IP频率限制,测试时避免短时间内重复请求,必要时更换IP或延长间隔
  • 若请求私人库存,需确保用户已登录Steam,且服务器端请求携带有效登录Cookie
  • 严格遵守Steam服务条款,避免过度请求导致IP被永久封禁

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.23 05:10:27