反应本机axios请求在IOS模拟器中不起作用

时间:2018-08-08 06:42:16

标签: ios react-native ios-simulator axios

我正在尝试使用axios从API获取数据。

这是我发出请求的代码:

export const loadBloodGroups = () => {
    return (dispatch) => {

        dispatch({ type: LOADING_BLOOD });

        const url = `http://www.example.org/api/bloodgroup/getusersbloodgroup`;
        axios.get(url)
        .then(response => loadingSuccess(dispatch, response))
        .catch(error => loadingFail(dispatch, error));
    };
};

const loadingFail = (dispatch, error) => {
    console.log(error);
    dispatch({ 
        type: LOADING_BLOOD_FAIL,
        payload: error
    });
};

const loadingSuccess = (dispatch, response) => {
    dispatch({
        type: LOADING_BLOOD_SUCCESS, 
        payload: response
    });
}; 

http的info.plist设置:

enter image description here

它在android模拟器中可以正常工作,但IOS模拟器无法正常工作。

在我的浏览器调试控制台中,它显示:

enter image description here

和Mac终端显示:

enter image description here

有人可以告诉我,我在哪里弄错了吗?还是我需要为IOS做任何其他配置?

我的平台:

  • 操作系统:Mac 10.13
  • 节点:10.7
  • npm:6.3.0
  • 反应:16.4.1
  • 本机:0.55

4 个答案:

答案 0 :(得分:0)

使用:

更新您的Info.plist
<key>NSAppTransportSecurity</key>
    <dict>
        <key>NSAllowsArbitraryLoads</key>
        <true/>
    </dict>

答案 1 :(得分:0)

在尝试更改ATS密钥时,您删除了一个用于本机响应的密钥 您total = 0 counts = {} for root, dirs, files in os.walk(path): if not dirs: print(f'{root}: {len(files)}') counts[root] = len(files) total += len(files) 的plist值

NSAppTransportSecurity

答案 2 :(得分:0)

只需编辑info.plist:删除“ NSExceptionMinimumTLSVersion”,然后添加具有“ false”值的“ NSExceptionRequiresForwardSecrecy”。

<key>NSAppTransportSecurity</key>
    <dict>
        <key>NSExceptionDomains</key>
            <dict>
                <key>specificDomain.com</key>
                <dict>
                    <key>NSIncludesSubdomains</key>
                    <true/>
                    <key>NSExceptionAllowsInsecureHTTPLoads</key>
                    <true/>
                    <key>NSExceptionRequiresForwardSecrecy</key>
                    <false/>
                </dict>
            </dict>
        <key>NSAllowsLocalNetworking</key>
        <true/>
    </dict>

答案 3 :(得分:0)

在寻找React native IOS Network Error的解决方法时,找到了解决方法: 在处理 iOS 和 android 的本地主机路径时创建问题 如果您使用 localhost for android,请将其作为您的路径:'http://10.0.2.2:3000' 如果您在 iOS 上使用 localhost,请将此作为您的路径:http://localhost:3000

代码如下:

import {Platform} from 'react-native'
import axios from 'axios';
var baseURL = null;

Platform.OS === 'android'? baseURL = 'http://10.0.2.2:3000' : baseURL= 'http://localhost:3000'

export const getNotifications = () =>
    axios.get(`${baseURL}/notifications`, {
        headers: {
            Accept: 'application/json',
            'Content-Type': 'application/json',
        },
    });