Russian Qt Forum
Ноябрь 13, 2019, 16:51 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: Пустое тело в PATCH запросе  (Прочитано 1675 раз)
maks1596
Новичок

Offline Offline

Сообщений: 26


Просмотр профиля
« : Январь 29, 2018, 17:19 »

При отправлении PATCH-запроса через QNetworkAccessManager::sendCustomRequest(...) на сервере возникает внутренняя ошибка из-за того, что тело запроса приходит пустое.
Сам JSON не пустой. Пустое тело перехватил через Postman.

Код:
QNetworkReply *Requester::sendCustomRequest(QNetworkRequest &request,
                                            const QString &type,
                                            const QJsonObject &json) {
    request.setRawHeader("HTTP", type.toUtf8());
    QByteArray dataByteArray = jsonToByteArray(json);

    QBuffer *buff = new QBuffer();
    buff->open(QIODevice::ReadWrite);
    buff->write(dataByteArray);
    buff->seek(0);

    QNetworkReply* reply = pimpl->networkAccessManager
                                 .sendCustomRequest(request, type.toUtf8(), buff);
    buff->setParent(reply);
    return reply;
}

inline
QByteArray jsonToByteArray(const QJsonObject &json) {
    return QJsonDocument(json).toJson();
}
« Последнее редактирование: Январь 29, 2018, 18:58 от maks1596 » Записан
kambala
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 4092



Просмотр профиля WWW
« Ответ #1 : Январь 30, 2018, 00:57 »

я так отправляю PATCH-запрос, все работает:
Код
C++ (Qt)
auto buf = new QBuffer;
buf->buffer() = data; // QByteArray
auto deleteBufLambda = [buf]{ delete buf; };
 
if (buf->open(QIODevice::ReadOnly))
{
   auto reply = _qnam->sendCustomRequest(request, "PATCH", buf);
   connect(reply, &QNetworkReply::finished, [deleteBufLambda]{
       deleteBufLambda();
   });
}
else
   deleteBufLambda();
Записан

Изучением C++ вымощена дорога в Qt.

UTF-8 has been around since 1993 and Unicode 2.0 since 1996; if you have created any 8-bit character content since 1996 in anything other than UTF-8, then I hate you. © Matt Gallagher
Old
Джедай : наставник для всех
*******
Online Online

Сообщений: 4173



Просмотр профиля
« Ответ #2 : Январь 30, 2018, 01:58 »

Камрады, есть вариант метода sendCustomRequest, который в качестве данных принимает QByteArray. Зачем эти движения с QBuffer?
Записан
maks1596
Новичок

Offline Offline

Сообщений: 26


Просмотр профиля
« Ответ #3 : Январь 30, 2018, 15:39 »

Камрады, есть вариант метода sendCustomRequest, который в качестве данных принимает QByteArray. Зачем эти движения с QBuffer?

Затем, что данная перегрузка появилась только в Qt 5.8, а у меня версия на единичку не дотягивающая до сей фичи. Нужно же, чтобы работало на древних компах с XP, которая выше 5.7 не воспринимает.
Записан
maks1596
Новичок

Offline Offline

Сообщений: 26


Просмотр профиля
« Ответ #4 : Январь 30, 2018, 18:43 »

я так отправляю PATCH-запрос, все работает.

Вы правы. Всё действительно работает. Оставлю тут компиляцию из моего и Вашего рабочего кода.
Код
C++ (Qt)
QNetworkReply* sendCustomRequest(QNetworkRequest &request,
                                const QString &type,
                                const QJsonObject &json) {
   auto buffer = new QBuffer;
   buffer->buffer() = jsonToByteArray(json);
   QNetworkReply *reply;
 
   if (buffer->open(QIODevice::ReadOnly)) {
       reply = pimpl->networkAccessManager
                    .sendCustomRequest(request, type.toUtf8(), buffer);
       connect(reply, &QNetworkReply::finished,
               buffer, &QBuffer::deleteLater);
   } else {
       buffer->deleteLater();
   }
   return reply;
}
 
inline
QByteArray jsonToByteArray(const QJsonObject &json) {
   return QJsonDocument(json).toJson();
}
 
Записан
kambala
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 4092



Просмотр профиля WWW
« Ответ #5 : Январь 31, 2018, 03:29 »

Камрады, есть вариант метода sendCustomRequest, который в качестве данных принимает QByteArray. Зачем эти движения с QBuffer?
а я под 5.6 писал Улыбающийся
Записан

Изучением C++ вымощена дорога в Qt.

UTF-8 has been around since 1993 and Unicode 2.0 since 1996; if you have created any 8-bit character content since 1996 in anything other than UTF-8, then I hate you. © Matt Gallagher
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.091 секунд. Запросов: 22.