![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
idHTTP1 и закачка стр. из ЯНДЕКС.ру
Pcrepair © (2011-12-25 19:15:00)Добрый день
Есть компонент idHTTP1, с помощью которого можно закачать код ХТМЛ-страницы, указав УРЛ страницы. В общем все работает (кроме фреймов, сайтов с редиректом, и есть проблемы со шрифтами)
НО, если задать адрес Ya.ru, выскакивает 301 ошибка и страница сервиса не загружается.
Вопрос для знатоков ИНДИ 10 (РАД2010):
1. если предварительно отослать запрос (через POST ввести словосочетание для поиска, ну скажем "купить телевизор") в строку ввода поиска на Яндексе, получится ли закачать первую страницу ответа Яндекса? Или всетаки нужно это делать через ТВебБраузер?
2. что то страницы с отдельных сайтов закакчиваются с кракозябрами, или вообще тексты с кириллицей не закачиваются, закачиваются только то что написано латиницей. С этим что то сделать можно? Если можно, то как?
Всем ответившим по делу спасибо.
megavoid (2011-12-27 21:47:00) [1]301 же! Попробуйте выставить у
IdHTTP1.HandleRedirects := True
Pcrepair (2011-12-27 20:19:00) [2]Решение задачи следующее:
Использование TStringStream для решения проблем с кодировкой
Код:
var
mStream: TStringStream;
URL : string;
begin
mStream := TStringStream.Create;
URL := Edit1.Text;
idHttp1 := TIdHTTP.Create(nil);
idHttp1.Get(URL, mStream);
Memo1.Clear;
Memo1.Text := mStream.DataString; // вариант1, кодировка charset=windows-1251
//или
Memo1.Text := UTF8Decode (mStream.DataString); // вариант2, кодировка charset=UTF-8
end;
Результаты: код страницы в ПЕРЕМ типа TStringStream закачивается нормально, но может имееть две(или больше) разновидностей кодировки
1. если кодировка charset=windows-1251, то нужно использовать вариант1
2. если кодировка charset=UTF-8, то вариант1 (Utf8ToAnsi или UTF8Decode)
3. для универсальности нужен дополнительный код: вначале читать в ХТМЛ коде тип кодировки и делать выбор с применением доп. обработки
Если кому не лень, модифицируйте код в стиле обработки исключений, но без вывода сообщений
sniknik (2011-12-25 22:35:00) [3]> а для гугля как там?
да без разницы, правила формирования запросов/ответов т.е. протокол одинаков. а вот что за параметры/стиль он принял для передачи это прям в браузере посмотреть можно.
+
Dimka Maslov © (25.12.11 20:19) [2]
> Советую прочитать про такую вещь как протокол http и спецификация html. Там прекрасно всё расписано
Dimka Maslov (2011-12-25 21:28:00) [4]
> а как перекодировать кириллицу
Это называется Url-кодирование (UrlEncode)
Андреевич (2011-12-25 21:17:00) [5]
> Pcrepair © (25.12.11 20:50) [6]
> а что, гуголь и яндекс как то могут сопротивлятся?
> были случаи?
да, были случаи когда сайт парсил поисковый запрос и яндекс отказывался его выполнять
Pcrepair (2011-12-25 21:15:00) [6]а как перекодировать кириллицу в это %EA%F3%EF%E8%F2%FC+%F2%E5%EB%E5%E2%E8%E7%EE%F0 ???
и вписать в idHTTP1.GET?
а для гугля как там?
sniknik (2011-12-25 21:02:00) [7]> Нажимаю кнопку= сабмит (ту что на форме Яндекса)
слишком много лишних действий...
все одним запросом
http://yandex.ru/yandsearch?text=%EA%F3%EF%E8%F2%FC+%F2%E5%EB%E5%E2%E8%E7%EE%F0
Pcrepair (2011-12-25 20:50:00) [8]а что, гуголь и яндекс как то могут сопротивлятся?
были случаи?
Андреевич (2011-12-25 20:40:00) [9]
> Получу ли по idHTTP1.GET страницу с яндекса с результатами
> поиска?
если яндекс сопротивляться не будет.
Dimka Maslov (2011-12-25 20:35:00) [10]
> Получу ли по idHTTP1.GET страницу с яндекса с результатами
> поиска?
Если запрос составлен правильно, то да.
Pcrepair (2011-12-25 20:32:00) [11]GET - получить с сервера страницу
POST - отослать данные на сервер
вроде так?
еще разок, для тех кто в курсе этих всех дел
ввожу в ЕДИТ УРЛ = YA.RY
ввожу в ЕДИТ слово = "Купить телевизор" которое отправляется в строку поиска Яндекса
Нажимаю кнопку= сабмит (ту что на форме Яндекса)
Получу ли по idHTTP1.GET страницу с яндекса с результатами поиска?
ОТВЕТ: св-во HandleRedirects компонента idhttp в true - это чтобы не выскакивали 301 ошибки
Dimka Maslov (2011-12-25 20:19:00) [12]Советую прочитать про такую вещь как протокол http и спецификация html. Там прекрасно всё расписано, какие заголовки и теги описывают кодировку страницы.
Dennis I. Komarov (2011-12-25 19:41:00) [13]
> 1. если предварительно отослать запрос (через POST ввести
> словосочетание для поиска, ну скажем "купить телевизор")
> в строку ввода поиска на Яндексе, получится ли закачать
> первую страницу ответа Яндекса? Или всетаки нужно это делать
> через ТВебБраузер?
Разве не GET? И потом, какая разница что было до? TCP сессия заканчивается, после того как http-сервер отдал все по запросу. Никаких SID и авторизации, как я понимаю, тут нет...
> 2. что то страницы с отдельных сайтов закакчиваются с кракозябрами,
> или вообще тексты с кириллицей не закачиваются, закачиваются
> только то что написано латиницей. С этим что то сделать
> можно? Если можно, то как?
Не верю... сервер отдает по запросу контент одинаковый для всех (ну почти), а вот что дальше с ним...