Приложение React Native на устройстве Android POST-запрос возвращает ошибку сетевого запросаAndroid

Форум для тех, кто программирует под Android
Ответить
Anonymous
 Приложение React Native на устройстве Android POST-запрос возвращает ошибку сетевого запроса

Сообщение Anonymous »

Я тестирую аутентификацию в локальной домашней настройке, и у меня есть приложение по умолчанию с экраном входа в систему, и если я нажимаю кнопку входа в систему, оно отправляет запрос на выборку POST в службу Docker Keycloak, которую я настроил на своем ПК. В настоящее время я отправляю только HTTP, а не HTTPS.
Это приложение во время отладки с помощью эмулятора телефона через Android Studio и отправка моего запроса работает. Это также работает через Postman. Это также работает, когда я запускаю приложение API Tester (похожее на почтальон для мобильных устройств) на своем физическом устройстве. Все это возвращает мне токен.
Проблема заключается в том, что я создаю версию приложения и устанавливаю ее на свой телефон, который также подключен к той же сети, и я помещаю в IP-адресе компьютера, на котором запущена служба docker keycloack. Допустим, локальный IP-адрес моего компьютера — 192.168.1.150, а порт, на котором запущен экземпляр Docker, — 8080.
Вот фрагмент кода того, как я пытаюсь выполнить запрос на выборку POST для служба Docker Keycloak.
`
const loginHandler = async () => {
const url = http://192.168. 1.150:8080/realms/testrealm/protocol/openid-connect/token;
const body = client_id=login-client&client_secret=SOME+RANDOM+CHARS&username=${encodeURIComponent(username)}&password=${ encodeURIComponent(пароль)}&grant_type=пароль;

Код: Выделить всё

const timeoutPromise = new Promise((_, reject) =>
setTimeout(() => reject(new Error('Request timed out')), 15000)
);

try {
setMessage('');
console.log('Perform login with:', username, password);
console.log('URL FOR LOGGING:', url);
console.log('BODY OF URL:', body);

const fetchPromise = fetch(url, {
method: 'POST',
mode: 'cors',
headers: {
'Content-Type': 'application/x-www-form-urlencoded',
},
body: body,
});

const response = await Promise.race([fetchPromise, timeoutPromise]);

console.log('Response Status:', response.status);

if (!response.ok) {
const responseBody = await response.text();
console.log("LOGIN FAILED", response.status, responseBody);
setMessage(`Login failed with status ${response.status}: ${responseBody}`);
setMessageColor('red');
throw new Error(`Login failed | "LOGIN FAILED", ${response.status}, ${responseBody}, URL: ${url}`);
}

const data = await response.json();
console.log('Login successful!:', data);
setMessage('Login successful!');
setMessageColor('green');
} catch (error) {
console.error('Login error:', error);
setMessage(`Login error: ${error.message}`);
setMessageColor('red');
}
};
`
Попробовал перейти к AndroidManifest.xml и установить android:usesCleartextTraffic="true" "
Настройка режима выборки для cors
Подключение физического телефона к ПК через USB-C и использование его в качестве устройства отладки для запуска теста приложение, но все еще не удалось получить сетевой запрос.

Подробнее здесь: https://stackoverflow.com/questions/786 ... est-failed
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Android»