Ошибка HTTP в esp32 при потоковой передаче аудио на wit.ai

#c #http #esp32 #chunked #wit-ai

#c #http #esp32 #фрагментированный #wit-ai

Вопрос:

У меня проблема, которая, как я полагаю, вызвана синтаксисом моего HTTP-запроса.

Я пытаюсь передать аудио в wit.ai API для распознавания речи, и я получаю connection reset by peer и 400 Bad request ошибку.

Вот мой код для запуска запроса:

 void startChunkedRequest(SSLClient client, String server, String endpoint)
{
  client.print(String("POST https://")   server   endpoint   " HTTP/1.1rn");
  client.print(String("Host: ")   server   "rn");
  client.print("Authorization: Bearer "TOKEN"rn");
  client.print("Content-Type: audio/raw;encoding=signed-integer;bits=8;rate=50000;endian=littlern");
  client.print("Transfer-Encoding: chunkedrn");
  client.print("rn");
}
  

И вот мой код для отправки буфера:

 void chunkedRequest(SSLClient client, uint8_t *buffer, size_t len)
{
   client.print(String(len, HEX).c_str());
   client.print("rn");
   client.write(buffer, len);
   client.print("rn");
}
  

Как только вызывается chunkedRequest функция, появляется ошибка.
Если вы знаете решение или что может вызвать проблему, пожалуйста, дайте мне знать.

Комментарии:

1. Если вы установили Transfer-Encoding: chunked , то вы должны правильно обрабатывать фрагментированную полезную нагрузку. Это также помогает сначала опробовать ваш код на вашем компьютере (вы можете написать тестовую программу и скопировать-вставить в нее код).

Ответ №1:

В вашей POST строке неверно указана конечная точка. Он не должен содержать протокол или сервер, только путь. Попробуйте это вместо:

   client.print(endpoint   " HTTP/1.1rn");
  

И убедитесь, что это endpoint начинается с / .

Комментарии:

1. Спасибо за быстрый ответ, но, к сожалению, у меня все еще есть похожая ошибка: сервер по-прежнему отправляет мне запрос 400: Bad, и соединение закрывается. Но ошибка немного отличается, поэтому, возможно, вы помогли мне решить часть проблемы.