• Система автоматизации с открытым исходным кодом на базе esp8266/esp32 микроконтроллеров и приложения IoT Manager. Наша группа в Telegram

Нужна помощь PUT запрос

user228

New member
Всем привет!
В статьях PUT и Тема 7: Методы HTTP запросов. Определение методов HTTP (HTTP Method Definitions). | IT-блог о веб-технологиях, серверах, протоколах, базах данных, СУБД, SQL, компьютерных сетях, языках программирования и создание сайтов. увидел, что запросом PUT можно создать ресурс. Помогите с esp конкретно отправить сей запрос и создать страницу. Вот мой продвижения:
Код:
#include <ESP8266WiFi.h>
#include <WiFiClient.h>

const char* ssid = ".......";
const char* password = ".......";
const char* host = "www.mynewrussiansite.com";

WiFiClient client;

void setup()
{
  Serial.begin(115200);
  Serial.println();
  Serial.printf("Connecting to %s ", ssid);
  WiFi.begin(ssid, password);
  while (WiFi.status() != WL_CONNECTED)
  {
    delay(500);
    Serial.print(".");
  }
  Serial.println(" connected");
}


void loop()
{
  Serial.println("Sending a request...");
  client.println(String("PUT /hi") + " HTTP/1.1\r\n" + "Host: " + host + "\r\nContent-type: text/html\r\nContent-length: 15\r\n\r\n<p>new file</p>");
  Serial.println("Response:");
  while (client.connected())
  {
    if (client.available())
    {
      String line = client.readString();
      Serial.println(line);
    }
  }
  client.stop();
  Serial.println("\nDisconnected");
  delay(60000);
}
 

Юрий Ботов

Moderator
Команда форума
Что такое в вашем понимании "СОЗДАТЬ РЕСУРС"? ПУТ - способ передачи информации серверу от клиента, таким образом чтобы это не отображалось в командной строке браузера (утрирую).
 

user228

New member
В моем понимании, это создать веб-страницу с необходимыми параметрами для их дальнейшего использования, например, для вывода на дисплей. Я просто новичок в esp.
 

Юрий Ботов

Moderator
Команда форума
Страницу создает сервер в ответ на запрос. Esp тут просто посылает запрос. Меняйте серверную часть... Если она не доступна, запросите что то ТАК чтобы сервер прислал нужный вам ответ и потом разберите его и извлеките из его ответа информацию которая вам нужна (JS)
 

user228

New member
Спасибо за ответ, но у меня не получилось. Не могли бы вы подсказать, какую именно часть кода нужно поправить?
 

Юрий Ботов

Moderator
Команда форума
это ваш сервер - www.mynewrussiansite.com - судя по коду который вы выложили. Он и должен вернуть страницу. Могу предположить что вы просто тупо используете имя сервера из примера, а сервера такого в природе не существует - потому он вам и не отвечает. Так вот, если вы хотите получить ответ от сервера, то:
- этот сервер должен БЫТЬ
- на нем должна работать программа которая должна в ответ на ваш PUT запрос вернуть вам ответ который вам нужен
- в const host должен быть указан реальный путь до реального сервера
 

user228

New member
В вышеприложенных статьях говорится, что если PUT запрос отправлен на страницу, которой не существует, то сервер вернет 201 код статуса состояния, который оповещает нас о том, что веб-страница создана ("201 Created — в результате успешного выполнения запроса был создан новый ресурс"). Этого я и хочу добиться. И спасибо за помощь!
 

Сергей_Ф

Moderator
Команда форума
Дополню @Юрий Ботов
Не просто сервер существует, а именно такой как в статье. Любой другой сервер не должен и не будет ничего создавать на ваш запрос.
 

user228

New member
Ок. Подключаюсь к сайту Example Domain. Esp мне ничего не выдает в мониторе порта. Просто: Response:, пустая строка и Disconnected. Если сделаю так:
Код:
if (client.connect(host, 80))
  {
    Serial.println("Sending a request...");
    client.println(String("PUT /hi.html") + " HTTP/1.1\r\n" + "Host: " + host + "\r\nContent-type: text/html\r\nContent-length: 15\r\n\r\n<p>new file</p>");
    Serial.println("Response:");
    while (client.connected())
    {
      if (client.available())
      {
        String line = client.readString();
        Serial.println(line);
      }
    }
  }
То он мне через раз выдает 404 код и главную страницу сайта в html (как GET). Помогите пожалуйста исправить.
И еще вопрос: а почему кроме example.com нельзя подключаться к другим серверам и загружать туда страницы?
 

Сергей_Ф

Moderator
Команда форума
почему кроме example.com нельзя подключаться к другим серверам и загружать туда страницы?
а зачем другим сайтам ваши страницы? Что вы сделать то хотите? Если свой сайт, то оплачивайте хостинг и делайте нормально, а не через esp. И уж этот ваш сайт может и отвечать как вам хочется и создавать неизвестно от кого любые страницы и т.д. и т.п.
Ещё раз повторю: сервер, на который вы отсылаете запрос, должен уметь этот ваш запрос обработать так, как вы хотите. Никто никаких произвольных страниц не создает, а делает только то что задано в обработчике запросов - в программе на сервере. Метод PUT просто загружает данные на сервер, а как они будут обработаны определяет программа на сервере: создаёт запись в базе данных, создаёт страницу или просто игнорирует.
 
Последнее редактирование:

CodeNameHawk

Moderator
Команда форума
У меня на
Код:
client.print(String("PUT /hello.html HTTP/1.1 Host : www.example.com Connection : Keep - Alive Content - type : text/html Content - Length : 183 <html> <body> <h1>Hello, World!< / h1> < / body> < / html>"));
выдает
Код:
HTTP/1.0 505 HTTP Version Not Supported
Content-Type: text/html
Content-Length: 379
Connection: close
Date: Tue, 17 Jul 2018 19:58:58 GMT
Server: ECSF (dca/24DF)

<?xml version="1.0" encoding="iso-8859-1"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
         "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
   <head>
       <title>505 - HTTP Version Not Supported</title>
   </head>
   <body>
       <h1>505 - HTTP Version Not Supported</h1>
   </body>
</html>
 

CodeNameHawk

Moderator
Команда форума
@CodeNameHawk ЧИТД
@user228 с чего вы решили, что этот сайт должен принимать и обрабатывать ваши запросы?
Example Domain
This domain is established to be used for illustrative examples in documents. You may use this domain in examples without prior coordination or asking for permission.

А вот как использовать не ясно.
 

Сергей_Ф

Moderator
Команда форума
@CodeNameHawk вы же сами получили 505 на PUT запрос
505 HTTP VersionNotSupported Код состояния ошибки HTTP сервера 505: сервис недоступен


Если вы видите ошибку HTTP сервера с кодом 505, то это означает, что сервер не поддерживает или отказывается поддерживать версию HTTP протокола (кстати, версия — это очень важный параметр HTTP протокола, который определяет, как будет установлено HTTP соединение), указанную в запросе.
Для иллюстрации в документах! Про то что там можно что то менять и создавать ни строчки.
 
Последнее редактирование:

CodeNameHawk

Moderator
Команда форума
Про то что там можно что то менять и создавать ни строчки.
Так я им и не предъявляю претензии, что не создали ничего, но в запросе HTTP/1.1, а в ответе про HTTP/1.0
Я привел свой пример для ТС, так как у него на похожий код, возвращает 404, а у меня 505, а куда "путить" он сам найдет.
Ошибка 404 или Not Found («не найдено») — стандартный код ответа HTTP о том, что клиент был в состоянии общаться с сервером, но сервер не может найти данные согласно запросу. Ошибку 404 не следует путать с ошибкой «Сервер не найден» или иными ошибками, указывающими на ограничение доступа к серверу.
Не ясно, что сервер не нашел, скорее всего файл, который ТС пытается создать.

Получив код 505 (505 HTTP Version Not Supported) понятно, что делать дальше.
 
Последнее редактирование:
Сверху Снизу