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

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: Установить заголовок QtWebKit  (Прочитано 7284 раз)
thechicho
Гость
« : Декабрь 24, 2011, 19:03 »

Код
C++ (Qt)
QWebPage *page = new QWebPage(this);
QNetworkRequest request;
request.setRawHeader("Accept-Language", "en-us,en;q=0.5");
request.setUrl(QUrl("http://www.site.com/"));
page->mainFrame()->load(QUrl(request));

при выполнении javascript
Код
C++ (Qt)
QWebElement submit = page->mainFrame()->findFirstElement("input[name=submit]");
submit.evaluateJavaScript("this.click()");

заголовок не отправляется и страница отдается на другом языке.
как его установить "на постоянку"?
Записан
thechicho
Гость
« Ответ #1 : Декабрь 24, 2011, 21:27 »

http://pgl.yoyo.org/http/browser-headers.php

User-Agent:           Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US) AppleWebKit/533.3 (KHTML, like Gecko) Qt/4.7.4 Safari/533.3
Accept:                   application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5
Connection:           Keep-Alive
Accept-Encoding:           gzip
Accept-Language:   en-US,*
Host:                           pgl.yoyo.org

вот заголовки, отправляемые браузером по умолчанию.
как мне поменять
en-US,*
на
en-US,en;q=0.8
 Непонимающий
Записан
fuCtor
Гость
« Ответ #2 : Декабрь 26, 2011, 12:56 »

Читай про:
void QWebPage::setNetworkAccessManager ( QNetworkAccessManager * manager )
и
QNetworkReply * QNetworkAccessManager::createRequest ( Operation op, const QNetworkRequest & req, QIODevice * outgoingData = 0 ) [virtual protected]
Записан
thechicho
Гость
« Ответ #3 : Декабрь 26, 2011, 18:34 »

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

Accept-Language:   en-US,*

это чо за заголовок ваще такой? баг это или как? с какого перепугу там звездочка вообще... как мне его сменить по дефолту???
Записан
fuCtor
Гость
« Ответ #4 : Декабрь 27, 2011, 21:00 »

Ставим свой менеджер, и насильно при формировании запроса прошиваем туда заголовки которые нам нужны. Это будет происходить как просто при загрузке страницы, так и при запросе через JS.
Записан
thechicho
Гость
« Ответ #5 : Декабрь 27, 2011, 21:46 »

я хз, код покажи
Записан
fuCtor
Гость
« Ответ #6 : Декабрь 30, 2011, 08:36 »

createRequest ( Operation op, const QNetworkRequest & req, QIODevice * outgoingData = 0 )
{
  QNetworkRequest my_req(req);
  req.setRawHeader("Accept-Language", "en-US,en;q=0.8" );
  return QNetworkAccessManager::createRequest(op, my_req, outgoingData);
}

как то так, за точность не ручаюсь, писал на коленке.
Записан
thechicho
Гость
« Ответ #7 : Декабрь 30, 2011, 15:01 »

дак будет возвращен QNetworkReply*
как его сюда-то прикрутить?
QWebPage::setNetworkAccessManager ( QNetworkAccessManager * manager )
Записан
fuCtor
Гость
« Ответ #8 : Декабрь 31, 2011, 06:24 »

Код
C++ (Qt)
class MySuperAccessManager : public QNetworkAccessManager
{
...
createRequest ( Operation op, const QNetworkRequest & req, QIODevice * outgoingData = 0 )
{
 QNetworkRequest my_req(req);
 req.setRawHeader("Accept-Language", "en-US,en;q=0.8" );
 return QNetworkAccessManager::createRequest(op, my_req, outgoingData);
}
...
}
 
QNetworkAccessManager * my_am = new QNetworkAccessManager();
web_view->page()->setNetworkAccessManager(my_am);
web_view->load("http://ya.ru");

Вот так понятней? А документацию нужно внимательно читать.
Записан
thechicho
Гость
« Ответ #9 : Декабрь 31, 2011, 20:41 »

спасибо, попробую! с НГ! Улыбающийся
Записан
bosfor
Гость
« Ответ #10 : Январь 27, 2012, 17:34 »

Код
C++ (Qt)
class MySuperAccessManager : public QNetworkAccessManager
{
...
createRequest ( Operation op, const QNetworkRequest & req, QIODevice * outgoingData = 0 )
{
 QNetworkRequest my_req(req);
 req.setRawHeader("Accept-Language", "en-US,en;q=0.8" );
 return QNetworkAccessManager::createRequest(op, my_req, outgoingData);
}
...
}
 
QNetworkAccessManager * my_am = new QNetworkAccessManager();
web_view->page()->setNetworkAccessManager(my_am);
web_view->load("http://ya.ru");

не вижу связи меду переопределенным классом и  my_am
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


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