Tenor API的Axios GET请求仅/search可用,/random无法正常工作
解决Axios调用Tenor /random接口失败的问题
可能的原因及对应解决方案
1. TypeScript类型定义与接口实际返回不匹配
Tenor的/random和/search接口返回的数据结构可能存在细微差异,当前的TypeScript类型断言可能导致解析异常。
- 解决方法:先移除泛型约束,直接打印原始返回数据,对比结构差异:
export default async function getPadoru() { try { const res = await axios.get(`https://g.tenor.com/v1/random?q=padoru&key=LIVDSRZULELA&limit=10&media_filter=minimal`); console.log('原始返回数据:', res.data); return res; } catch (err) { console.error('请求失败:', err); } }
根据打印结果调整Result和Results的类型定义,比如部分字段名可能不同(例如media_formats替代media)。
2. 请求头缺失导致被拦截
浏览器会自动携带User-Agent等请求头,而Axios在非浏览器环境(如Node.js)下的默认请求头可能被Tenor的反爬策略拦截。
- 解决方法:手动添加浏览器风格的
User-Agent头:
export default async function getPadoru() { try { const res = await axios.get(`https://g.tenor.com/v1/random?q=padoru&key=LIVDSRZULELA&limit=10&media_filter=minimal`, { 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' } }); console.log(res.data); return res; } catch (err) { console.error('请求错误:', err.response?.data || err.message); } }
3. 请求参数不合法
Tenor的/random接口对limit参数的限制可能与/search不同,比如部分版本的/random接口limit最大值为5,超出范围会返回错误。
- 解决方法:尝试将
limit改为1或5,测试请求是否正常:
`https://g.tenor.com/v1/random?q=padoru&key=LIVDSRZULELA&limit=5&media_filter=minimal`
4. 捕获详细错误信息
当前代码未处理异常,无法看到具体错误原因。添加try/catch块捕获并打印错误详情,比如HTTP状态码、错误响应内容:
export default async function getPadoru() { try { const res = await axios.get<Results>(`https://g.tenor.com/v1/random?q=padoru&key=LIVDSRZULELA&limit=10&media_filter=minimal`); console.log(res); return res; } catch (error) { if (axios.isAxiosError(error)) { console.error('HTTP错误状态:', error.response?.status); console.error('错误响应内容:', error.response?.data); } else { console.error('未知错误:', error); } throw error; } }
内容的提问来源于stack exchange,提问作者Patato
相关产品推荐
相关产品推荐

