Russian Qt Forum

Qt => Работа с сетью => Тема начата: Admin от Апрель 01, 2009, 11:35



Название: QHttp как замена curl
Отправлено: Admin от Апрель 01, 2009, 11:35
Нужно:
 Cделать консольную программку с dll. Программка загружает dll, и дергает из нее функцию getHTML(url).

Реализация:
1) Могу сделать на curl. Но так как прога на Qt, не вижу смысла тащить лишнюю либу.

2) С помощью QHttp. Но она использует сигналы и слоты. И я совсем не понимаю, как засунуть все в DLL,  ведь в DLL нет CoreApplication. Чето я уже тут неделю торможу :(


Название: Re: QHttp как замена curl
Отправлено: fuCtor от Апрель 01, 2009, 11:43
Вот не знаю то не то, но в документации по сокетам вычитал:
Цитировать
QAbstractSocket provides a set of functions that suspend the calling thread until certain signals are emitted. These functions can be used to implement blocking sockets:
waitForConnected() blocks until a connection has been established.
waitForReadyRead() blocks until new data is available for reading.
waitForBytesWritten() blocks until one payload of data has been written to the socket.
waitForDisconnected() blocks until the connection has closed.
If waitForReadyRead() returns false, the connection has been closed or an error has occurred.
Programming with a blocking socket is radically different from programming with a non-blocking socket. A blocking socket doesn't require an event loop and typically leads to simpler code. However, in a GUI application, blocking sockets should only be used in non-GUI threads, to avoid freezing the user interface. See the network/fortuneclient and network/blockingfortuneclient examples for an overview of both approaches.

Получается если есть возможность работать с сокетом в блокирующем режиме, то можно и реализовать аналог QHttp. Самого эта задачка заинтересовала, т.к. в скором будущем возможно понадобится именно синхронная реализация QHttp.


Название: Re: QHttp как замена curl
Отправлено: Admin от Апрель 01, 2009, 13:29
До уровня сокетов не хотелось бы опускаться. Тогда уж лучше curl поиcпользовать.


Название: Re: QHttp как замена curl
Отправлено: vipet от Апрель 01, 2009, 15:08
Admin,

Cокеты по сравнению с QHttp совсем ненамного сложнее, я юзал их. Разобраться будет быстро


Название: Re: QHttp как замена curl
Отправлено: Admin от Апрель 01, 2009, 15:35
Ну а с куками тоже работать на сокетах? Не я на сокетах точно не буду, если есть curl :)


Название: Re: QHttp как замена curl
Отправлено: vipet от Апрель 02, 2009, 12:07
с куками не работал


Название: Re: QHttp как замена curl
Отправлено: Mixolap от Апрель 02, 2009, 17:02
Посмотри на это творение: http://qt.shamangrad.net/doku.php?id=%D0%B1%D0%BB%D0%BE%D0%BA%D0%B8%D1%80%D1%83%D1%8E%D1%89%D0%B8%D0%B9_http


Название: Re: QHttp как замена curl
Отправлено: Admin от Апрель 02, 2009, 20:39
офигеть творение!
зачет - посмотрим!

еще нашел тут http://lists.trolltech.com/qt-interest/2006-04/msg00354.html

Они предлагают создать  тред (на пример в dll) обрабатывающий сообщения, типа:

Код
C++ (Qt)
void startQuery(...)
{
m_eventLoop = new QEventLoop(this);
connect(this, SIGNAL(singleQueryDone()), m_eventLoop, SLOT(quit()));
connect( qHttp, SIGNAL( requestFinished(int,bool) ), this,
SLOT( dataDone(int, bool) ) );
qHttp->request( header, QByteArray(), m_buffer );
}

КОРОЧЕ - буду пробовать.

+ еще 5 копеек:

http://www.erata.net/qt-boost/synchronous-http-request/