Форум: "Начинающим";
Текущий архив: 2012.04.22;
Скачать: [xml.tar.bz2];
ВнизidHTTP1 и закачка стр. из ЯНДЕКС.ру Найти похожие ветки
← →
Pcrepair © (2011-12-25 19:15) [0]Добрый день
Есть компонент idHTTP1, с помощью которого можно закачать код ХТМЛ-страницы, указав УРЛ страницы. В общем все работает (кроме фреймов, сайтов с редиректом, и есть проблемы со шрифтами)
НО, если задать адрес Ya.ru, выскакивает 301 ошибка и страница сервиса не загружается.
Вопрос для знатоков ИНДИ 10 (РАД2010):
1. если предварительно отослать запрос (через POST ввести словосочетание для поиска, ну скажем "купить телевизор") в строку ввода поиска на Яндексе, получится ли закачать первую страницу ответа Яндекса? Или всетаки нужно это делать через ТВебБраузер?
2. что то страницы с отдельных сайтов закакчиваются с кракозябрами, или вообще тексты с кириллицей не закачиваются, закачиваются только то что написано латиницей. С этим что то сделать можно? Если можно, то как?
Всем ответившим по делу спасибо.
← →
Dennis I. Komarov © (2011-12-25 19:41) [1]
> 1. если предварительно отослать запрос (через POST ввести
> словосочетание для поиска, ну скажем "купить телевизор")
> в строку ввода поиска на Яндексе, получится ли закачать
> первую страницу ответа Яндекса? Или всетаки нужно это делать
> через ТВебБраузер?
Разве не GET? И потом, какая разница что было до? TCP сессия заканчивается, после того как http-сервер отдал все по запросу. Никаких SID и авторизации, как я понимаю, тут нет...
> 2. что то страницы с отдельных сайтов закакчиваются с кракозябрами,
> или вообще тексты с кириллицей не закачиваются, закачиваются
> только то что написано латиницей. С этим что то сделать
> можно? Если можно, то как?
Не верю... сервер отдает по запросу контент одинаковый для всех (ну почти), а вот что дальше с ним...
← →
Dimka Maslov © (2011-12-25 20:19) [2]Советую прочитать про такую вещь как протокол http и спецификация html. Там прекрасно всё расписано, какие заголовки и теги описывают кодировку страницы.
← →
Pcrepair © (2011-12-25 20:32) [3]GET - получить с сервера страницу
POST - отослать данные на сервер
вроде так?
еще разок, для тех кто в курсе этих всех дел
ввожу в ЕДИТ УРЛ = YA.RY
ввожу в ЕДИТ слово = "Купить телевизор" которое отправляется в строку поиска Яндекса
Нажимаю кнопку= сабмит (ту что на форме Яндекса)
Получу ли по idHTTP1.GET страницу с яндекса с результатами поиска?
ОТВЕТ: св-во HandleRedirects компонента idhttp в true - это чтобы не выскакивали 301 ошибки
← →
Dimka Maslov © (2011-12-25 20:35) [4]
> Получу ли по idHTTP1.GET страницу с яндекса с результатами
> поиска?
Если запрос составлен правильно, то да.
← →
Андреевич (2011-12-25 20:40) [5]
> Получу ли по idHTTP1.GET страницу с яндекса с результатами
> поиска?
если яндекс сопротивляться не будет.
← →
Pcrepair © (2011-12-25 20:50) [6]а что, гуголь и яндекс как то могут сопротивлятся?
были случаи?
← →
sniknik © (2011-12-25 21:02) [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 21:15) [8]а как перекодировать кириллицу в это %EA%F3%EF%E8%F2%FC+%F2%E5%EB%E5%E2%E8%E7%EE%F0 ???
и вписать в idHTTP1.GET?
а для гугля как там?
← →
Андреевич (2011-12-25 21:17) [9]
> Pcrepair © (25.12.11 20:50) [6]
> а что, гуголь и яндекс как то могут сопротивлятся?
> были случаи?
да, были случаи когда сайт парсил поисковый запрос и яндекс отказывался его выполнять
← →
Dimka Maslov © (2011-12-25 21:28) [10]
> а как перекодировать кириллицу
Это называется Url-кодирование (UrlEncode)
← →
sniknik © (2011-12-25 22:35) [11]> а для гугля как там?
да без разницы, правила формирования запросов/ответов т.е. протокол одинаков. а вот что за параметры/стиль он принял для передачи это прям в браузере посмотреть можно.
+
Dimka Maslov © (25.12.11 20:19) [2]
> Советую прочитать про такую вещь как протокол http и спецификация html. Там прекрасно всё расписано
← →
Pcrepair © (2011-12-27 20:19) [12]Решение задачи следующее:
Использование 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. для универсальности нужен дополнительный код: вначале читать в ХТМЛ коде тип кодировки и делать выбор с применением доп. обработки
Если кому не лень, модифицируйте код в стиле обработки исключений, но без вывода сообщений
← →
megavoid © (2011-12-27 21:47) [13]301 же! Попробуйте выставить у
IdHTTP1.HandleRedirects := True
Страницы: 1 вся ветка
Форум: "Начинающим";
Текущий архив: 2012.04.22;
Скачать: [xml.tar.bz2];
Память: 0.48 MB
Время: 0.002 c