React Native中Fetch带Headers请求报TypeError: Network request failed
解决方案
1. 修正请求头字段类型
React Native 的 Fetch API 要求请求头所有值必须为字符串类型,你当前的 x-rpc-client_type 是数字 5,这很可能是触发报错的原因。将其改为字符串:
let header = { Cookie: 'account_id_v2=xxxx; account_mid_v2=0xpvondsl7_mhy; cookie_token_v2=xxxxxxxx; ltmid_v2=xxxxx; ltoken_v2=xxxxxxxxxxx-xxxxxxxxx-xxx; ltuid_v2=xxxx; aliyungf_tc=xxxxxxxxxxx', DS: '1674207860,753043,e07214c71a00375565a2cc6714e9a27b', Referer: 'https://webstatic.mihoyo.com', 'User-Agent': 'Mozilla/5.0 (Linux; Android 12; 61249) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/99.0.4844.73 Mobile Safari/537.36 miHoYoBBS/2.37.1', 'x-rpc-app_version': '2.37.1', 'x-rpc-client_type': '5', // 改为字符串类型 }
同时,请求体建议用 JSON.stringify 生成,避免手动转义引号的潜在问题:
body: JSON.stringify({role_id: "208574599", server: "cn_gf01"}),
2. 使用 Headers 对象构建请求头
直接传递普通对象作为请求头可能存在兼容性问题,改用原生 Headers 对象构建:
const headers = new Headers(); headers.append('Cookie', 'account_id_v2=xxxx; account_mid_v2=0xpvondsl7_mhy; cookie_token_v2=xxxxxxxx; ltmid_v2=xxxxx; ltoken_v2=xxxxxxxxxxx-xxxxxxxxx-xxx; ltuid_v2=xxxx; aliyungf_tc=xxxxxxxxxxx'); headers.append('DS', '1674207860,753043,e07214c71a00375565a2cc6714e9a27b'); headers.append('Referer', 'https://webstatic.mihoyo.com'); headers.append('User-Agent', 'Mozilla/5.0 (Linux; Android 12; 61249) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/99.0.4844.73 Mobile Safari/537.36 miHoYoBBS/2.37.1'); headers.append('x-rpc-app_version', '2.37.1'); headers.append('x-rpc-client_type', '5'); // 发起请求时传入 headers fetch('https://api-takumi.mihoyo.com/game_record/app/genshin/api/index', { method: 'POST', body: JSON.stringify({role_id: "208574599", server: "cn_gf01"}), headers })
3. 逐字段排查请求头
如果上述方法无效,尝试逐个添加请求头字段测试,定位具体触发报错的字段。比如先只保留 User-Agent 测试请求是否正常,再逐步添加其他字段,排查是否是某一个字段(如 DS 格式、Cookie 特殊内容)导致的问题。
4. 替换为 Axios 发起请求
React Native 的 Fetch 对部分请求头的处理存在兼容性问题,改用 Axios 可规避这类问题:
先安装 Axios:
npm install axios
然后修改请求代码:
import axios from 'axios'; const headers = { Cookie: 'account_id_v2=xxxx; account_mid_v2=0xpvondsl7_mhy; cookie_token_v2=xxxxxxxx; ltmid_v2=xxxxx; ltoken_v2=xxxxxxxxxxx-xxxxxxxxx-xxx; ltuid_v2=xxxx; aliyungf_tc=xxxxxxxxxxx', DS: '1674207860,753043,e07214c71a00375565a2cc6714e9a27b', Referer: 'https://webstatic.mihoyo.com', 'User-Agent': 'Mozilla/5.0 (Linux; Android 12; 61249) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/99.0.4844.73 Mobile Safari/537.36 miHoYoBBS/2.37.1', 'x-rpc-app_version': '2.37.1', 'x-rpc-client_type': '5', }; axios.post( 'https://api-takumi.mihoyo.com/game_record/app/genshin/api/index', { role_id: "208574599", server: "cn_gf01" }, { headers } ) .then(response => { console.log(response.data); CallBack(response.data); }) .catch(error => { console.log(error); });
5. 检查 Android 网络配置
如果是 Android 平台:
- 确保
AndroidManifest.xml中添加了网络权限:<uses-permission android:name="android.permission.INTERNET" /> - 若目标 API 级别 >= 28,确认
AndroidManifest.xml的application标签中没有限制 HTTPS 请求的配置(你的请求是 HTTPS,一般无需额外配置,但可检查networkSecurityConfig)。
内容的提问来源于stack exchange,提问作者FengZi
相关产品推荐
相关产品推荐

