crossplatform.ru

Здравствуйте, гость ( Вход | Регистрация )

 
Ответить в данную темуНачать новую тему
> Как получить тело ответа HTTP запроса
silverserferrapstar
  опции профиля:
сообщение 17.9.2014, 22:07
Сообщение #1


Новичок


Группа: Новичок
Сообщений: 1
Регистрация: 17.9.2014
Пользователь №: 4230

Спасибо сказали: 0 раз(а)




Репутация:   0  


Не могу получить ответ на запрос данного вида.
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
  опции профиля:
сообщение 28.9.2014, 13:52
Сообщение #2


Новичок


Группа: Новичок
Сообщений: 4
Регистрация: 7.12.2013
Пользователь №: 4001

Спасибо сказали: 0 раз(а)




Репутация:   0  


Тебе надо вывести данные в текстовон поле.
 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
  опции профиля:
сообщение 6.11.2014, 14:25
Сообщение #3


Новичок


Группа: Новичок
Сообщений: 3
Регистрация: 14.5.2008
Пользователь №: 174

Спасибо сказали: 0 раз(а)




Репутация:   0  


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

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

Сорри за нубский вопрос...
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение

Быстрый ответОтветить в данную темуНачать новую тему
Теги
Нет тегов для показа


1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0




RSS Текстовая версия Сейчас: 29.3.2024, 13:53