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

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: QHttp как замена curl  (Прочитано 9113 раз)
Admin
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 1988



Просмотр профиля
« : Апрель 01, 2009, 11:35 »

Нужно:
 Cделать консольную программку с dll. Программка загружает dll, и дергает из нее функцию getHTML(url).

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

2) С помощью QHttp. Но она использует сигналы и слоты. И я совсем не понимаю, как засунуть все в DLL,  ведь в DLL нет CoreApplication. Чето я уже тут неделю торможу Грустный
Записан
fuCtor
Гость
« Ответ #1 : Апрель 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.
Записан
Admin
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 1988



Просмотр профиля
« Ответ #2 : Апрель 01, 2009, 13:29 »

До уровня сокетов не хотелось бы опускаться. Тогда уж лучше curl поиcпользовать.
Записан
vipet
Бывалый
*****
Offline Offline

Сообщений: 452


Просмотр профиля
« Ответ #3 : Апрель 01, 2009, 15:08 »

Admin,

Cокеты по сравнению с QHttp совсем ненамного сложнее, я юзал их. Разобраться будет быстро
Записан
Admin
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 1988



Просмотр профиля
« Ответ #4 : Апрель 01, 2009, 15:35 »

Ну а с куками тоже работать на сокетах? Не я на сокетах точно не буду, если есть curl Улыбающийся
Записан
vipet
Бывалый
*****
Offline Offline

Сообщений: 452


Просмотр профиля
« Ответ #5 : Апрель 02, 2009, 12:07 »

с куками не работал
Записан
Mixolap
Гость
« Ответ #6 : Апрель 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
Записан
Admin
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 1988



Просмотр профиля
« Ответ #7 : Апрель 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/
« Последнее редактирование: Апрель 02, 2009, 20:58 от Admin » Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


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