crossplatform.ru

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

> Переназначить ответ HTTP сервера работая с QNetworkAccessManager, Обработка пустого ответа от HTTP-сервера
NightMan15
  опции профиля:
сообщение 29.12.2009, 17:07
Сообщение #1


Новичок


Группа: Новичок
Сообщений: 4
Регистрация: 29.12.2009
Пользователь №: 1345

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




Репутация:   0  


HTTP-сервер выдает в файле /index.html код для двух фреймов. При запросе /index.html сервер отправляет "200 ОК", а вот при получении запроса на ссылку фрейма нет, но сам html-код выдает. Выдает вместо "200 ОК" пустой заголовок. IE и Opera это умеют обрабатывать и все отображается. А вот как и демо пример \qt\demos\browser, у меня пишет
QNetworkRequest::HttpStatusCodeAttribute = 0
QNetworkRequest::HttpReasonPhraseAttribute = Data corrupted


Как бы мне этот пустой ответ переопределить на "хороший" (200 ОК), чтоб эту страничку загрузить?
Или хотя бы куда копать? Это выполняет QNetworkRequest, QNetworkReply или QNetworkAccessManager?

Вот мой код:
CODE

void MainApp::on_GetPage_clicked(){
QNetworkRequest request;
request.setRawHeader("Authorization", "Basic " +
QByteArray(QString("%1:%2").arg(USER).arg(PASS).toAscii()).toBase64());
request.setUrl(QUrl("http://192.168.6.10/index.html"));
//request.setUrl(QUrl("http://192.168.6.10/goform/general_config_handler"));
reply = manager->get(request);
}
void MainApp::downloadFinished(QNetworkReply *reply){
int status = reply->attribute(QNetworkRequest::HttpStatusCodeAttribute).toInt();
QString statusStr = reply->attribute(QNetworkRequest::HttpReasonPhraseAttribute).toString();
if (reply->attribute(QNetworkRequest::HttpStatusCodeAttribute).isNull()){
//reply->setAttribute(QNetworkRequest::HttpStatusCodeAttribute, 200);
//reply->setAttribute(QNetworkRequest::HttpReasonPhraseAttribute, "OK");
}
}


Я нашел небольшой код accessmanagerreply_p.cpp. Там есть функция
void AccessManagerReply::AccessManagerReplyPrivate::_k_redirection(KIO::Job* job, const KUrl& url)
но у меня она не работает (закомментировал).

Вот эта страничка cURL скачивается:

/index_html
CODE

== Info: About to connect() to 192.168.6.10 port 80 (#0)
== Info: Trying 192.168.6.10... == Info: connected
== Info: Connected to 192.168.6.10 (192.168.6.10) port 80 (#0)
== Info: Server auth using Basic with user 'admin'
=> Send header, 175 bytes (0xaf)
0000: GET /index.html HTTP/1.1
001a: Authorization: Basic YWRtaW46cm9vdHBhc3N3ZA==
0049: User-Agent: curl/7.19.7 (i386-pc-win32) libcurl/7.19.7 zlib/1.2.
0089: 3
008c: Host: 192.168.6.10
00a0: Accept: */*
00ad:
== Info: HTTP 1.0, assume close after body
<= Recv header, 17 bytes (0x11)
0000: HTTP/1.0 200 OK
<= Recv header, 32 bytes (0x20)
0000: Date: Thu Jan 1 01:28:48 1970
<= Recv header, 41 bytes (0x29)
0000: Last-modified: Fri Nov 28 03:18:59 2008
<= Recv header, 21 bytes (0x15)
0000: Content-length: 312
<= Recv header, 25 bytes (0x19)
0000: Content-type: text/html
<= Recv header, 2 bytes (0x2)
0000:
<= Recv data, 312 bytes (0x138)
0000: <html>.<head>. <title>Web Interface</title>.</head>.<
0040: link href="styles.css" rel="stylesheet" type="text/css"> ..<fram
0080: eset cols="20%, 80%" frameborfer="no" border="0">..<frame src="/
00c0: goform/menu_handler" name="menubuttons">..<frame src="/goform/ma
0100: in_config_handler" name="someshet">.</frameset>.</html>.
== Info: Closing connection #0


/general_config_handler
CODE

== Info: About to connect() to 192.168.6.10 port 80 (#0)
== Info: Trying 192.168.6.10... == Info: connected
== Info: Connected to 192.168.6.10 (192.168.6.10) port 80 (#0)
== Info: Server auth using Basic with user 'admin'
=> Send header, 194 bytes (0xc2)
0000: GET /goform/general_config_handler HTTP/1.1
002d: Authorization: Basic YWRtaW46cm9vdHBhc3N3ZA==
005c: User-Agent: curl/7.19.7 (i386-pc-win32) libcurl/7.19.7 zlib/1.2.
009c: 3
009f: Host: 192.168.6.10
00b3: Accept: */*
00c0:
<= Recv header, 2 bytes (0x2)
0000:
<= Recv data, 1682 bytes (0x692)
0000:
0002: <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
0043: <HTML>
004b: <head>
0053: <title>general configuration!!!</title>
0088: <meta http-equiv=Content-Type content="text/html;charset=windows
00c8: -1251">
00d1: <meta http-equiv="Pragma" content="no-cache">
0100: <META HTTP-EQUIV="REFRESH" CONTENT="600">
017d:
017f: <link href="../styles.css" rel="stylesheet" type="text/css">
01bd:
01bf: <script language="JavaScript" type="text/javascript">
05af: </head>
05b8:
05ba: <BODY">
099a: .</BODY>.
09a5: </HTML>
09ae:
== Info: Connection #0 to host 192.168.6.10 left intact
== Info: Closing connection #0


Очень надеюсь на помощь!
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
 
Начать новую тему
Ответов
kwisp
  опции профиля:
сообщение 16.1.2010, 13:35
Сообщение #2


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

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

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




Репутация:   23  


ну раз так надо полез бы а нутро тролевского браузера узнал бы как он принимает ответы сервера. я подозреваю через QNetworkAccessManager.
переопределил бы пустой ответ на положительный.
можно по коду поискать "200" "QNetworkAccessManager" и прочее.
если не ошибаюсь можно даже в устанавливать QNetworkAccessManager для каждой QWebView, остается в коде найти место где создаются QWebView и давать им свой исправленый QNetworkAccessManager.
это как вариант.

П.С.
а вообще тролли думаю правы на счет считать ответ с пустым заголовком ошибочным.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
NightMan15
  опции профиля:
сообщение 16.1.2010, 16:14
Сообщение #3


Новичок


Группа: Новичок
Сообщений: 4
Регистрация: 29.12.2009
Пользователь №: 1345

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




Репутация:   0  


Цитата(kwisp @ 16.1.2010, 14:35) *
переопределил бы пустой ответ на положительный.
можно по коду поискать "200" "QNetworkAccessManager" и прочее.

так вот я спрашиваю о том как это переопределить?
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение

Сообщений в этой теме


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


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




RSS Текстовая версия Сейчас: 4.1.2025, 19:12