Не удается отправить запрос с помощью React Native и Axios

Я прочитал десятки ответов и, кажется, не могу понять этого:

  • Запрос отлично работает в iOS, но он не работает в Android.
  • Я использую React Native 0.57.5 и axios 0.18.0
  • Я поставил запись через
axios.interceptors.request.use(request => {
  console.log('Starting Request', request)
  return request
})

axios.interceptors.response.use(response => {
  console.log('Response:', response)
  return response
})

введите описание изображения здесь

Как видно, запрос вроде нормально. И это касается не localhost, а реального работающего сервера (я отредактировал некоторые внутренние ключи заголовка и полные URL-адреса)

  • Также поместите оператор журнала в catch того места, где я делаю свой запрос axios:
axios.request(config)
      .then((axiosResponse) => {
        console.log('GOOD RESPONSE ', axiosResponse)

        // some logic 
      })
      .catch((error) => {
        console.log('axiosResponse ERROR', error)
        // some other logic
      })

И вот что я вижу в консоли отладчика Chrome:

axiosResponse ERROR Error: Network Error
    at createError (createError.js:16)
    at XMLHttpRequest.handleError (xhr.js:87)
    at XMLHttpRequest.dispatchEvent (event-target.js:172)
    at XMLHttpRequest.setReadyState (XMLHttpRequest.js:580)
    at XMLHttpRequest.__didCompleteResponse (XMLHttpRequest.js:394)
    at XMLHttpRequest.js:507
    at RCTDeviceEventEmitter.emit (EventEmitter.js:190)
    at MessageQueue.__callFunction (MessageQueue.js:349)
    at MessageQueue.js:106
    at MessageQueue.__guard (MessageQueue.js:297)
    at MessageQueue.callFunctionReturnFlushedQueue (MessageQueue.js:105)
    at debuggerWorker.js:72

Это часть моего обновления с React Native 0.55.0 до 0.57.5, так что этот материал axios раньше работал нормально.

Любые идеи?


person kolistivra    schedule 21.11.2018    source источник


Ответы (2)


Для того, что вы сказали, я думаю, что это должно быть то, что вы не запрашивали разрешения в Интернете, если это так, вам нужно отредактировать в своем проекте Android внутри вашего файла манифеста, он должен быть в $ your_project_root_directory / android / app / src / main /AndroidManifest.xml

<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="your.package"
    android:versionCode="1"
    android:versionName="1.0">
...
    <uses-permission android:name="android.permission.INTERNET" />
...
</manifest>

Другое дело, что если вы используете http-соединение. попробуйте следующее

<network-security-config>
    <domain-config cleartextTrafficPermitted="true">
        <domain includeSubdomains="true">yourinsecureserver.com</domain>
    </domain-config>
</network-security-config>

<?xml version="1.0" encoding="utf-8"?>
<manifest ... >
    <application android:networkSecurityConfig="@xml/network_security_config"
                    ... >
        ...
    </application>
</manifest>

https://android-developers.googleblog.com/2018/04/protecting-users-with-tls-by-default-in.html

person Cristian Gomez    schedule 22.11.2018
comment
К сожалению, это не так. Я вижу <uses-permission android:name="android.permission.INTERNET" /> прямо в моем AndroidManifest.xml. И, как я уже сказал, это началось в рамках моих усилий по обновлению React Native. - person kolistivra; 22.11.2018
comment
Вы можете нормально просматривать с устройства? - person Cristian Gomez; 22.11.2018
comment
Ваш URL-адрес https или http? android-developers.googleblog. ru / 2018/04 / - person Cristian Gomez; 22.11.2018
comment
Я идиот - подключил к интернету, и теперь оно работает! stackoverflow.com/ вопросы / 44535500 / Большое спасибо! - person kolistivra; 22.11.2018

Чтобы решить эту проблему, вам нужно добавить домен API в файл response_native_config.xml, как показано на рисунке ниже:

Печать в Android Studio

<?xml version="1.0" encoding="utf-8"?>
 <network-security-config>
  <domain-config cleartextTrafficPermitted="true">
   <domain includeSubdomains="false">localhost</domain>
   <domain includeSubdomains="false">10.0.2.2</domain>
   <domain includeSubdomains="false">10.0.3.2</domain>
   <domain includeSubdomains="false">192.168.0.9</domain>
 </domain-config>
</network-security-config>
person Marco Gorak    schedule 14.04.2019