![]() |
|
|
Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
![]() |
|
Опции темы | Поиск в этой теме | Опции просмотра |
#1
|
|||
|
|||
![]() Добрый день
Есть компонент idHTTP1, с помощью которого можно закачать код ХТМЛ-страницы, указав УРЛ страницы. В общем все работает (кроме фреймов, сайтов с редиректом, и есть проблемы со шрифтами) НО, если задать адрес Ya.ru, выскакивает 301 ошибка и страница сервиса не загружается. Вопрос для знатоков ИНДИ 10 (РАД2010): 1. если предварительно отослать запрос (через POST ввести словосочетание для поиска, ну скажем "купить телевизор") в строку ввода поиска на Яндексе, получится ли закачать первую страницу ответа Яндекса? Или всетаки нужно это делать через ТВебБраузер? 2. что то страницы с отдельных сайтов закакчиваются с кракозябрами, или вообще тексты с кириллицей не закачиваются, закачиваются только то что написано латиницей. С этим что то сделать можно? Если можно, то как? Всем ответившим по делу спасибо. |
#2
|
||||
|
||||
![]() - IdHTTP1.HandleRedirects:=True;
- :=UTF8Decode(IdHTTP1.Get('')); - да, вернется первая страница результатов поиска - фреймы нужно запрашивать отдельно (разбирать страницу). это уже HTML, а не HTTP ![]() Пишу программы за еду. __________________ |
#3
|
|||
|
|||
![]() NumLock, спасибо
еще вопрос что лучше с точки зрения неполучения бана по ИП-адресу от поисковой системы - использовать стандартный метод (ПОСТ) для вставки словосочетания в строку запроса ПС или так - http://yandex.ru/yandsearch?text=%EA... %E8%E7%EE%F0 конечно если кто в курсе |
#4
|
|||
|
|||
![]() Дополнительно
:=UTF8Decode(IdHTTP1.Get('')); - не работает так же как и System.Utf8ToAnsi(IdHTTP1.Get(''));, причем одинаково к примеру на http://forums.kuban.ru вообще кириллицу не грузит, пустые места вместо букв, зато латиница в норме в других случаях грузит каркозябры |
#5
|
||||
|
||||
![]() Как я вижу, используется RAD Studio 2010. У него Unicode включен по умолчанию. Так что тут, в случае с кракозябрами, стоит преобразовывать строку наоборот: UTF8Encode.
Оставайтесь хорошими людьми... VK id2634397, ds [at] phoenix [dot] dj |
#6
|
|||
|
|||
![]() Результаты:
если использовать Код:
Memo1.Text := IdHttp1.Get(text); если использовать Код:
Memo1.Text := UTF8Encode(IdHttp1.Get(text)); http://delphiexpert.ru/view_download.php?id=112 Что бы это все значило? |
#7
|
||||
|
||||
![]() А что в IdHTTP1.Response.ContentType? После выполнения запроса.
Подозреваю, что "text/html; charset=windows-1251". Поищи в гугле "RAD Studio 2010 IdHTTP cp1251". Оставайтесь хорошими людьми... VK id2634397, ds [at] phoenix [dot] dj |
#8
|
|||
|
|||
![]() там где в заголовке charset=UTF-8, или вообще ничего - все нормально
а там где charset=windows-1251 - там или краки или вообще пусто искать будем, вот только точно решение есть? |
#9
|
||||
|
||||
![]() Решение есть. Сам делал такую фигню. Только не помню, как
![]() Оставайтесь хорошими людьми... VK id2634397, ds [at] phoenix [dot] dj |
#10
|
||||
|
||||
![]() Пишу программы за еду. __________________ |
#11
|
|||
|
|||
![]() DJ PhoeniX
наверно в поток закачивал, что то вроде Код:
var rcvrdata: TStringStream; .... rcvrdata := TStringStream.Create(''); try HTTP.Get('http://сайт.ру', rcvrdata); except //FrmMain.WriteToLog('Не удалось посетить страницу'); exit; end; |
#12
|
||||
|
||||
![]() Ну поток-то там был, только, по-моему, MemoryStream. А потом я просто хитро из него загружал. Как-то так:
1. Читаем из потока блок данных в AnsiString 2. Конвертируем AnsiString в WideString 3. Работаем. Оставайтесь хорошими людьми... VK id2634397, ds [at] phoenix [dot] dj |
#13
|
|||
|
|||
![]() Решение задачи следующее:
Использование 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; 1. если кодировка charset=windows-1251, то нужно использовать вариант1 2. если кодировка charset=UTF-8, то вариант1 (Utf8ToAnsi или UTF8Decode) 3. для универсальности нужен дополнительный код: вначале читать в ХТМЛ коде тип кодировки и делать выбор с применением доп. обработки Если кому не лень, модифицируйте код в стиле обработки исключений, но без вывода сообщений |