Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Как получить тело ответа HTTP запроса
Форум на CrossPlatform.RU > Библиотеки > Qt > Qt Ввод/Вывод, Сеть. Межпроцессное взаимодействие
silverserferrapstar
Не могу получить ответ на запрос данного вида.
void Service::activate()
{
    request.setUrl(QUrl("http://***/"));
    request.setHeader(QNetworkRequest::ContentTypeHeader, "application/x-www-form-urlencoded");
    CIniConfig cfg;
    cfg.readIniConfig();
    QByteArray req_arg;
    req_arg.append("c=595529");

    manager = new QNetworkAccessManager;
    reply = manager->post(request,req_arg);
    connect(manager, SIGNAL(finished(QNetworkReply *)), this, SLOT(responseReceived(QNetworkReply *)));
}

void Service::responseReceived(QNetworkReply * reply)
{
    QString answer = QString::fromUtf8(reply->readAll());
    qDebug()<<"Good! "<< answer;
    reply->abort();
    reply->deleteLater();
}


В итоге получаю только строку Good! причем два раза, хотя вызываю один раз метод.
Что делаю не так?
mishapk
Тебе надо вывести данные в текстовон поле.
 ui->textBrowser->setText(reply->readAll());

Я тоже сейчас над этим работаю.

Сейчас другая проблема. Данные не появляются так как происходит редирект страницы.
У меня. Если ввести правильный логин/пароль. Происходит редирект на главную страницу, при этом не каких данных не показывает. Если не правильно, остаюсь на этой же и мне выводит на экран страницу с сообщением об ошибке.

Единственный вариан проверять произошел ли при этом редирект страницы.
QVariant varRedirect = reply->attribute(QNetworkRequest::RedirectionTargetAttribute);
QUrl urlRedirect = varRedirect.toUrl();
qDebug() << "Redirection url: " << urlRedirect.toString();





Ура Редирект тоже получилось победитью.
Если получили редирект то открываем новую страницу при помощи get с новым url.
manager->get(QNetworkRequest(urlRedirect));

Подсмотрел тут
Как сделать post запрос
1) тут
2) тут


Раскрывающийся текст

#include "mainwindow.h"
#include "ui_mainwindow.h"

MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::MainWindow)
{
    ui->setupUi(this);

     manager= new QNetworkAccessManager(this);
     connect( manager,SIGNAL(finished(QNetworkReply*)),this,SLOT(finished(QNetworkReply*)));
}

MainWindow::~MainWindow()
{
    delete ui;
}

void MainWindow::on_pushButton_clicked()
{

  QUrl params;
  params.addQueryItem("LoginForm[username]", ui->lineEdit_Login->text());
  params.addQueryItem("LoginForm[password]", ui->lineEdit_Password->text());
// params.addQueryItem("yt0", "Login");
  qDebug("%s",qPrintable(QString(params.encodedQuery())));


  QNetworkRequest request(QUrl(ui->lineEdit_URL->text()));
request.setHeader(QNetworkRequest::ContentTypeHeader, "application/x-www-form-urlencoded");

  manager->post(request, params.encodedQuery());
}

void MainWindow::finished(QNetworkReply *reply)
{
    if(reply->error() == QNetworkReply::NoError)
    {
        reply->attribute(QNetworkRequest::RedirectionTargetAttribute);
        ui->textBrowser->setText(reply->readAll());
        //ui->webView->setUrl(reply->url());
        QVariant varRedirect = reply->attribute(QNetworkRequest::RedirectionTargetAttribute);
           QUrl urlRedirect = varRedirect.toUrl();
           if(!urlRedirect.isEmpty())
           {
            ui->webView->setUrl(urlRedirect);
            qDebug() << "Redirection url: " << urlRedirect.toString();
            manager->get(QNetworkRequest(urlRedirect));
           }
    qDebug("OK--------------");
    qDebug(reply->readAll());
    }
    else
    {
        ui->textBrowser->setText(reply->errorString());
        qDebug("Error---------");
    }
}

neochapay
А если мне нужно получить ответ в виде например переменной QByteArray ?

Вот например мой говнокод
Функция connecter::finish_get она как слот и должна быть void если я ни чего не путаю, а мне надо получить отзыв как QByteArray ... как мне быть?

Сорри за нубский вопрос...
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Форум IP.Board © 2001-2018 IPS, Inc.