React Native中Axios请求返回401,但Postman和浏览器可正常访问
React Native中Axios请求API返回401错误(Postman/浏览器可正常访问)
我在React Native应用中调用API时遇到「Request failed with status code 401」错误,请求代码如下:
const fetchData = async () => { try { const response = await axios.get(`${API_URL}/general-setting`, { headers: { 'Accept': 'application/json', } }); const generalSetting = response.data.data.general_setting; const newTheme = { baseColor: `#${generalSetting.base_color}`, secondColor: `#${generalSetting.secondary_color}`, }; setTheme(newTheme); } catch (error) { Alert.alert('Error Fetching Theme', 'Please check your internet connection and try again.'); } };
该API在Postman和浏览器中均可正常获取响应,但多次尝试后仍无法在React Native中正常工作。
排查与解决方案
补全请求头信息
Postman和浏览器会自动携带部分默认请求头(如Cookie、User-Agent、Authorization令牌等),但当前React Native的请求仅设置了Accept头。对比Postman的请求头详情,将缺失的必要认证头(如Authorization: Bearer <token>)或会话相关头(如Cookie)添加到Axios的headers配置中。验证API地址一致性
确认React Native中API_URL的协议(http/https)、域名、端口与Postman中使用的完全一致,避免因环境配置差异(如开发/生产地址混淆)导致认证失败。检查React Native网络配置
- iOS:在
Info.plist中配置App Transport Security(ATS)允许目标域名,或临时关闭ATS用于测试(生产环境不建议); - Android:确保
AndroidManifest.xml添加了<uses-permission android:name="android.permission.INTERNET" />权限,同时检查网络安全配置是否允许访问目标域名。
- iOS:在
打印详细错误信息
修改catch块,输出API返回的具体错误内容,而非仅提示网络问题,便于定位认证失败原因:
catch (error) { console.error('API请求错误详情:', error.response?.data || error.message); Alert.alert('Error Fetching Theme', error.response?.data?.message || '认证失败,请检查配置'); }
- 禁用请求缓存
Postman或浏览器可能缓存了有效认证信息,尝试在请求头中添加Cache-Control: no-cache,避免缓存导致的认证失效:
headers: { 'Accept': 'application/json', 'Cache-Control': 'no-cache' }
内容的提问来源于stack exchange,提问作者Haseeb Usman
相关产品推荐
相关产品推荐

