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

React Native fetch调用特定URL失败,Postman请求正常

React Native Fetch调用LDAP注册接口失败(Postman可正常运行)

问题背景

你有一个LDAP注册接口,在Postman中配置Content-Type: application/json后能正常请求并获取响应,但用React Native的fetch调用时出现异常。接口信息和你的代码片段如下:

  • 请求URL:http://10.10.1.23:8085/LdapServices/ldapservice/signUp
  • Postman请求体:
{ 
  "cn": " ", 
  "sn": "abcd", 
  "uid": "123123123", 
  "userPassword": "test123", 
  "applicationName":"app1" 
}
  • 你的React Native fetch代码片段:
fetch("http://10.10.1.23:8085/LdapServices/ldapservice/signUp", { 
  method: 'POST', 
  headers: { 
    'Content-Type': 'application/json', 
  }, 
  body: JSON.stringify({ cn : "", sn : "abcd", uid : "123123123", userPassword: "test123", applicationName:"app1" })
})

排查方向与解决方案

1. 先修正参数不一致的问题

我注意到Postman里的cn值是空格字符("cn": " "),但你的React Native代码里写的是空字符串(cn : ""),这很可能导致后端接口参数校验不通过。先把这个值统一,改成和Postman一致的空格:

body: JSON.stringify({ 
  cn : " ", 
  sn : "abcd", 
  uid : "123123123", 
  userPassword: "test123", 
  applicationName:"app1" 
})

2. 完善错误捕获,获取具体报错信息

fetch的特性是:只有网络层面的错误才会进入catch,像HTTP 4xx/5xx这类业务错误不会主动抛出。你需要手动判断响应状态,把错误信息打印出来,才能知道到底哪里出问题:

fetch("http://10.10.1.23:8085/LdapServices/ldapservice/signUp", { 
  method: 'POST', 
  headers: { 
    'Content-Type': 'application/json', 
  }, 
  body: JSON.stringify({ 
    cn : " ", 
    sn : "abcd", 
    uid : "123123123", 
    userPassword: "test123", 
    applicationName:"app1" 
  })
})
.then(response => {
  // 检查响应状态是否正常
  if (!response.ok) {
    // 读取响应文本,抛出包含状态码和错误信息的异常
    return response.text().then(errMsg => {
      throw new Error(`请求失败:状态码 ${response.status},错误信息:${errMsg}`);
    });
  }
  return response.json();
})
.then(data => console.log('请求成功:', data))
.catch(error => console.error('捕获到错误:', error));

通过这段代码,你能在控制台看到具体的错误原因,比如后端返回的参数错误提示、权限问题等。

3. 检查平台网络权限配置

React Native在不同平台上有网络访问的限制,需要确认配置是否正确:

  • Android:打开android/app/src/main/AndroidManifest.xml,确保添加了互联网权限:
    <uses-permission android:name="android.permission.INTERNET" />
    
  • iOS:打开ios/[你的项目名]/Info.plist,因为你的接口是HTTP协议(非HTTPS),需要配置ATS允许非安全连接:
    可以添加全局允许(调试阶段方便):
    <key>NSAppTransportSecurity</key>
    <dict>
      <key>NSAllowsArbitraryLoads</key>
      <true/>
    </dict>
    
    或者更严谨地只允许目标域名:
    <key>NSAppTransportSecurity</key>
    <dict>
      <key>NSExceptionDomains</key>
      <dict>
        <key>10.10.1.23</key>
        <dict>
          <key>NSIncludesSubdomains</key>
          <true/>
          <key>NSTemporaryExceptionAllowsInsecureHTTPLoads</key>
          <true/>
        </dict>
      </dict>
    </dict>
    

4. 确认设备与服务器的网络连通性

确保运行React Native的设备(模拟器或真机)和服务器在同一个局域网内,能正常访问10.10.1.23:8085。你可以在设备的浏览器里输入这个URL,看看是否能打开接口页面(或者得到后端的错误响应),如果连浏览器都访问不了,那就是网络连通的问题,需要检查路由器设置、服务器防火墙等。

5. 排查CORS相关问题(少见但可能)

Postman不受浏览器的CORS规则限制,但React Native在使用Metro调试时,偶尔会遇到代理导致的CORS问题。如果前面的方法都没解决,可以尝试在fetch配置里添加mode: 'no-cors'(注意:这会导致无法读取响应内容,仅作为临时排查手段):

fetch("http://10.10.1.23:8085/LdapServices/ldapservice/signUp", { 
  method: 'POST', 
  mode: 'no-cors',
  headers: { 
    'Content-Type': 'application/json', 
  }, 
  body: JSON.stringify({ 
    cn : " ", 
    sn : "abcd", 
    uid : "123123123", 
    userPassword: "test123", 
    applicationName:"app1" 
  })
})

如果加了之后能请求成功,那可能需要调整Metro的代理配置,或者直接在真机上测试(真机直接访问局域网服务器不会有CORS问题)。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.20 12:00:12