React Native fetch () Ошибка сетевого запроса

Когда я создаю новый проект с использованием react-native init(версия RN 0.29.1) и помещаю выборку в метод рендеринга в общедоступный API-интерфейс демо-фильма facebook, он бросает Network Request Failed. Существует очень бесполезная трассировка стека, и я не могу отлаживать сетевые запросы в хром-консоли. Вот выбор, который я отправляю:

fetch('http://facebook.github.io/react-native/movies.json')
      .then((response) => response.json())
      .then((responseJson) => {
        return responseJson.movies;
      })
      .catch((error) => {
        console.error(error);
      });

javascript,react-native,fetch,

78

Ответов: 9


104 принят

Проблема здесь в том, что iOS не разрешает HTTP-запросы по умолчанию, а только HTTPS. Если вы хотите включить HTTP-запросы, добавьте это в свой info.plist:

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

50

Не рекомендуется разрешать все домены для http. Сделайте исключение только для необходимых доменов.

Источник: настройка исключений безопасности транспорта приложений в iOS 9 и OSX 10.11

Добавьте в файл info.plist вашего приложения следующее:

<key>NSAppTransportSecurity</key>
<dict>
  <key>NSExceptionDomains</key>
  <dict>
    <key>yourserver.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>

6

React Native Docs дает ответ на этот вопрос.

Apple заблокировала неявную загрузку HTTP-ресурсов с открытым текстом. Поэтому нам нужно добавить следующий файл Info.plist (или эквивалентный) нашего проекта.

<key>NSExceptionDomains</key>
<dict>
    <key>localhost</key>
    <dict>
        <key>NSTemporaryExceptionAllowsInsecureHTTPLoads</key>
        <true/>
    </dict>
</dict>

React Native Docs -> Интеграция с существующими приложениями -> Безопасность приложений на транспорте


4

Проблема может быть в конфигурации сервера.

В Android 7.0 есть ошибка, описанная здесь . Обходное решение, предложенное Вики Чиджвани:

Настройте сервер для использования эллиптической кривой prime256v1. Например, в Nginx 1.10 вы делаете это, устанавливая ssl_ecdh_curve prime256v1;


4

Я использовал localhostдля адреса, что, очевидно, было неправильным. После замены его IP-адресом сервера (в сети, в которой работает эмулятор), он работал отлично.

редактировать

В Android-эмуляторе адрес машины разработки 10.0.2.2. Больше объяснений здесь

JavaScript, реагируют родной, выборки,
Похожие вопросы