#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..