|
|
Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
|
Опции темы | Поиск в этой теме | Опции просмотра |
|
#1
|
|||
|
|||
Ошибка IOHandler value is not valid
Приветствую.
Кидаю IdHTTP с Indy client Код:
uses ... IdHTTP ... procedure TForm1.Button1Click(Sender: TObject); begin Memo1.Text:=Idhttp1.Get('https://google.com/'); end; Цитата:
А вот с http:// нормально работает А с httpS:// не хочет Почитал в интернетах, но везде эта проблема решается "через пень колоду". Какие то dll*ки надо рядом с exe кидать, какие то дополнительные компоненты накидывать... Может есть нормальное решение ? Может новый компонент какой ? Или через Win Api как... Мне надо спарсить с https странички несколько строчек. Последний раз редактировалось TEKTON, 28.09.2018 в 03:42. |
#2
|
|||
|
|||
Да нет там ничего сложного.
Да, надо скачать архив с парой dll и просто положить их рядом с бинарником. А код выглядит так (это для Д 10 Токио): Код:
function TMonitorItem.ReadInternetPage(AUrl : String) : String; var IdHTTP : TIdHTTP; Id_HandlerSocket : TIdSSLIOHandlerSocketOpenSSL; begin IdHTTP := TIdHTTP.Create(Nil); Id_HandlerSocket := TIdSSLIOHandlerSocketOpenSSL.Create(IdHTTP); Try IdHTTP.Request.BasicAuthentication := False; IdHTTP.Request.UserAgent := 'Mozilla/5.0 (Windows NT 6.1; WOW64; rv:12.0) Gecko/20100101 Firefox/12.0'; Id_HandlerSocket.SSLOptions.Mode := sslmClient; Id_HandlerSocket.SSLOptions.Method := sslvSSLv23; IdHTTP.IOHandler := Id_HandlerSocket; Result := IdHTTP.Get(AUrl); Finally Id_HandlerSocket.Free; IdHTTP.Free; End; end; |
Этот пользователь сказал Спасибо lmikle за это полезное сообщение: | ||
TEKTON (28.09.2018)
|
#3
|
|||
|
|||
Цитата:
Потом эти Dll надо будет тягать с основным Exe готовой программы? Или они внутрь вкомпилируются? |
#4
|
|||
|
|||
Надо.
Хотя где-то видел версию, которая вкомпилирует код из объектников, но это что-то было не официальное и не стабильное. В принципе, тут 3 варианта: 1. Просто тягаем библиотеки вместе с программой. Не проблема, либо просто в архиве, либо включаем в инсталятор. 2. Кладем библиотеки в Windows (или Windows/System32) и забываем на этой машине о них. 3. "Пришиваем" библиотеки к основной программе и при старте распаковываем их самостоятельно (не работает по умолчанию в случае установки в Program Files - там права админа для записи нужны). 3а. Распаковку делаем во временный каталог и грузим либы из него. Но, вроде, там тоже надо сырцы Indy пропатчить слегка. |
#5
|
|||
|
|||
Мдя...
Вот блин учудили с этим HttpS А по другому никак нельзя код странички получить ? Может какими другими компонентами? Неужели народ так и мучается с этой хренью... Спустя какое то время... Наткнулся вот на такое (см. последний ответ) https://toster.ru/q/73040 Тоесть можно этот unit U_HTTPSrv; сохранить в *.pas и просто в uses подключать? Или как это работает? Если можно примерчик. З.Ы. А как с этим https обстоят дела с других языках? C++ и т.п. Или только делфа с помощью костылей этих работает? Последний раз редактировалось TEKTON, 29.09.2018 в 21:17. |
#6
|
|||
|
|||
1. Да ничего там не учудили. Я тебе дал готовую процедуру. Просто вызываешь ее и все работает (ну только библиотечки надо рядом с ехе кинуть).
2. В том ответе просто пример на примере сервера, хотя по коду все тоже самое. 3. В других языках все так же. Полностью готового кода нет. Весь вопрос в библиотеках. Вообще, есть готовый метод в WinAPI, который задействует встроенный IE для загрузки странички. Лень искать, погугли сам. Но помню там был целый модуль для того, что бы использовать его, кода страницы на 2-3... |
Этот пользователь сказал Спасибо lmikle за это полезное сообщение: | ||
TEKTON (29.09.2018)
|