отправка get запроса
- Войдите на сайт для отправки комментариев
Втр, 27/07/2021 - 21:00
первый раз вообще работаю с вайфаем , подключил себе бесплатный ddns . Для обновления айпи , предлагает сделать следующее :
Попытался понять как делать этот запрос , у меня вышло следующее :
if (client.connect(ip_update_host,80)) { } client.println("GET /token/update?hostname=esp8266-x.dynnamn.ru&token=токен[цензура]&myip="); client.println ("HTTP/1.1"); client.println ("Host: dynupdate.alviy.com"); client.println(); client.println();
, в ответ получаю :
Response of DDNS-Server: <html> <head><title>400 Bad Request</title></head> <body> <center><h1>400 Bad Request</h1></center> <hr><center>cloudflare</center> </body> </html>
к слову , так и не понял ,зачем нужно делить запрос на части , куда проще же отправить все в одном , да и сервер не запутается ,собирая его по кусочкам.
буду благодарен за конструктив , а так же материалы, которые мне следовало бы изучить.
Открывать esp8266 в интернет, да еще и под доменом - плохая затея. Будет падать от сканеров постоянно.
Ну и http запросы делаются библиотекой, а не вручную.
а что мне еще делать? мне нужно как-то из вне отправить именно на мою esp пакет, так вот у нее постоянно меняется айпи , а ddns сервер знает какой он .Его роль отправить пакет моей esp , вне зависимости от ее айпи, который я могу не знать. я это делаю через библиотеки <WiFiClient.h> <ESP8266WiFi.h>
Прям в голый сокет на 80-й порт валите текст? HTTP тоись устраиваете врукопашную? А GET должен по HTTPS производится.
Да и сам cloudfire побрить может, кстати, если IP не понравится.
Ну, на самом-то деле уже неплохо. Только client должен быть clientSecure из WifiSecureClient.h, и порт 443. А cloudflare он такой, да.
не могу нигде найти WifiSecureClient.h , можете дать ссылку? после смены порта , выдал это :
если честно , вообще не понимаю , зачем указывать порт при подключении, разве этот порт тебе выдает не провайдер? NAT , он тебе дает внутренний порт , а при подключении , вообще его меняет на свой. А если и нужно , то зачем и как мне узнать какой? 80 порт я увидел в примере другого человека , вот и написал. Максимально далек от этой темы...
Cloudflare всё правильно написал, вы попытались отправить незашифрованный запрос на порт, который этого не ожидает. Кстати, CF также порежет довольно много сканеров, что в данном случае есть хорошо, хоть лично я и не особо люблю CF.
Библиотека WifiSecureClient (или WifiClientSecure, не помню) входит в поставку, и там даже есть пример https запроса, прямо в вашей IDE у вас на компе.
если честно , вообще не понимаю , зачем указывать порт при подключении, разве этот порт тебе выдает не провайдер? NAT , он тебе дает внутренний порт , а при подключении , вообще его меняет на свой. А если и нужно , то зачем и как мне узнать какой? 80 порт я увидел в примере другого человека , вот и написал. Максимально далек от этой темы...
Вы "подключаетесь" к комбинации ip-адрес + порт. Порт нужен потому, что на одном адресе может быть несколько служб, например, на 80м http-сервер, на 443м https сервер, на 27015 игровой сервер (все три запущены на одном компьютере, ip одинаковый), и порт нужен для того, чтобы определить, какой из трёх серверов получит ваш запрос.
С вашей стороны тоже присутствует ip+port, за натом или без, в случае клиента неважно, tcp-соединение устанавливается между двумя ip/port-ами. Ваш клиентский ip+port (ардуина esp) обращается к серверному ip+port-у (сервер dyndns), просто библиотека от вас это прячет.
Если максимально далеки - придётся подтянуться, без этих базовых знаний ничего не получится, только глумиться дальше будут.
спасибо , разбираюсь по тихоньку. Переписал на HTTPS , удалось подключится , вот только в ответ получил
внизу написано про cloudflare , я так понимаю , что это его рук дело ,а не в неправильном запросе?
скину код целиком ,На всякий случай :
что-то немного поправил, теперь получаю :
403я ошибка - это ты обратился к серверу туда, куда доступ не всем разрешён. Проверь адрес и/или токен.
токен скопировал тот , что мне дал ddns , все правильно.
В браузере у себя на пк пробовал по сформированному url заходить? Что получается?
удалите, нету такого заголовка, не нужно такую херню слать серверу
это не обязательно отправлять в данном случае, всё равно же сами закрываете соединение, но это пофигу, не страшно, можно и отправлять
с браузера удалось зайти.
переписал , как мне и сказали , удалив лишнее :
результат не изменился - 403.
все же не в этом дело , ничего не изменилось .
ответ : 403 .
ннууу
откройте новую вкладку браузера, нажмите ctrl+shift+i, откроются devtools
скопипастьте в эту вкладку ваш урл https://dynupdate.alviy.com/token/update?hostname=esp8266-x.dynnamn.ru&token=2234328371&myip= нажмите enter
в devtools откройте вкладку network, щёлкните на запрос, откроется ещё вкладка, там выберите headers и чуть промотайте вниз, до request headers
скопируйте оттуда, можете хоть всё, но я думаю хватит user-agent, accept-encoding и accept-language, и отправьте после заголовка Host: серверу
может, поможет, побороть cloudflare
Вот так это делается. Это ТОЧНО работает с DuckDNS. На 8266 (Вемос Д1). Мне было нужно с IPv6, но разницы никакой.
PS: Форум URL в коде переписывает... Чорт! Забыл как это обойти. Поделил URL на куски, так съел.
подключенные встроенные библиотеки:
к сожалению не помогло ,вообще не понимаю ,зачем они туда поставили cloudflare? это же токен явно не для ручного обновления айпи , напишу им в поддержку , а пока поищу другой бесплатный ddns.
Спасибо за помощь!