Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2012.04.22;
Скачать: CL | DM;

Вниз

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;
Скачать: CL | DM;

Наверх




Память: 0.5 MB
Время: 0.007 c
2-1325099067
ghjtyu21
2011-12-28 23:04
2012.04.22
змейка


2-1325185725
Plast
2011-12-29 23:08
2012.04.22
Конвертировать String в GUID?


2-1325272121
Псарь
2011-12-30 23:08
2012.04.22
Как написать инспектор объектов?


3-1274956779
Николай2010
2010-05-27 14:39
2012.04.22
Access+Delphi+Ado - про транзакции


15-1324153802
Юрий
2011-12-18 00:30
2012.04.22
С днем рождения ! 18 декабря 2011 воскресенье