首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >网络请求在iOS设备上失败

网络请求在iOS设备上失败
EN

Stack Overflow用户
提问于 2019-07-11 16:12:29
回答 2查看 1.3K关注 0票数 1

我想做的是:

我试图发送一个请求到我的API (用ApiPlatform创建)在我的反应本地应用程序与我的ios设备在博览会上。有人能知道怎么解决吗?:)

这里是我想做的请求:"http://127.0.0.1:8000/api/beers

什么起作用:

我的请求在我的电脑上有效。

我的请求通过输入"http://10.0.2.2:8000/api/beers“在我的android仿真器上工作。

我所做的:

对于博览上的ios设备,我读到需要通过计算机的Ipv4来更改127.0.0.1:8000,所以我运行了

代码语言:javascript
运行
复制
ipconfig

在powershell中,并获取我的Ipv4地址,输入我的请求:"http://172.20.10.2:8000/api/beers

我读过ios不允许http协议,所以我添加了我的app.json -> infoPlist -> NSAppTransportSecurity -> true

代码语言:javascript
运行
复制
    "ios": {
      "supportsTablet": true,
      "infoPlist": {
        "NSAppTransportSecurity" : {
          "NSAllowsArbitraryLoads" : true,
        }
      }
    }

。就像其他所有的话题一样,但总是有相同的错误:“网络请求失败”

我是连接在同一个网络在两个(iOS设备和安卓模拟器)。

例如,我尝试过"https://anapioficeandfire.com/api/characters/583“,它可以在我的模拟器和iOS设备上工作。

我正在使用其他API,但是有'https‘启动。这里的问题似乎是'http‘。

但是,我试图通过在NSAppTransportSecurity中的infoPlist中添加“infoPlist”:"true“来修复它,但是没有什么改变。就像我说的上面。

我还试图连接到另一个家庭的互联网,改变IPv4。但问题仍然存在。

我看不出有别的办法来解决它。我可能错过了什么。

在这里,允许请求的函数

代码语言:javascript
运行
复制
export function getsBeersFromRatio(){
    const url = Platform.OS === 'android'? 'http://10.0.2.2:8000/api/beers?abv%5Bgte%5D=6.2' : 'http://172.20.10.2:8000/api/beers'
    return fetch(url)
        .then((response) => response.json())
        .catch((error) => console.log(error));
}


  _searchBeersFromRatio(){
    this.setState({
      beers: [],
    },
    () => {
      this._loadBeersFromRatio()
    })
  }



  _loadBeersFromRatio(){
    console.log('====================================');
    console.log('       NEW REQUEST                   ');
    console.log('====================================');
    this.setState({ isLoading: true })
    getsBeersFromRatio().then(data => {
      console.log(data);

    })
  }


    <Button
      title = "get data from API"
      onPress = {() => this._searchBeersFromRatio()}
    />

在这里,我的package.json:

代码语言:javascript
运行
复制
{
  "main": "node_modules/expo/AppEntry.js",
  "scripts": {
    "start": "expo start",
    "android": "expo start --android",
    "ios": "expo start --ios",
    "web": "expo start --web",
    "eject": "expo eject",
    "postinstall": "node ./scripts/stfu.js"
  },
  "dependencies": {
    "country-list": "^2.1.1",
    "expo": "^33.0.0",
    "react": "16.8.3",
    "react-dom": "^16.8.6",
    "react-native": "https://github.com/expo/react-native/archive/sdk-33.0.0.tar.gz",
    "react-native-chart-kit": "^2.6.1",
    "react-native-elements": "^1.1.0",
    "react-native-flags": "^1.0.0",
    "react-native-redash": "^6.3.1",
    "react-native-view-more-text": "^2.1.0",
    "react-native-web": "^0.11.4",
    "react-navigation": "^3.11.0",
    "react-redux": "^7.1.0",
    "redux": "^4.0.1",
    "rn-vertical-slider": "^1.0.4",
    "victory-native": "^32.0.2"
  },
  "devDependencies": {
    "babel-preset-expo": "^5.1.1"
  },
  "private": true
}

我的app.json

代码语言:javascript
运行
复制
{
  "expo": {
    "name": "BierRatio",
    "slug": "BierRatio",
    "privacy": "public",
    "sdkVersion": "33.0.0",
    "platforms": [
      "ios",
      "android",
      "web"
    ],
    "version": "1.0.0",
    "orientation": "portrait",
    "icon": "./assets/icon.png",
    "splash": {
      "image": "./assets/splash.png",
      "resizeMode": "contain",
      "backgroundColor": "#ffffff"
    },
    "updates": {
      "fallbackToCacheTimeout": 0
    },
    "assetBundlePatterns": [
      "**/*"
    ],
    "ios": {
      "supportsTablet": true,
      "infoPlist": {
        "NSAppTransportSecurity" : {
          "NSAllowsArbitraryLoads" : true,
        }
      }
    }
  }
}

预期行为

我希望与我的android仿真器相同的日志

实际行为

实际输出是“网络请求失败”

谢谢!

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2019-07-15 14:58:52

解决办法:

我终于找到了一个好办法:

当我在电脑上输入Api时,他说:Api

因此,我尝试运行$ php /控制台服务器:运行"My_IPv4_address":8000

防火墙通知在我看来,我接受。我在我的iOS设备中再次发送我的请求,我不知道为什么它现在工作。

所以我得跑了

$ php /控制台服务器:运行

在另一个powershell中

$ php bin/控制台服务器:运行"My_IPv4_address":8000

访问我的android模拟器和我的iOS设备中的本地API。

票数 0
EN

Stack Overflow用户

发布于 2020-04-27 18:43:45

我遇到了完全相同的问题,我使用fetch()将我的数据从我的本机react应用程序发送到我的php服务器,我用iOS电话模拟了世博,但是当我配置了正确的IPV4地址时,我收到了与您相同的错误。

代码语言:javascript
运行
复制
fetch (http: // ipv4 address / ...)

而不是本地人。

同样,当我在pc上模拟web视图时,我将

代码语言:javascript
运行
复制
fetch (http: // localhost / ..)

我收到数据,一切都很完美。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56993369

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档