Russian Qt Forum

Qt => Работа с сетью => Тема начата: Вудруф от Март 09, 2006, 12:19



Название: QHttp и SSL
Отправлено: Вудруф от Март 09, 2006, 12:19
Их можно как-нибудь связать? Если нет, то подскажите, пожалуйста, другие решения.
Требуется получать данные по https через прокси-сервер с авторизацией на нём.


Название: QHttp и SSL
Отправлено: Sergeich от Март 09, 2006, 16:31
В Solutions есть класс QtSslSocket, можешь юзать его и QHttp::setSocket. Залить можно с http://qt.tttxp.ru/HTML/s4.htm


Название: QHttp и SSL
Отправлено: Вудруф от Март 10, 2006, 08:34
Спасибо


Название: QHttp и SSL
Отправлено: Вудруф от Март 13, 2006, 09:39
Не работает... До тех пор, пока я не вызываю QHttp::setSocket, всё работает. И прокси, и пароль, и запросы. А после вызова - программа виснет на QHttp::get :(
Причём не обязательно при работе с прокси, попробовал работать и с локальным сервером. Та же ерунда... В чём может быть дело?


Название: QHttp и SSL
Отправлено: Вудруф от Март 16, 2006, 07:32
QHttp::setSocket нужно вызывать уже после авторизации на Proxy-сервере? Равно как и создавать QtSslSocket из обычного?

добавлено спустя 35 минут:

 
Код:

#include <QCoreApplication>
#include <QHttp>
#include <QUrl>

#include "qtsslsocket.h"

#include "signal.h"

#include "https.h"

QCoreApplication *app;
QHttp *http;
SignalClass *signalClass;
QtSSLSocket *socket;

class Error{};

void initQHttp (char *proxy, int port, char *user, char *pwd)
{
if (!app)
{
int a = 0;
app = new QCoreApplication (a, (char**)0);
http = new QHttp (app);
socket = new QtSSLSocket (QtSSLSocket::Client, 0, app);
signalClass = new SignalClass;

QObject::connect (http, SIGNAL (done (bool)), signalClass, SLOT (isDone (bool)));
}
if (!user)
user = "";
if (!pwd)
pwd = "";
if (proxy)
http -> setProxy (proxy, port, user, pwd);
}

char * getURI (char *path)
{
if (!app)
throw Error();

QUrl url (path);
int port = url.port();
if (port == -1)
if (url.scheme() == "https")
port = 443;
else
port = 80;

http -> setHost (url.host(), port);

if (url.scheme() == "https")
{
socket -> moveToThread (http -> thread());
http -> setSocket (socket);
}

http -> get (url.path() + '?' + url.encodedQuery());

while (!(signalClass -> isFinished()))
app -> processEvents();
if (signalClass -> isError())
throw Error();
QByteArray a = http -> readAll();
char *b = new char [strlen(a.constData()) + 1];
strcpy (b, a.data());
return b;
}


добавлено спустя 1 минуту:

 Тут много чего неправильно, но запрос всего один. Я просто разбираюсь с QHttp и SSL.