crossplatform.ru

Здравствуйте, гость ( Вход | Регистрация )

2 страниц V   1 2 >  
Ответить в данную темуНачать новую тему
> установка куков в QNetworkAccessManager вручную
eldar85
  опции профиля:
сообщение 21.9.2010, 21:31
Сообщение #1


программист
***

Группа: Участник
Сообщений: 283
Регистрация: 2.1.2010
Из: Москва
Пользователь №: 1348

Спасибо сказали: 0 раз(а)




Репутация:   0  


Как можно установить куки вручную, строкой а не с помощью того что не видно типа setCookieJar который распологает куки в каком то невидемом файле. Мне нужно что то типа такого как в курле
curl_easy_setopt(curl, CURLOPT_COOKIE, cookie.c_str());

где cookie.c_str() и есть куки которые мы спарсили.
не могу понять систему формирования хидера в QNetworkAccessManager .
Заранее благодарю за ответы)

вот есть такой код закачивает страницу, но мне нужно скачивать картинку с куками установленными(выпарсенными) из хидера и чтобы его спокойно можно было вставить в куки при загрузки страницы и не бояться что будет использована не та кука) очень нужно имено так сделать.

 QEventLoop loop;
           QNetworkAccessManager manager;
           QNetworkReply *reply = manager.get( QNetworkRequest( QUrl( "http://www.opennet.ru/docs/RUS/qt3_prog/c7638.html" ) ) );

           QObject::connect( reply, SIGNAL( finished() ), &loop, SLOT( quit() ) );
           loop.exec();

           qDebug() << reply->error() << reply->bytesAvailable();
           QByteArray buf = reply->readAll();
           QFile file( "save1.txt" );
           if( file.open( QIODevice::WriteOnly ) )
           {
                   file.write( buf );
           }




я так понимаю что все параметры хидера устанавливаются в
QNetworkRequest request;

Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
eldar85
  опции профиля:
сообщение 22.9.2010, 9:09
Сообщение #2


программист
***

Группа: Участник
Сообщений: 283
Регистрация: 2.1.2010
Из: Москва
Пользователь №: 1348

Спасибо сказали: 0 раз(а)




Репутация:   0  


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

вот это вот совсем не пойму как можно воткнуть в request
enum     KnownHeaders { ContentTypeHeader, ContentLengthHeader, LocationHeader, LastModifiedHeader, CookieHeader, SetCookieHeader }
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
kwisp
  опции профиля:
сообщение 22.9.2010, 9:26
Сообщение #3


астарожна ынтжинэр
*****

Группа: Участник
Сообщений: 1404
Регистрация: 26.11.2008
Из: ТаганрогРодинаЧехова
Пользователь №: 435

Спасибо сказали: 113 раз(а)




Репутация:   23  


Цитата
void QNetworkRequest::setHeader ( KnownHeaders header, const QVariant & value )
Sets the value of the known header header to be value, overriding any previously set headers. This operation also sets the equivalent raw HTTP header.

See also KnownHeaders, setRawHeader(), and header().

не то?
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
eldar85
  опции профиля:
сообщение 22.9.2010, 9:29
Сообщение #4


программист
***

Группа: Участник
Сообщений: 283
Регистрация: 2.1.2010
Из: Москва
Пользователь №: 1348

Спасибо сказали: 0 раз(а)




Репутация:   0  


да это я читал, только разобраться все равно не могу, там ни одного примера... в сети такие примеры только с использованием курла, а хочется поработать с сетью с помощью Qt.
еще не могу установить так чтобы ответ сервера приходил не просто тело странички а еще и хидер странички.

вот пробую как то так
request.setRawHeader("ContentTypeHeader", "text/html; charset=utf-8");
    request.setRawHeader("User-Agent", "Mozilla/5.0 (Windows; U; Windows NT 5.1; ru; rv:1.9.2.8) Gecko/20100722 MRA 5.6 (build 03402) Firefox/3.6.8 (.NET CLR 3.5.30729) sputnik 2.0.1.41 WebMoney Advisor");


ну и тут же остальное но какой то бред получается....
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
kwisp
  опции профиля:
сообщение 22.9.2010, 9:35
Сообщение #5


астарожна ынтжинэр
*****

Группа: Участник
Сообщений: 1404
Регистрация: 26.11.2008
Из: ТаганрогРодинаЧехова
Пользователь №: 435

Спасибо сказали: 113 раз(а)




Репутация:   23  


Цитата(eldar85 @ 22.9.2010, 10:28) *
еще не могу установить так чтобы ответ сервера приходил не просто тело странички а еще и хидер странички.

ну это ты брось!
методы QNetworkReplay:
Цитата
bool hasRawHeader ( const QByteArray & headerName ) const
QVariant header ( QNetworkRequest::KnownHeaders header ) const
QByteArray rawHeader ( const QByteArray & headerName ) const
QList<QByteArray> rawHeaderList () const

чего не понятного? изучай ассистент и вперед.

Цитата(eldar85 @ 22.9.2010, 10:29) *
но какой то бред получается....

какой бред?
почему из тебя всё надо выпытывать?

П.С.
знаешь такой анекдот есть:
Больной:
-Доктор у меня что-то болит где-то вот здесь.
Доктор:
-Очень хорошо, сейчас я вам выпишу какое-то лекарство!
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
eldar85
  опции профиля:
сообщение 22.9.2010, 9:48
Сообщение #6


программист
***

Группа: Участник
Сообщений: 283
Регистрация: 2.1.2010
Из: Москва
Пользователь №: 1348

Спасибо сказали: 0 раз(а)




Репутация:   0  


)))))) да пользуюсь я асистентом но не пойму как это написать, примеров там нет а додумать не получается, потому и спрашиваю сдесь

вот есть код

    QEventLoop loop;
    QNetworkAccessManager manager;
    QNetworkRequest request;



    request.setUrl(QUrl("http://www.google.ru"));
    request.setRawHeader("Accept-Charset", "text/html; charset=utf-8");
    request.setRawHeader("User-Agent", "Mozilla/5.0 (Windows; U; Windows NT 5.1; ru; rv:1.9.2.8) Gecko/20100722 MRA 5.6 (build 03402) Firefox/3.6.8 (.NET CLR 3.5.30729) sputnik 2.0.1.41 WebMoney Advisor");
//куки как я понимаю можно вставить сдесь как я вставил юзер агента
    
    
    QNetworkReply *reply = manager.get( request );
    QObject::connect( reply, SIGNAL( finished() ), &loop, SLOT( quit() ) );

    loop.exec();

    qDebug() << reply->error() << reply->bytesAvailable();

    QByteArray buf = reply->readAll();
    ui->textBrowser->setText(buf);


мне нужно чтобы он возращал ответ странички с хидером и чтобы я мог установить в него куки. пока ответ приходит лишь голая страничка без хидера.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Litkevich Yuriy
  опции профиля:
сообщение 22.9.2010, 10:02
Сообщение #7


разработчик РЭА
*******

Группа: Сомодератор
Сообщений: 9669
Регистрация: 9.1.2008
Из: Тюмень
Пользователь №: 64

Спасибо сказали: 807 раз(а)




Репутация:   94  


вот тут какой-то пример
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
kwisp
  опции профиля:
сообщение 22.9.2010, 10:11
Сообщение #8


астарожна ынтжинэр
*****

Группа: Участник
Сообщений: 1404
Регистрация: 26.11.2008
Из: ТаганрогРодинаЧехова
Пользователь №: 435

Спасибо сказали: 113 раз(а)




Репутация:   23  


Цитата(eldar85 @ 22.9.2010, 10:48) *
пока ответ приходит лишь голая страничка без хидера.

Цитата(kwisp @ 22.9.2010, 10:35) *
у это ты брось!
методы QNetworkReplay:
Цитата
bool hasRawHeader ( const QByteArray & headerName ) const
QVariant header ( QNetworkRequest::KnownHeaders header ) const
QByteArray rawHeader ( const QByteArray & headerName ) const
QList<QByteArray> rawHeaderList () const

Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
eldar85
  опции профиля:
сообщение 22.9.2010, 11:44
Сообщение #9


программист
***

Группа: Участник
Сообщений: 283
Регистрация: 2.1.2010
Из: Москва
Пользователь №: 1348

Спасибо сказали: 0 раз(а)




Репутация:   0  


Вот так вот выставляется хидер, можно сюда еще добавить значений которые известны.
request.setUrl(QUrl("http://....));
    request.setRawHeader("Accept-Charset", "windows-1251,utf-8;q=0.7,*;q=0.7");
    request.setRawHeader("User-Agent", "Mozilla/5.0 (Windows; U; Windows NT 5.1; ru; rv:1.9.2.8) Gecko/20100722 MRA 5.6 (build 03402) Firefox/3.6.8 (.NET CLR 3.5.30729) sputnik 2.0.1.41 WebMoney Advisor");
    request.setRawHeader("Cookie", "....");


осталось понять как парсить куки

вот эта строка
QList<QByteArray> rawHeaderList () const

взращает только названия типа
"User-Agent", "Cookie", "Host" ....
но само значение не показывает.
bool hasRawHeader ( const QByteArray & headerName ) const

это просто показывает вернулся ли заголовок или его вообще нет.


а вот эти два не пойму как использовать
QVariant header ( QNetworkRequest::KnownHeaders header ) const
QByteArray rawHeader ( const QByteArray & headerName ) const
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
eldar85
  опции профиля:
сообщение 22.9.2010, 13:09
Сообщение #10


программист
***

Группа: Участник
Сообщений: 283
Регистрация: 2.1.2010
Из: Москва
Пользователь №: 1348

Спасибо сказали: 0 раз(а)




Репутация:   0  


что в него то вписывать
reply->rawHeader (а тут что писать то???);


qDebug() << reply->rawHeader("Set-Cookie");

поиск нужного в хидере производиться вот так, то что нужно искать берется из снифера и вставляется в этот код. Эта строка кода вернет нам значение Set-Cookie
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение

2 страниц V   1 2 >
Быстрый ответОтветить в данную темуНачать новую тему
Теги
Нет тегов для показа


1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0




RSS Текстовая версия Сейчас: 22.12.2024, 5:14