Russian Qt Forum

Qt => Работа с сетью => Тема начата: Maz от Ноябрь 09, 2006, 03:02



Название: Помогите с http протоколом
Отправлено: Maz от Ноябрь 09, 2006, 03:02
Проблемка такая. Нужно получить исходный текст странички с URL такого вида: "http://www.kinopoisk.ru/level/1/id_film/435/". Т.е. не понятно какой файл закачивать(я так понимаю что он не обязательно должен быть index.*, все зависит от настроек веб-сервера). Еще не понятно как быть с редиректами, а особенно с java-скриптовыми редирактами. Можно это как-то реализовать?


Название: Помогите с http протоколом
Отправлено: DenKor от Ноябрь 09, 2006, 11:25
должен быть index.htm,index.html. Все остальное зависит от настроек браузера клиента и интерпритации их сервером.

А в чем вопрос собственно.
На твой пакет с запросом странички "http://www.kinopoisk.ru/level/1/id_film/435/", тебе придет пакет html кодом отображаемой странички.


Название: Помогите с http протоколом
Отправлено: SLiDER от Ноябрь 09, 2006, 13:24
Цитата: "DenKor"
А в чем вопрос собственно.
На твой пакет с запросом странички "http://www.kinopoisk.ru/level/1/id_film/435/", тебе придет пакет html кодом отображаемой странички.

Именно так. В большинстве случаев  :wink:

Цитата: "Maz"
Еще не понятно как быть с редиректами, а особенно с java-скриптовыми редирактами. Можно это как-то реализовать?

А вот это уже сами, ручками.


Название: Помогите с http протоколом
Отправлено: Maz от Ноябрь 09, 2006, 19:03
При использовании стандартного примера по запросам
"http://www.kinopoisk.ru/level/1/id_film/435/index.html" и
"http://www.kinopoisk.ru/level/1/id_film/435/index.htm" мне приходит пустой файл.

добавлено спустя 31 секунду:

 При использовании стандартного примера по запросам
"http://www.kinopoisk.ru/level/1/id_film/435/index.html" и
"http://www.kinopoisk.ru/level/1/id_film/435/index.htm" мне приходит пустой файл.

Если у Вас есть какой-то примерчик поделитесь пожалуйста.


Название: Помогите с http протоколом
Отправлено: Вудруф от Ноябрь 10, 2006, 08:02
index.html или index.htm не обязательны
Получай "http://www.kinopoisk.ru/level/1/id_film/435/" и разбирай руками заголовки HTTP, элементы META и JavaScript-сценарии на <BODY onload="..."> и <SCRIPT...>


Название: Помогите с http протоколом
Отправлено: Maz от Ноябрь 11, 2006, 16:07
Такой код:
   http.setHost("www.nbis.com.ua");
   http.get("/index.php", &file);

у меня отрабатывает, и приходит файл со странице, а вот
   http.setHost("www.kinopoisk.ru");
   http.get("/level/1/id_film/435/index.htm", &file);
тоже отрабатывает без ошибок, но файл приходит 0 байт.
Никак не могу понять почему. Помогите разобраться.


Название: Помогите с http протоколом
Отправлено: bigirbis от Ноябрь 11, 2006, 18:16
А QHttp::State какой?


Название: Помогите с http протоколом
Отправлено: Dendy от Ноябрь 11, 2006, 18:17
Скорее всего файл просто не бьІл предварительно открьІт для записи. QHttp ведь получает ссьІлку не на QFile, а на QIODevice. Попробуй загрузить в память, а не в файл.


Название: Помогите с http протоколом
Отправлено: Maz от Ноябрь 12, 2006, 19:21
Когда приходит сигнал done() State=5 (Connected).
Попробовал вот так:
   buffer = new QBuffer(&byteArray);
   buffer->open(QIODevice::WriteOnly);
   http.setHost("www.kinopoisk.ru");
   http.get("/level/1/id_film/435/", buffer);
Тоже ничего не получилось, byteArray.size = 0.
Самое главное что сигнал done() приходит практически сразу после http.get().


Название: Помогите с http протоколом
Отправлено: Dendy от Ноябрь 12, 2006, 21:20
А чему равен флаг error, что приходит с сигналом done( bool error )?


Название: Помогите с http протоколом
Отправлено: Maz от Ноябрь 13, 2006, 20:12
error=false

добавлено спустя 17 часов 45 минут:

 Неужели ни у кого не получилось получить страничку?


Название: Помогите с http протоколом
Отправлено: Вячеслав от Ноябрь 13, 2006, 20:22
А чем стандартный пример не катит ?
examples\network\http\  ? Нормально работает ..... вроде ..... Ы ?


Название: Помогите с http протоколом
Отправлено: Maz от Ноябрь 14, 2006, 20:21
Лично у меня стандартный пример не закачивает страничку http://www.kinopoisk.ru/level/1/id_film/435/.


Название: Помогите с http протоколом
Отправлено: Dendy от Ноябрь 14, 2006, 22:43
Аналогично, свой пример тоже. Наверное, ето особенности HTTP протокола. Интересно бьІло бьІ посмотреть на трафик с заспросами броузеров.


Название: Помогите с http протоколом
Отправлено: Вячеслав от Ноябрь 15, 2006, 00:35
Цитата: "Dendy"
Аналогично, свой пример тоже. Наверное, ето особенности HTTP протокола. Интересно бьІло бьІ посмотреть на трафик с заспросами броузеров.

Цитировать
--00:33:21--  http://www.kinopoisk.ru/level/1/id_film/435/
           => `index.html.1'
Resolving www.kinopoisk.ru... 85.192.32.110
Connecting to www.kinopoisk.ru[85.192.32.110]:80... connected.
HTTP request sent, awaiting response... 403 Forbidden
00:33:22 ERROR 403: Forbidden.

Мя ? Собственно послали нафик .....
ЗЫ это wget был ;)


Название: Помогите с http протоколом
Отправлено: Maz от Ноябрь 15, 2006, 02:56
Особенности класса Qhttp? С под Delphi я эту страничку получаю без проблем.
Жаль конечно что тролли тут не дорабатоли. Прийдеться либо возвращатьсяк Delphi либо к wxWidget. У wxWindget класс тоже не ахти, но там я уже его полностью перелапатил. Но очень хотелось бы остаться с QT уж очень приглянулась мне эта библиотека.

добавлено спустя 12 минут:

 
Цитата: "Вячеслав"
Цитата: "Dendy"
Аналогично, свой пример тоже. Наверное, ето особенности HTTP протокола. Интересно бьІло бьІ посмотреть на трафик с заспросами броузеров.

Цитировать
--00:33:21--  http://www.kinopoisk.ru/level/1/id_film/435/
           => `index.html.1'
Resolving www.kinopoisk.ru... 85.192.32.110
Connecting to www.kinopoisk.ru[85.192.32.110]:80... connected.
HTTP request sent, awaiting response... 403 Forbidden
00:33:22 ERROR 403: Forbidden.

Мя ? Собственно послали нафик .....
ЗЫ это wget был ;)
Я думал wget - крутая штука. обычный FlashGet закачивает страничку без проблем.


Название: Помогите с http протоколом
Отправлено: Вудруф от Ноябрь 15, 2006, 07:44
Может, они как-нибудь проверяют user agent? И запрещают вход недопустимым...
Тогда это скорее проблемы сайта, а не библиотеки/программы.


Название: Помогите с http протоколом
Отправлено: Вячеслав от Ноябрь 15, 2006, 09:17
Цитата: "Вудруф"
Может, они как-нибудь проверяют user agent? И запрещают вход недопустимым...
Тогда это скорее проблемы сайта, а не библиотеки/программы.

Да ;) вчера на это интелекта не хватило ;)
Цитировать

wget: debug support not compiled in.
--09:15:09--  http://www.kinopoisk.ru/level/1/id_film/435/
           => `index.html.2'
Resolving www.kinopoisk.ru... 85.192.32.110
Connecting to www.kinopoisk.ru[85.192.32.110]:80... connected.
HTTP request sent, awaiting response... 200 OK
Length: unspecified [text/html]

    0K .......... .......... .......... .......... ..........   55.19 KB/s
   50K .......... .......                                       63.93 KB/s

09:15:11 (57.17 KB/s) - `index.html.2' saved [68614]

а всего-то
Цитировать

wget -vd --user-agent=opera http://www.kinopoisk.ru/level/1/id_film/435/

агента подставил ;)


Название: Помогите с http протоколом
Отправлено: Dendy от Ноябрь 15, 2006, 15:49
А кто мешает продебажить Qt-код, посмотреть что не так они отправляют? Жаль сам не силён в http, так бьІ обязательно залез внутрь. Советую написать как баг Троллям.


Название: Помогите с http протоколом
Отправлено: Maz от Ноябрь 15, 2006, 19:00
Значит если послать заголовог и в нем поставить user-agenta = Opera, значит должно работать. Вечером попробую.
Тогда что же посылает IE? Сайт в IE то просматривается.


Название: Помогите с http протоколом
Отправлено: Вячеслав от Ноябрь 15, 2006, 21:59
Цитата: "Maz"
Значит если послать заголовог и в нем поставить user-agenta = Opera, значит должно работать. Вечером попробую.
Тогда что же посылает IE? Сайт в IE то просматривается.

да и в опере тож .... Так-что скорее всего можно просто mozilla и усе будет хокей


Название: Помогите с http протоколом
Отправлено: SLiDER от Ноябрь 16, 2006, 22:23
Цитата: "Maz"
Значит если послать заголовог и в нем поставить user-agenta = Opera, значит должно работать. Вечером попробую.
Тогда что же посылает IE? Сайт в IE то просматривается.


Подозреваю, что сайт просто проверяет user-agent-а и если неузнает его, то просто посылает вас нафиг. Таким Web-девелоперам (разработчикам сайта) руки бы поотрывать. :evil:


Название: Re: Помогите с http протоколом
Отправлено: Vexator от Август 12, 2010, 08:29
некропостер я, ага )

проблема эта же... методом GET получить страницу не удается, собственно об этом прямо говорится в ассистенте
int QHttp::get ( const QString & path, QIODevice * to = 0 )
Sends a get request for path to the server set by setHost() or as specified in the constructor.
path must be an absolute path like /index.html or an absolute URI like http://www.trolltech.com/index.html.

задача стоит скачать страницу сайта, к примеру www.ya.ru

если в качестве пути задать полное имя www.ya.ru/index.html, то скачает без проблем...
как сделать это, не зная полного пути до файла?

Qt 4.2.3


Название: Re: Помогите с http протоколом
Отправлено: SimpleSunny от Август 12, 2010, 09:45
некропостер я, ага )

проблема эта же... методом GET получить страницу не удается, собственно об этом прямо говорится в ассистенте
int QHttp::get ( const QString & path, QIODevice * to = 0 )
Sends a get request for path to the server set by setHost() or as specified in the constructor.
path must be an absolute path like /index.html or an absolute URI like http://www.trolltech.com/index.html.

задача стоит скачать страницу сайта, к примеру www.ya.ru

если в качестве пути задать полное имя www.ya.ru/index.html, то скачает без проблем...
как сделать это, не зная полного пути до файла?

Qt 4.2.3

Указать в качестве параметров
host = www.ya.ru
path = /


Название: Re: Помогите с http протоколом
Отправлено: Vexator от Август 12, 2010, 11:50
некропостер я, ага )

проблема эта же... методом GET получить страницу не удается, собственно об этом прямо говорится в ассистенте
int QHttp::get ( const QString & path, QIODevice * to = 0 )
Sends a get request for path to the server set by setHost() or as specified in the constructor.
path must be an absolute path like /index.html or an absolute URI like http://www.trolltech.com/index.html.

задача стоит скачать страницу сайта, к примеру www.ya.ru

если в качестве пути задать полное имя www.ya.ru/index.html, то скачает без проблем...
как сделать это, не зная полного пути до файла?

Qt 4.2.3

Указать в качестве параметров
host = www.ya.ru
path = /

честно говоря, это первое что пришло на ум, и не работает... (


Название: Re: Помогите с http протоколом
Отправлено: SimpleSunny от Август 12, 2010, 13:42
Не знаю, что у вас там не работает, у меня все работает.

Код
C++ (Qt)
http = new QHttp(this);
connect(http, SIGNAL(done(bool)), this, SLOT(done(bool)));
http->setHost("www.ya.ru");
 
QHttpRequestHeader header;
header.setRequest("GET", "/");
header.setValue("Host", "www.ya.ru");
QStringList list = ui->headers->toPlainText().split('\n', QString::SkipEmptyParts);
for (int i = 0; i < list.size(); ++i)
   header.setValue(list[i].section(": ", 0, 0), list[i].section(": ", 1));
 
http->request(header);


Название: Re: Помогите с http протоколом
Отправлено: Vexator от Август 13, 2010, 02:02
Вот я лол, опускал в адресе www. и он тупил...
спасибо, Ваш пост натолкнул на мысль :)