Russian Qt Forum

Qt => Работа с сетью => Тема начата: Cowcancry от Март 20, 2010, 23:16



Название: Post и get запросы, хедеры
Отправлено: Cowcancry от Март 20, 2010, 23:16
Где можно про это поподробнее прочитать? И очень желательно с примерами, т.к. говорится 0 уровень в этом..


Название: Re: Post и get запросы, хедеры
Отправлено: ecspertiza от Март 20, 2010, 23:25
Ты не поверишь :)

http://lmgtfy.com/?q=Http вот рас
http://ru.wikipedia.org/wiki/HTTP вот два


Название: Re: Post и get запросы, хедеры
Отправлено: Cowcancry от Март 21, 2010, 20:28
Это всё замечательно, но мне нужен простейший пример на Qt


Название: Re: Post и get запросы, хедеры
Отправлено: SimpleSunny от Март 21, 2010, 20:50
ТЫ не поверишь, но в документации (QNetworkAccessManager)

Код:
 QNetworkAccessManager *manager = new QNetworkAccessManager(this);
 connect(manager, SIGNAL(finished(QNetworkReply*)),
         this, SLOT(replyFinished(QNetworkReply*)));

 manager->get(QNetworkRequest(QUrl("http://qt.nokia.com")));


Название: Re: Post и get запросы, хедеры
Отправлено: Cowcancry от Март 22, 2010, 00:44
Я конечно понимаю, что это весело поиздеваться... Но я читал это и вот что получается..
Когда я
Код:
#include <QNetworkAccessManager>
выскакивает : error C2440: '<function-style-cast>' : cannot convert from 'const char [20]' to 'QUrl'
                     error C2514: 'QNetworkRequest' : class has no constructors
НО если я добавляю
Код:
#include <QNetworkRequest>
10 ошибок вида : 1>: error LNK2019: unresolved external symbol "__declspec(dllimport) public: __thiscall QNetworkRequest::~QNetworkRequest(void)" (__imp_??1QNetworkRequest@@QAE@XZ) referenced in function "public: void __thiscall First::LoadSite(void)" (?LoadSite@First@@QAEXXZ)

Помогите разобраться...




Название: Re: Post и get запросы, хедеры
Отправлено: pastor от Март 22, 2010, 00:59
Ты подключил сетевой модуль в своём pro-файле?

Цитировать
QT += network


Название: Re: Post и get запросы, хедеры
Отправлено: Cowcancry от Март 22, 2010, 15:35
Что за pro файл?
Я Компилю через VS2008
------
Спасибо сам нашёл ответ :)))


Название: Re: Post и get запросы, хедеры
Отправлено: Cowcancry от Март 22, 2010, 15:54
QNetworkAccessManager *manager = new QNetworkAccessManager(this);
 connect(manager, SIGNAL(finished(QNetworkReply*)),
         this, SLOT(replyFinished(QNetworkReply*)));

 QNetworkReply *reply = manager->get(QNetworkRequest(QUrl("http://qt.nokia.com")));

В конце получается, вся информация хранится в reply, но как её можно вывести в Label например?


Название: Re: Post и get запросы, хедеры
Отправлено: ecspertiza от Март 22, 2010, 16:49
Кури маны дальше, у тебя есть слот replyFinished(QNetworkReply*) и в нем тебе нужно будет проверять не было ли ошибок при выполнении запроса и возвращения результата, в этом слоте в экземпляре класса QNetworkReply будет храниться все что тебе нужно, читай ассистент :)


Название: Re: Post и get запросы, хедеры
Отправлено: Cowcancry от Март 23, 2010, 17:09
Вот к примеру я хочу сделать программу для ручного голосования на l2top.ru Т.к тут используются все запросы, cookie..
Народ, подскажите как составить правильно post ... Где поля:
cc9dfecb   // Это поле имеет "как будто" каждый раз новое имя
name
referer   //http://l2top.ru/vote/3118/
sec_referer   40059b144bfc1cdac2e7f35669724998d23598d5
voteOk   ok


Название: Re: Post и get запросы, хедеры
Отправлено: Cowcancry от Март 23, 2010, 22:45
Код:
void First::Send()
{
QNetworkAccessManager *man = new QNetworkAccessManager(this);
connect(man, SIGNAL(finished(QNetworkReply*)),this, SLOT(repFinish(QNetworkReply*)));
QNetworkRequest PostRequest;
PostRequest.setUrl((QUrl)"http://l2top.ru/vote/54/");
QString param = "referer=http%3A%2F%2Fl2top.ru%2Fvote%2F3118%2F&sec_referer=40059b144bfc1cdac2e7f35669724998d23598d5&voteOk=ok&f5c5f905="+ui.captchaLine->text()+"&name=Cowcancry";
QByteArray postz = param.toUtf8();
man->post(PostRequest,postz);


}
void First::repFinish(QNetworkReply* reply)
{
QString otvet;
switch (reply->error())
{
case 0: otvet = QString::fromUtf8(reply->readAll());
ui.myLabel -> setText(otvet);break;
default: ui.statusLabel->setText("Else Error");break;
}
reply->deleteLater();


}
Пытаюсь послать запрос с помощью   функции Send, но т.к. в Label оно пытается отобразить страницу, видно что оно возвращает Error...


Название: Re: Post и get запросы, хедеры
Отправлено: voronElf от Март 24, 2010, 06:49
в слоте при ошибке из reply вытащи на лабельку номер и описание ошибки, понятнее должно стать.

QNetworkAccessManager для каждого запроса свой создавать не стоит, его один делают на все запросы (я полем класса его делаю)


Название: Re: Post и get запросы, хедеры
Отправлено: Cowcancry от Март 24, 2010, 16:04
Я ошибся, ошибки как раз нету... Только я никак не могу понять, как ПРАВИЛЬНО получить капчу, ведь я обращаюсь на прямую к функциям getimg.php и 4na.php, которая возвращает рисунок...
И если я шлю post с ответом, то пишет что каптча не правильная...
Как правильно получить две капчи?


Название: Re: Post и get запросы, хедеры
Отправлено: voronElf от Март 25, 2010, 08:34
ну получаешь ты рисунок, а куда ты шлешь пост с ответом ? что это за ответ и откуда он взялся ? и в чем задача то именно здесь ? поподробнее ...


Название: Re: Post и get запросы, хедеры
Отправлено: Cowcancry от Март 25, 2010, 16:28
Есть сайт с голосованием l2top.ru, но там двойная капча
Я делаю GET  //http://l2top.ru/vote/54/ чтобы получить Cookie.
Потом делаю два GET'a с установленными куками, чтобы получить капчу...
Но когда я посылаю POST с ответом на капчу, мне возвращает что она не верна.
Меня смущает то, что при GET  //http://l2top.ru/vote/54/ каждый раз новое поле для ввода ответа с капчи, и выглядить оно так:
Код:
<!--// <input name='2fed8414' type='text' value='' class='num2' maxlength='14'> //--><!--// <input name='ed5d65d5' type='text' value='' class='num2' maxlength='14'> //--><!--// <input name='a3c4b058' type='text' value='' class='num2' maxlength='14'> //--><input name='e73ea100' type='text' value='' class='num2' maxlength='14'>
Их там больше гораздо...
+Обращение к капчам идёт /getimg.php?"+Math.random()+", хотя я посылаю GET по /getimg.php?54  (к примеру)


Название: Re: Post и get запросы, хедеры
Отправлено: voronElf от Март 26, 2010, 06:47
капча обычно отданное в рисунке значение в бд или файл на серваке пишет, есть уверенность, что скрипт getimg.php это делает, а не просто картинку выдает по числу ?