React Native拉取请求失败

11

我正在使用React Native Fetch API从https://api.github.com/users/{username}获取JSON数据,但请求失败并出现以下错误信息。

"TypeError: 网络请求失败{stack: (...), message: '网络请求失败'}"。

我认为对于https协议,有时会出现NSURLAuthenticationChallenge的情况。我不确定如何实现这个。有人有关于此的任何想法吗?


很难在没有代码片段的情况下确定,但你可以尝试在使用的URL末尾添加/。另外,插值使用#{username}完成。 - MikaelC
你能提供一些最小化的代码来重现这个错误吗?一种方法是尝试fetch一个无效的URL,但在没有你展示一些代码的情况下,无法确定造成错误的原因。 - Mark Amery
5个回答

2

如果您使用的是iOS系统,您可能需要执行以下操作:

您必须启用AppTransportSecurity功能。

<key>NSAppTransportSecurity</key>
<dict>
    <key>NSAllowsArbitraryLoads</key>
    <true/>
</dict>

在 iOS 中,你需要在 Info.plist 文件中添加以下内容:

info.plist

在 Android 中,请确保已经在 AndroidManifest.xml 文件中添加了使用 INTERNET 权限。
<uses-permission android:name="android.permission.INTERNET" /> 

1

你能提供一个 fetch 代码片段吗?

通常,一个 fetch 语句的写法是:

fetch(requestURL)
  .then( (response) => response.json() )
  .then( (data) => {
    this.setState({data: data});
   })
  .catch( (error) => console.log(error) )
  .done();

捕获错误将允许程序继续运行而不崩溃。

0

我也经常遇到 React Native Fetch Request Fails 的问题。

在我的情况下,API调用的响应大小约为5kb,因此我从API响应中删除了不必要的数据,并将结果大小缩小到约1kb,然后一切都开始正常工作。

因此,请尝试限制您从API请求的数据量。


0
在我的情况下,问题不在代码中。当我没有网络时启动了模拟器。在我登录到模拟器上的wifi点网络后,网络仍然无法正常工作。我重新启动了模拟器 - 一切都正常了。
所以:
  1. 连接到网络。

  2. 重新启动模拟器。

如果这样做没有帮助,那么请检查您的代码。

-3

你尝试过使用XMLHttpRequest吗?

正如文档中所示, XMLHttpRequest支持https

var request = new XMLHttpRequest();
request.onreadystatechange = (e) => {
  if (request.readyState !== 4) {
    return;
  }

  if (request.status === 200) {
    console.log('success', request.responseText);
  } else {
    console.warn('error');
  }
};

request.open('GET', 'https://mywebsite.com/endpoint.php');
request.send();

在您发布的同一文档中,它显示您也可以使用Fetch进行https。 - Koes Bong

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接