如何在React Native IOS应用程序中发出HTTP请求?

时间:2017-03-08 08:14:14

标签: react-native react-native-ios

fetch('http://119.9.52.47:3000/api/countries', {
       method: 'POST',
       headers: { 'Accept': 'application/json','Content-Type': 'application/json'},
   }).then((response) => response.json())
     .then((responseData) => {
           console.log(responseData);
       })

这是我的代码。但这不起作用。

3 个答案:

答案 0 :(得分:7)

您可以尝试这样将数据发送到服务器(POST)

let response = await fetch(
    'http://your_url', {
      method: 'POST',
      headers: {
        'Accept': 'application/json',
        'Content-Type': 'application/json',
      },
      body: JSON.stringify({
        username: this.state.name,//data which u want to send
        password: this.state.password,
      })
  });
  let responseText = await response.text();
  if (response.status >= 200 && response.status < 300){
    Alert.alert('Server response', responseText)

  }
  else {
    let error = responseText;
    throw error
    //Alert.alert('Login', error)
  }
} catch(errors) {
  Alert.alert('Login', errors)

  Actions.Documents();
}

编辑:最新的iOS sdk强制连接为https协议而不是http.you可以在Xcode项目的info.plist文件中为您的域添加例外。

如果你想允许所有内容写在info.plist中

<key>NSAppTransportSecurity</key>
<dict>
<key>NSExceptionDomains</key>
<dict>
    <key>yourdomain.com</key>
    <dict>
        <!--Include to allow subdomains-->
        <key>NSIncludesSubdomains</key>
        <true/>
        <!--Include to allow HTTP requests-->
        <key>NSTemporaryExceptionAllowsInsecureHTTPLoads</key>
        <true/>
        <!--Include to specify minimum TLS version-->
        <key>NSTemporaryExceptionMinimumTLSVersion</key>
        <string>TLSv1.1</string>
    </dict>
 </dict>
</dict>

了解详情,请查看https://stackoverflow.com/a/31623388/7604342

答案 1 :(得分:3)

您可以使用普通的提取功能,只将您的http主机添加到异常中。 在您的XCode中。

enter image description here

答案 2 :(得分:0)

引用Network docs

  

默认情况下,iOS会阻止任何未使用SSL加密的请求。如果您需要从明文URL(以http开头的URL)获取,则首先需要添加App Transport Security异常。

您的请求是http,因此您需要在ios应用中将地址添加为App Transport Security例外,或使用https。