React Native 在IOS模拟器中响应本地axios请求不起作用

htzpubme  于 2023-01-14  发布在  React
关注(0)|答案(5)|浏览(118)

我正在尝试使用axios从API获取数据。
这是我的代码,发出一个get请求:

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
    });
};

info.plist为http设置:

它在android模拟器中工作正常,但IOS模拟器不工作。

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

和Mac终端显示:

有人能告诉我哪里出错了吗?或者我是否需要对IOS进行任何其他配置?
我的平台:

  • 操作系统:Mac 10.13
  • 节点:10.7
  • 国家预防机制:6.3.0
  • React:16.4.1
  • 天然 reactjs :0.55
krugob8w

krugob8w1#

使用以下内容更新您的信息列表:

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

jgwigjjp2#

在尝试更改ATS密钥时,您删除了react native的密钥,您的plist值为NSAppTransportSecurity

<key>NSAppTransportSecurity</key>
    <dict>
        <key>localhost</key>
            <dict>
                <key>NSExceptionAllowsInsecureHTTPLoads</key>
                <true/>
            </dict>
        <key>bloodconnector.org</key>
            <dict>
                <key>NSExceptionAllowsInsecureHTTPLoads</key>
                <true/>
            </dict>
</dict>
ghhkc1vu

ghhkc1vu3#

只需编辑信息列表:删除“NSExceptionMinimumTLSVersion”,然后添加值为“假”的“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>
kgqe7b3p

kgqe7b3p4#

在寻找React原生IOS网络错误的解决方案时,我找到了解决方案:当在iOS和Android的localhost路径上工作时会产生问题如果您使用的是Android的localhost,请将此作为您的路径:'http://10.0.2.2:3000'如果您使用的是iOS本地主机,请给予以下内容作为您的路径:网址:http://本地主机: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',
        },
    });
u3r8eeie

u3r8eeie5#

对我来说,问题是我的请求使用了HTTP而不是HTTPS,显然iOS默认情况下不允许HTTP请求。因此,更新 '~/ios/App_Name/info. plist' 以包含以下内容将启用HTTP请求。

<!-- ...Other keys -->
<key>NSAppTransportSecurity</key>
    <dict>
        <key>NSAllowsArbitraryLoads</key> <!-- Add me to enable HTTP requests.  -->
        <true/> <!-- Add me to enable HTTP requests.  -->
    </dict>
<!-- ...Other keys -->

相关问题