10 / 10 / 2
Регистрация: 28.11.2013
Сообщений: 63
1

QNetworkAccessManager POST запрос

29.11.2013, 15:23. Показов 10977. Ответов 5
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Пытаюсь авторизоваться на сайт . Зашел в тупик, мозг уже отказывается обрабатывать инфу.

C++ (Qt)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
//формируем запрос и отправляем
void Widget::postDataToServer()
{
 
    QByteArray reqdata;    
    reqdata.append("username="+username.toUtf8());
    reqdata.append("&password="+password.toUtf8());
    reqdata.append("&return="+Return.toUtf8());
    reqdata.append("&"+Value1.toUtf8()+"=1");
 
    QNetworkRequest request;
    request.setUrl(QUrl("http://***********/index.php/fmeshchkshyafsshnf%3ftask%3duser.login"));
    request.setHeader(QNetworkRequest::ContentTypeHeader,"application/x-www-form-urlencoded");
 
 
    QNetworkAccessManager *manager2 = new QNetworkAccessManager(this);
    connect(manager2, SIGNAL(finished(QNetworkReply*)), this, SLOT(PostReplyFinished(QNetworkReply*)));
    manager2->post(request,reqdata);
}
C++ (Qt)
1
2
3
4
5
6
7
8
9
10
//получаем ответ
void Widget::PostReplyFinished(QNetworkReply *reply)
{
    QByteArray answer = reply->readAll();
    ui->plainTextEdit->setPlainText(reply->errorString());
    ui->plainTextEdit->appendPlainText(QString::fromUtf8(answer));
 
    reply->close();
 
}
Знаю что ошибка в этой строке, не могу понять как правильно её построить:
Код
request.setUrl(QUrl("http://***********/index.php/fmeshchkshyafsshnf%3ftask%3duser.login"));
Добавлено через 11 часов 44 минуты
Неужели никто не подскажет. Вот перехваченный снифом запрос:
[url]
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
29.11.2013, 15:23
Ответы с готовыми решениями:

QNetworkAccessManager post запрос cookies header
Отправляю post запрос для авторизации на сайте, заполнил все заголовки кроме "Cookie". Там куча...

QNetworkAccessManager POST запрос для авторизации
Только начала осваивать QNetworkAccessManager... Подскажите, пожалуйста, как правильно оформлять...

QNetworkAccessManager и QNetworkReply - GET\POST
Здравствуйте. Хотел бы очень многое узнать подробно о классах QNetworkAccessManager и...

QNetworkAccessManager отправка POST json
Собственно вопрос в названии темы, как это сделать? Мне нужно отправить post запрос - это я сделал,...

5
Эксперт С++
8385 / 6147 / 615
Регистрация: 10.12.2010
Сообщений: 28,683
Записей в блоге: 30
30.11.2013, 01:59 2
Пример QNetworkAccessManager последовательные запросы
0
10 / 10 / 2
Регистрация: 28.11.2013
Сообщений: 63
30.11.2013, 09:52  [ТС] 3
Avazart, вот вы пишете

Допустим нужно получить страничку "Мой кабинет" форума, для этого надо:

Авторизироваться на форуме- сделать POST запрос получить cookie;
И затем только можно сделать GET для страницы "Мой кабинет".

Где в вашем коде вы получаете куки? Я вижу только что вы отправляете

Добавлено через 7 часов 13 минут
Ура) Что-то начало получатся. Вообщем вот мой запрос:

C++ (Qt)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
//Отправляю POST запрос
void Widget::on_PostData_clicked()
{
    QByteArray reqdata;
 
    reqdata.append("username="+username.toUtf8());
    reqdata.append("&password="+password.toUtf8());
    reqdata.append("&return="+Return.toUtf8());
    reqdata.append("&"+Value1.toUtf8()+"=1");
 
    QNetworkRequest request;
    QUrl url("http://***********/index.php/fmeshchkshyafsshnf?task=user.login");
    request.setUrl(QUrl(url));
    request.setHeader(QNetworkRequest::ContentTypeHeader,"application/x-www-form-urlencoded");
 
    connect(manager, SIGNAL(finished(QNetworkReply*)), this, SLOT(PostReplyFinished(QNetworkReply*)));
    manager->post(request,reqdata);
}
И вот слот для обработки ответа:

C++ (Qt)
1
2
3
4
5
6
7
8
9
10
11
12
13
void Widget::PostReplyFinished(QNetworkReply *reply)
{
    if(reply->error() == QNetworkReply::NoError)
    {
        ui->webView->setUrl(reply->url());
    }
    else
    {
        ui->plainTextEdit->setPlainText("ERROR in POST: " + reply->errorString());
    }
 
    reply->deleteLater();
}
В ответ получаю URL . Пытаюсь его отобразить в WebView но пишет что время сессии истекло. Полагаю что на сервер данные успешно отправляются и обрабатываются, но видимо после отправки запроса и получение ответа сервер со мной дела больше не ведёт) Думаю тут нужно использовать Cookies'ы но как не могу понять. Ваш пример в этом плане к сожелению не помог(
Подскажите люди добрые
0
Эксперт С++
8385 / 6147 / 615
Регистрация: 10.12.2010
Сообщений: 28,683
Записей в блоге: 30
30.11.2013, 12:27 4
А что не понятно QNetworkAccessManager сам подхватывает куки, главное правильно сделать POST запрос.

Добавлено через 1 минуту
Цитата Сообщение от pb_dev Посмотреть сообщение
Вообщем вот мой запрос:
А пример вам на кой привел!!!
Эскейпить пароль/логин кто будет ?
0
10 / 10 / 2
Регистрация: 28.11.2013
Сообщений: 63
30.11.2013, 19:57  [ТС] 5
Цитата Сообщение от Avazart Посмотреть сообщение
Эскейпить пароль/логин кто будет ?
А по русски?
0
Эксперт С++
8385 / 6147 / 615
Регистрация: 10.12.2010
Сообщений: 28,683
Записей в блоге: 30
30.11.2013, 20:35 6
А по внимательнее ?

C++ (Qt)
1
 postData+= "vb_login_username=" +  QUrl::toPercentEncoding( userName.toUtf8() );
0
30.11.2013, 20:35
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
30.11.2013, 20:35
Помогаю со студенческими работами здесь

QNetworkAccessManager обработать запрос
Здравствуйте, не давно начал изучать qt, появился вопрос который не получается решить, необходимо...

Запрос урла через QNetworkAccessManager
Доброго времени суток. Сабж реализую так: Однако в репле пусто, почему? :( Спасибо

Послать POST запрос запрос с двумя и более параметрами?
Делаю так: string ProxyString = ""; string URI =...

Get запрос + куки + Post запрос
Добрый день. Подскажите как решить следующую ситуацию: 1. Нужно отправить get запрос. 2. В...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru