Подтвердить что ты не робот

Реагировать на запрос собственного сообщения с помощью запроса на извлечение сетевых запросов

Я наткнулся на следующую ошибку. На данный момент я разрабатываю приложение для Android с React Native, поэтому планирую использовать выборку для выполнения почтового запроса для меня.

fetch("https://XXreachable-domainXX.de/api/test", {
            method: "post",

            body: JSON.stringify({
                param: 'param',
                param1: 'param',

            })
        }
    )
        .then((response) = > response.json()
    )
    .
    then((responseData) = > {
        ToastAndroid.show(
        "Response Body -> " + JSON.stringify(responseData.message), ToastAndroid.SHORT
    )
})
    .
    catch((error) = > {
        console.warn(error);
})
    ;

Приложение теперь выдает сообщение об ошибке:

TypeError: сбой сетевого запроса

Когда я меняю код на GET-Request, он работает нормально, в браузере с окном. alert() в качестве возврата он классный, а также расширение chrome Postman правильно возвращает данные.

4b9b3361

Ответ 1

Эта ошибка React Native довольно бесполезна, поэтому сначала вам нужно получить фактическую основную ошибку. Самый простой способ - написать небольшую собственную программу, которая просто выполнит тот же запрос, используя HttpsURLConnection.

Для меня фактическая ошибка была java.security.cert.CertPathValidatorException: Trust anchor for certification path not found. который имеет хорошо известное решение: https://developer.android.com/training/articles/security-ssl.html#MissingCa

Это, скорее всего, и ваше дело, учитывая, что браузеры и почтальон не имеют проблем с запросом. Чтобы проверить его, запустите openssl s_client -connect XXreachable-domainXX.de:443 -showcerts. Если есть ошибки сертификата, исправьте их сначала, это может избавить вас от необходимости писать собственную программу.

Изменить: на самом деле самый простой способ увидеть все основные ошибки android для реакции native - это просто запустить "adb logcat" в терминале

Ответ 2

Разработка с использованием ОС Windows/PHP для встроенного сервера/реагирования на Android на устройстве:

  • проверить локальный IP-адрес сервера (ipconfig), например. 172.16.0.10
  • в native-native fetch используйте этот URL-адрес и правильный порт (fetch('http://172.16.0.10:8000/api/foo))
  • запустите встроенный PHP-сервер с этим конкретным IP-адресом вместо localhost: php -S 172.16.0.10:8000 ...
  • отключить брандмауэр Windows для частных сетей

Это установило проблему соединения между телефоном Android и локальным сервером для меня.

Ответ 3

Если у вас есть эта ошибка, и вы уверены, что все работает хорошо, и вы запускаете эмулятор, просто закройте свой эмулятор и снова запустите его.

Теперь он должен выполняться.

Это обычно происходит после того, как вы немного спятили систему в течение некоторого времени

Ответ 4

У меня была серьезная проблема, делающая то же самое на эмуляторе Android. На iOS одобрение домена в info.plist было необходимо. Чтобы быть ясным, я пытался войти в свой .NET-хостинг API.

Исправлено: убедиться, что данные сообщения были параметризованы (я уверен, что слово)

export const loginUser = ({ userName, password }) => {
const data = `UserName=${userName}&Password=${password}&grant_type=password`
    return (dispatch) => {
        dispatch({ type: LOGIN_USER })

        fetch(URL_LOGIN, {
            method: 'POST',
            headers: {
                'Accept': 'application/json',
                'Content-Type': 'application/json',
            },
            body: data
            // body: {

            //     UserName: userName,
            //     Password: password,
            //     grant_type: 'password'

            // }

        })
            .then((response) => { 
                loginUserSuccess(dispatch, response)
            })
            .catch((response) => {
                loginUserFailed(dispatch, response)
            })
    };
};

Ответ 5

Проверьте два случая ниже

  • Неверная конечная точка
  • Подключение к Интернету: виртуальное устройство реального времени

Он съел 2 часа со второй причиной.

Ответ 6

Если вы столкнулись с этой проблемой на эмуляторе, убедитесь, что вы также протестировали его на устройстве. Это, скорее всего, не происходит там.

Просто чтобы вы знали, что вам не о чем беспокоиться, если вы можете обойти это.

Ответ 7

У меня была эта проблема на Android из-за сертификата с истекшим сроком действия. Сообщение об ошибке, которое у меня было, было com.android.org.bouncycastle.jce.exception.ExtCertPathValidatorException: Could not validate certificate: Certificate expired at Fri Sep 29 16:33:39 EDT 2017 (compared to Fri Dec 08 14:10:58 EST 2017).

Я смог подтвердить это, используя digicert.com.

К сожалению, мне пришлось довольно глубоко копаться в исходном коде React и отлаживать XHR-код в пакете (index.android.bundle), чтобы найти сообщение об ошибке и соответствующий URL, потому что это было в каком-то моем коде регистрации, который я, очевидно, тоже не заходил на консоль.:)

Мне помог этот комментарий о выпуске GitHub.