Я использую клиент expo на своем устройстве Android и настроил сервер django на localhost:8000, и я пытаюсь получить доступ к конечной точке, используя выборку в собственном реагировании. Я просмотрел Как я могу получить доступ к своему локальному хосту с моего устройства Android?Как подключить localhost в эмуляторе Android? и Как подключиться к моему веб-серверу http: // localhost из эмулятора Android в Eclipse, но это не сработало.
Я также попытался использовать IP-адрес моей машины вместо localhost, но безрезультатно. Вот пример кода
componentDidMount(){
return fetch('http://my-ip-address:8000/restapi/')
.then((response) => {
console.info("success")
response = response.json()
}).catch(error => {
console.error(error)
})
}
Что я здесь делаю не так?
Попробуйте 127.0.0.1 в качестве своего IP-адреса. Если это не сработает, попробуйте обратиться к почтальону, чтобы узнать, сможете ли вы общаться.
Я использую свое мобильное устройство. Пробовал 127.0.0.1. Это не сработало, а также я использовал почтальона, чтобы убедиться, что получаю правильный ответ
Использование реального устройства немного отличается. Основываясь на приведенных вами ссылках на эмулятор и используя 10.0.2.2, я предположил, что вы используете эмулятор. Ваш телефон находится в той же сети. Вы подтвердили, что у вас нет брандмауэра или чего-либо, блокирующего входящие соединения / порт?
Чтобы было ясно, "успех" не выводится в консоли, верно? И вы используете адрес локальной сети, и все рассматриваемые устройства подключены к одной сети?
Мой телефон находится в той же сети Wi-Fi. И я проверяю свой брандмауэр на блокировку соединений. Я попробую эмулятор и посмотрю, работает ли это
Может ли ваш телефон получить доступ к тому же URL-адресу в веб-браузере?
Да, все устройства находятся в одной сети Wi-Fi. И я не могу получить доступ к тому же URL-адресу через свой телефон
Если браузер вашего телефона не может получить доступ к тому же URL-адресу, это может быть проблема конфигурации django. Я не знаком с django, но это может помочь сделать сервер django доступным в вашей сети
Согласно вашему коду,
:8080:8000Проверить снова. И я рекомендую использовать Почтальон при тестировании API вашего сервера.
Жаль, что я сделал ошибку. Порт 8000
Это может быть проблема с конфигурацией django. Особенно, если веб-браузер вашего телефона также не может получить ожидаемый ответ.
Из Документы Django:
Note that the default IP address, 127.0.0.1, is not accessible from other machines
on your network. To make your development server viewable to other machines on the
network, use its own IP address (e.g. 192.168.2.1) or 0.0.0.0 or :: (with IPv6 enabled).
См. Как получить доступ к локальному веб-серверу Django из внешнего мира, хотя ответ также применим в локальной сети:
python manage.py runserver 0.0.0.0:8000
Вы можете заменить 0.0.0.0 на адрес устройства, если вы его знаете.
Также стоит отметить в обработчике ответа, что response.json() возвращает обещание, а не JSON. Вместо этого вы хотите:
fetch('http://my-ip-address:8000/restapi/')
.then(response => response.json())
.then(responseJson => {
console.info("success");
console.info(responseJson);
})
.catch(error => {
console.error(error);
})
В дополнение к ответу csum проверьте, разрешил ли брандмауэр удаленный доступ к вашему устройству Android (IP-адрес устройства как удаленный) для сервера django. Если у вас установлен какой-либо антивирус и управляет брандмауэром, убедитесь, что в его брандмауэре есть правило.
Вы тестируете на своем устройстве или симуляторе?