Russian Qt Forum
Апрель 20, 2024, 12:57 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: HTTPS POST Request  (Прочитано 2419 раз)
ti0
Новичок

Offline Offline

Сообщений: 38


Просмотр профиля
« : Ноябрь 10, 2015, 22:08 »

Написал класс, который отправляет post запрос на web сервис и возвращает ответ. Все работает, но только до того момента, пока не используется https. В нете ничего нету, Qt воовбще поддерживает https с ssl?
Записан
Aleksey_A
Гость
« Ответ #1 : Ноябрь 10, 2015, 22:47 »

да, QNetworkRequest, QNetworkReply вполне работают с https.
Примерно так:

mainwindow.h
Код:
#ifndef MAINWINDOW_H
#define MAINWINDOW_H

#include <QMainWindow>
#include <QNetworkAccessManager>
#include <QNetworkReply>

namespace Ui {
class MainWindow;
}

class MainWindow : public QMainWindow
{
    Q_OBJECT

public:
    explicit MainWindow(QWidget *parent = 0);
    ~MainWindow();

private slots:
    void on_pushButton_clicked();
    void httpFinished();

private:
    Ui::MainWindow *ui;

    QNetworkAccessManager networkManager;
    QNetworkReply *reply;
};

#endif // MAINWINDOW_H

mainwindow.cpp
Код:
#include "mainwindow.h"
#include "ui_mainwindow.h"
#include <QUrl>

MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::MainWindow)
{
    ui->setupUi(this);
}
//---------------------------------------------
MainWindow::~MainWindow()
{
    delete ui;
}
//---------------------------------------------
void MainWindow::on_pushButton_clicked()
{
    QUrl url("https://www.yandex.ru");
    QNetworkRequest request;
    request.setUrl(url);

    reply = networkManager.get(request);
    reply->ignoreSslErrors();
    connect(reply, SIGNAL(finished()),this, SLOT(httpFinished()));
}
//---------------------------------------------
void MainWindow::httpFinished()
{
    if (reply->error() != QNetworkReply::NoError) {
        qDebug() << QString("error: %1 (%2)").arg(reply->error()).arg(reply->errorString());
    } else {
        QString answer = reply->readAll();
        qDebug() << answer;
    }

    reply->deleteLater();
}

По поводу игнорирования ошибок SSL можно глянуть в документации на QNetworkReply::ignoreSslErrors(const QList<QSslError> & errors)
Я в примере использовал метод get, но у QNetworkAccessManager есть и post.
« Последнее редактирование: Ноябрь 10, 2015, 22:53 от Aleksey_A » Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


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