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
  опции профиля:
сообщение 9.1.2010, 16:19
Сообщение #2


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

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

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




Репутация:   23  


NightMan15,
выложи этот загадочный index.html пожалуйста.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
NightMan15
  опции профиля:
сообщение 16.1.2010, 11:36
Сообщение #3


Новичок


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

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




Репутация:   0  


это обычная страничка Html, я его "подрезал" - убрал лишний код, чтоб форум не загружать.
а полная версия его такова:
<html>
<head>
  <title>TAU-72.IP Web Interface</title>
</head>
<link href="styles.css" rel="stylesheet" type="text/css">

<frameset cols="20%, 80%" frameborfer="no" border="0">
    <frame src="/goform/menu_handler" name="menubuttons">
    <frame src="/goform/main_config_handler" name="someshet">
</frameset>
</html>

с таким заголовком
HTTP/1.0 200 OK
Date: Thu Jan  1 00:37:03 1970
Last-modified: Fri Nov 28 03:18:59 2008
Content-length: 312
Content-type: text/html


Далее браузер выполняет запрос, например, по "/goform/menu_handler".
Сервер выдает также страницу, но в ответном заголовке нет HTTP/1.0 200 OK, и QNetworkReply (или кто там за получение инфы отвечает) думает, что "сервер не ответил" и выдает ошибку. А вот если бы в заголовке было бы HTTP/1.0 200 OK, то страницу бы он скачал.
Http-сервер (видимо, GoAhead) крутится на Linux, на ARM и программер просто забыл, видать, выдавать стандартный ответ на запрос страницы. Ну а троллям подавай все по стандарту (((
сейчас использую cUrl все заработало, но мне печально, что пришлось сторонние библиотеки использовать.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
kwisp
  опции профиля:
сообщение 16.1.2010, 13:35
Сообщение #4


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

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

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




Репутация:   23  


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

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


Новичок


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

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




Репутация:   0  


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

так вот я спрашиваю о том как это переопределить?
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
kwisp
  опции профиля:
сообщение 16.1.2010, 16:18
Сообщение #6


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

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

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




Репутация:   23  


NightMan15,
в коде надо искать где принимается сообщение сервера. искать можно по сигналам слотам по соединениям.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение

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


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




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