Как отправить данные обратно из PHP после HTTP Post в Qt?

#qt #network-programming #qtnetwork

#qt #сетевое программирование #qtnetwork

Вопрос:

Я использую этот код для создания простого HTTP Post (входа в систему)

    QNetworkAccessManager *nwam = new QNetworkAccessManager;

   QNetworkRequest request(QUrl("http://localhost/laptop/trylogin.php"));

   QByteArray data;
   QUrl params;

   QString userString(user);
   QString passString(pass);

   params.addQueryItem("user", userString );
   params.addQueryItem("pass", passString );
   data.append(params.toString());
   data.remove(0,1);

   QNetworkReply *reply = nwam->post(request,data);
  

Если протоколирование прошло успешно или нет, как мне отправить и прочитать ответ в Qt?

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

1. Все HTTP-методы имеют ответ. Итак, ваше приложение (какой бы метод ни использовался) должно получить что-то обратно.

2. Хорошо, но что это за объект, который хранит ответ в моем случае? И что я должен делать на стороне php?

3. Я не знаю Qt, но я думаю, что эта строка: «QNetworkReply *reply = nwam-> post(запрос, данные);» — это ответ на ваш первый вопрос; во-вторых, на стороне php вы действительно можете вернуть что угодно. Если вы ничего не сделали для ‘echo’, то, вероятно, это возвращает пустую строку, поэтому попробуйте вернуть что-нибудь и посмотрите, изменится ли содержимое ‘reply’. Кроме того, я думаю, что ‘data’ ничего не делает (по крайней мере, в том контексте, в котором это происходит сейчас), но я не знаю Qt, поэтому я могу ошибаться.

Ответ №1:

Вы получаете ответ в reply указателе. Используйте QNetworkReply::error() , чтобы увидеть, произошла ли ошибка.

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

1. Я получаю код NoError каждый раз, даже если файла там нет.

Ответ №2:

Вы можете перехватывать ответные сигналы, потому что это работает с сигналами и слотами.. Итак, вам нужно подключить слот к сигналу httpreadyread, отправленному reply, а затем прочитать ответ методом reply.ReadAll .. ПРОЧИТАЙТЕ документацию модуля qtnetwork..