I am trying to use TIdHTTP.Get to load the USPS Zip4 result web page source into a variable (to extract the 4 digit zip code suffix), e.g.,
PgSrc := IdHTTP1.Get('https://tools.usps.com/go/ZipLookupResultsAction!input.action?resultMode=0&companyName=&address1=1600+PENNSYLVANIA+AVE+NW&address2=&city=&state=Select&urbanCode=&postalCode=&zip=20500');
The above example url works fine if I paste it into any browser. However, in my code I get an EIdIOHandlerPropInvalid error with the following message «IOHandler value is not valid.»
I have many zip codes to look up, so I would appreciate any help to avoid this error or a suggestion for a different approach.
asked Jul 19, 2012 at 4:34
2
To avoid this exception you must assign the IOHandler property.
Check this sample.
{$APPTYPE CONSOLE}
{$R *.res}
uses
IdHTTP,
IdSSLOpenSSL,
SysUtils;
Var
IdHTTP1 : TIdHTTP;
Src : string;
LHandler: TIdSSLIOHandlerSocketOpenSSL;
begin
try
IdHTTP1:=TIdHTTP.Create(nil);
try
LHandler := TIdSSLIOHandlerSocketOpenSSL.Create(nil);
try
IdHTTP1.IOHandler:=LHandler;
Src:= IdHTTP1.Get('https://tools.usps.com/go/ZipLookupResultsAction!input.action?resultMode=0&companyName=&address1=1600+PENNSYLVANIA+AVE+NW&address2=&city=&state=Select&urbanCode=&postalCode=&zip=20500');
Writeln(Src);
finally
LHandler.Free;
end;
finally
IdHTTP1.Free;
end;
except on E: Exception do
Writeln(E.ClassName, ': ', E.Message);
end;
Readln;
end.
Note : Also remember copy the SSL DLL (libeay32.dll, ssleay32.dll) to your system.
answered Jul 19, 2012 at 14:08
![]()
RRUZRRUZ
134k19 gold badges355 silver badges482 bronze badges
2
|
NastyaC12 0 / 0 / 0 Регистрация: 05.02.2020 Сообщений: 46 |
||||
|
1 |
||||
|
15.02.2020, 01:41. Показов 4498. Ответов 3 Метки нет (Все метки)
Программа компилируется, но после того как пользователь нажимает на Button1, выскакивает окно с текстом ошибки: «IOHandler value is not valid» Dll ки качала не помогло
__________________
0 |
|
884 / 404 / 174 Регистрация: 20.10.2016 Сообщений: 1,828 |
|
|
15.02.2020, 05:28 |
2 |
|
0 |
|
5 / 4 / 2 Регистрация: 20.04.2016 Сообщений: 62 |
|
|
15.02.2020, 07:05 |
3 |
|
Версия делфи? dll замени под версию индy.. Или использyй synapsе..
0 |
|
5425 / 4253 / 1371 Регистрация: 14.04.2014 Сообщений: 19,156 Записей в блоге: 19 |
|
|
18.02.2020, 08:29 |
4 |
|
очень рекомендую просто перейти на более современный класс THttpClient, который не связан с Indy
0 |
Indy Tidhttp component complains “IO handler is not valid” when the original URL redirects to a HTTPS url.
Solution: Use a TIdSSLIOHandlerSocketOpenSSL
uses IdSSLOpenSSL
Also copy SSL DLL (libeay32.dll, ssleay32.dll)
procedure HTTPRedirect(Sender: TObject; var dest: string;
var NumRedirect: Integer; var Handled: Boolean; var VMethod: string);
begin
Handled := True;
if dest.StartsWith('/') then
begin
redirect_URL:=my_hostname+dest;
end else
begin
redirect_URL:=dest;
end;
end;
var
Http: TIdHTTP;
MS: TMemoryStream;
LHandler: TIdSSLIOHandlerSocketOpenSSL;
begin
Http := TIdHTTP.Create(nil);
Http.HandleRedirects:=True;
try
MS := TMemoryStream.Create;
LHandler := TIdSSLIOHandlerSocketOpenSSL.Create(nil);
try
Http.IOHandler:=LHandler;
Http.OnWork:= HttpWork;
Http.OnRedirect:= HttpRedirect;
// Http.RedirectMaximum:=9;
Http.Get(urlfile, MS);
MS.SaveToFile(filename);
finally
MS.Free;
LHandler.Free;
end;
finally
Http.Free;
end;
end;

Форум программистов Vingrad
| Модераторы: Snowy, Poseidon, MetalFan |
Поиск: |
![]() ![]()
|
|
Опции темы |
| Akella |
|
||
Творец Профиль
Репутация: 4
|
Нужно получить контент сайтов:
В ответ: Project *****.exe raised exception class EIdIOHandlerPropInvalid with message ‘IOHandler value is not valid’. Process stopped. Use step or run to continue. Что подсунуть idHTTP в качестве IOHandler? Пробовал IdIOHandlerStream и IdIOHandlerStack — не помогает, другие ошибки вываливаются. Вот ещё в догонку. Может ошибка связана IdCompressorZLibEx. Создаю новый проект. Открываю существующий. Копирую в IdCompressorZLibEx1 из существующего. Вставляю в новый. Ошибка: class TIdCompressorZLibEx not found D2007. Indy 10.1.5 Добавлено @ 13:14 Путь прописан: $(BDS)LibIndy10 Это сообщение отредактировал(а) Akella — 18.1.2010, 13:19 |
||
|
|||
| Akella |
|
||
Творец Профиль
Репутация: 4
|
C IdCompressorZLibEx разобрался. Связи с ошибкой «‘IOHandler value is not valid» нет. Щёлкнул правой кнопкой по палитре компонент. Выполнил команду reset. Дальше. Относительно IOHandler value is not valid. Ошибочка со ссылкой. На самом деле на этих страничках idHTTP спотыкается: что там может быть военного Это сообщение отредактировал(а) Akella — 18.1.2010, 16:11 |
||
|
|||
| Akella |
|
||
Творец Профиль
Репутация: 4
|
Делаю простой эксперимент. |
||
|
|||
| Akella |
|
||
Творец Профиль
Репутация: 4
|
Начинаю соображать. Добавлено через 5 минут и 39 секунд |
||
|
|||
| Romikgy |
|
||
Любитель-программер Профиль
Репутация: 3
|
а если попробовать заюзать OnRedirect и проверять куда нужно а куда нет …. ——————— Владение русской орфографией это как владение кунг-фу — истинные мастера не применяют его без надобности.
|
||
|
|||
| Keeper89 |
|
||
|
Эксперт Профиль Репутация: 6
|
Akella, Для защищенных соединений (SSL) можно поместить компонент IdSSLIOHandlerSocket и подсунуть его в IOHandler. Плюс, что если парсить страницы для печати? На них вроде бы нет рекламы и редиректов. ——————— Cogito, ergo sum Keeper’s blog
|
||
|
|||
| Akella |
|
||||||||
Творец Профиль
Репутация: 4
|
Нету защищённых соединений и не хочу их использовать. или использовать «автоматически». Меня интересует ivanovo.irr.ru и протокол http, а не pronto.ru с протоколом https. Почему IdHTTP в пустом тестовом проекте нормально грузятся странички, а в проекте IdHTTP пытается лезть на другие сайты? Свойства IdHTTP одинаковые. Я однажды столкнулся с IdFtp, эта компонента тоже ни с того ни с чего начала вести себя непредсказуемо. Оказалось, что в USES попали какие-то модули не те. Добавлено через 2 минуты и 10 секунд
Добавлено через 9 минут и 24 секунды
То вываливается ошибка 302 |
||||||||
|
|||||||||
| Akella |
|
||
Творец Профиль
Репутация: 4
|
Нужно подсунуть или какой-то универсальный IOHandler, или подсовывать в какой-то момент SSL IOHandler Это сообщение отредактировал(а) Akella — 18.1.2010, 22:24 |
||
|
|||
| Keeper89 |
|
||
|
Эксперт Профиль Репутация: 6
|
Я это и предлагаю сделать
https://forums.codegear.com/thread.jspa?threadID=8692 ——————— Cogito, ergo sum Keeper’s blog
|
||
|
|||
| Akella |
|
||||||
Творец Профиль
Репутация: 4
|
Это я и делаю. Добавлено через 41 секунду
Добавлено через 4 минуты и 32 секунды Добавлено через 5 минут и 11 секунд
…или-или…. Добавлено через 11 минут и 54 секунды |
||||||
|
|||||||
| Akella |
|
||
Творец Профиль
Репутация: 4
|
Короче, тут столько левого. создам я новую тему. |
||
|
|||
| Keeper89 |
|
||
|
Эксперт Профиль Репутация: 6
|
Сделал тестовый проект, Indy 10.1.1. : http://slil.ru/28511360 ——————— Cogito, ergo sum Keeper’s blog
|
||
|
|||



















![]() ![]()
|
| Правила форума «Delphi: Сети» | |
|
|
Запрещено: 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делится вскрытыми компонентами
Если Вам помогли и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, Snowy, Poseidon, MetalFan. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) |
| 0 Пользователей: |
| « Предыдущая тема | Delphi: Сети | Следующая тема » |
|
|
|
|
Пожалуйста, выделяйте текст программы тегом [сode=pas] … [/сode]. Для этого используйте кнопку [code=pas] в форме ответа или комбобокс, если нужно вставить код на языке, отличном от Дельфи/Паскаля.
Следующие вопросы задаются очень часто, подробно разобраны в FAQ и, поэтому, будут безжалостно удаляться:
1. Преобразовать переменную типа String в тип PChar (PAnsiChar)
2. Как «свернуть» программу в трей.
3. Как «скрыться» от Ctrl + Alt + Del (заблокировать их и т.п.)
4. Как прочитать список файлов, поддиректорий в директории?
5. Как запустить программу/файл?
… (продолжение следует) …
Вопросы, подробно описанные во встроенной справочной системе Delphi, не несут полезной тематической нагрузки, поэтому будут удаляться.
Запрещается создавать темы с просьбой выполнить какую-то работу за автора темы. Форум является средством общения и общего поиска решения. Вашу работу за Вас никто выполнять не будет.
Внимание
Попытки открытия обсуждений реализации вредоносного ПО, включая различные интерпретации спам-ботов, наказывается предупреждением на 30 дней.
Повторная попытка — 60 дней. Последующие попытки бан.
Мат в разделе — бан на три месяца…

Ошибка при выполнении
, IdHTTP
- Подписаться на тему
- Сообщить другу
- Скачать/распечатать тему
|
|
|
|
В этом месте: выдает в других прогах, где я похлжее писал, все норм работало Добавлено 19.11.07, 16:11 |
|
Cyberwaste |
|
|
У меня все работает, какие у тебя типы у vdata и fstr. |
|
crystalbit |
|
|
fstr:string; я понял из-за чего — это https протокол |
0 пользователей читают эту тему (0 гостей и 0 скрытых пользователей)
0 пользователей:
- Предыдущая тема
- Delphi: Общие вопросы
- Следующая тема
[ Script execution time: 0,0175 ] [ 16 queries used ] [ Generated: 28.01.23, 20:56 GMT ]
На чтение 4 мин. Просмотров 64 Опубликовано 15.12.2019
Для защищенных соединений (SSL) можно поместить компонент IdSSLIOHandlerSocket и подсунуть его в IOHandler.
а если попробовать заюзать OnRedirect и проверять куда нужно а куда нет .
Нужно подсунуть или какой-то универсальный IOHandler, или подсовывать в какой-то момент SSL IOHandler
# TIdHTTP# TIdSSLIOHandlerSocketOpenSSL# И два файла: libeay32.dll и ssleay32.dll
Почему IdHTTP в пустом тестовом проекте нормально грузятся странички, а в проекте IdHTTP пытается лезть на другие сайты? Свойства IdHTTP одинаковые.
ужно подсунуть или какой-то универсальный IOHandler, или подсовывать в какой-то момент SSL IOHandler smile
I have a SOAP application created in Delphi 7 that uses THTTPRIO. It has been working fine with HTTP but now they want to use HTTPS.
In most cases it is working fine by just changing the URL to HTTPS and setting the appropriate SSL/TLS settings in Windows Internet Options.
However some systems are getting an «IOHandler value is not valid» error.
It is compiled using the default THTTPRIO settings (no defines) in D7 (to use Wininet not Indy), however that LOOKS like an INDY error.
I’ve looked through all the links I can find and do not see a solution.
I’m guessing it is either a Windows settings problem or maybe missing / bad Wininet installation? Missing an KB update (or maybe had an update)?
Anyone have any ideas why this error is occurring on some systems but not others of the same OS (Win7 Pro)?
As it looks like an Indy error, I’m also wondering if it somehow got compiled to use Indy (but it seems to respond to the Internet Options settings). Is there any way to determine if it is using Indy instead?

Всем привет, небольшая заметка о том, как можно с помощью компонентов Indy загружать защищенные веб-страницы, да и не только загружать, а в целом работать с ними (запросы: GET, POST). Насколько я знаю, у всех версиях Indy эта проблема давно наблюдается. Ну, а сейчас немного теории. SSL — это протокол, с помощью которого можно осущеставлять безопасное соединение между клиентом и сервером. Вообще, если Вы загружаете в браузере защищенную страницу, то Вы сразу можете прочитать информацию о защищенной странице, например, в браузере GoogleChrome, при загрузке защищенной страницы в адресной строке появляется «замочек», что означает — была загружена защищенная страница.
А, если нажать на этот замочек, то можно посмотреть более подробную информацию о защищенной странице, где Вы сможете посмотреть сертификат безопасности, алгоритм шифрования страницы, данных и многое другое.
Так как, у Indy с данной задачей давненько проблемы, то некоторые пользователи, для того, чтобы получить код защищенной страницы, отправить запрос, получить ответ с сервера, используют компонент TWebBrowser, что очень неудобно, он все таки визуальный.
Ну что, теперь давайте приступим к самому проекту. Что нам необходимо будет, на форме у меня следующие компоненты:
- TIdHTTP
- TIdSSLIOHandlerSocketOpenSSL
Давайте немного настроим эти компоненты, в свойстве компонента TIdHTTP — IOHandler укажем компонент TIdSSLIOHandlerSocketOpenSSL. Это еще не все, если Вы попробуйте загрузить, через запрос GET, защищенную веб-страницу, то естестевенно у Вас будет ошибка. Для всего этого нам необходимо будет скачать последнею версию библиотеки Openssl, но я скачал RunTimePack библиотек и установил их. Нам необходимы только 2-е dll-ки:
- libeay32.dll
- ssleay32.dll
Их, можно скопировать в папку Вашего проекта, или в системный каталог Windows (system32), лучше всего, носить в папке с проектом, так как не у всех пользователей могут быть установлены данные библиотеки.
Все, как только все это сделано, можно загружать защищенные https-страницы обычным способом:
Если, будете создавать компоненты в run-time, то не забывайте подключать в Uses модули IdSSL, IdSSLOpenSSL.
Версия Indy, на которой тестировался данный код — 10.5.7
Исходник прилаживать не буду, кому необходимо будет, скажите в комментариях.
Если вы хотите что бы ваша иммиграция в Чехию прошла, как можно успешно и безопасно, то в сети есть необходимые ресурсы, которые помогут вам.
|
Registriert seit: 19. Okt 2004 Ort: Amsterdam 30 Beitr�ge Delphi 2005 Professional |
How to Use Indy 10 idHTTP : IOHandler value is not valid
15. Jun 2005, 13:09 Hello, Using the idHTTP component in Indy 9 was very easy, but now I want to use the Indy 10 library and I got a lot of problems, even just to get a page from the Web. This is how it goes in Indy 9: Delphi-Quellcode:
IdHttp:=TIdHttp.Create(NIL); If you do this with Indy 10 then the error message will be raised: «EidIOHandlerPropInvalid : IOHandler value is not valid» What is the proper declaration in Indy 10 to do this? Greets, Delphi Lover. Rob |
|
|
|
Registriert seit: 19. Okt 2004 Ort: Amsterdam 30 Beitr�ge Delphi 2005 Professional |
Re: How to Use Indy 10 idHTTP : IOHandler value is not valid
15. Jun 2005, 17:11 Hello, I did some more investigation and I see that working with the Indy 10 components is indeed quite difficult and misty to understand. The component builders wanted to «abstract» the Indy system further, but now it’s so abstract that many users have only problems to use the source. On the web you’ll see a lot of people telling that they deinstall the Indy 10 and go back to Indy 9. Although the Indy 10 is out now for some time, you’ll find not a lot of examples on the web. especially not for Delphi. Very sad for these great components. If anyone know how to use the Indy 10 idHTTP component in Runtime. (with IOhandlers and Intercepts…) please help us out… So, I also used another simple way to get a page from the web, using the WinInet API. This API can work with HTTP and FTP. The interface is very C-like, but it’s small and it does what I want, just get me the Webpage. (you also don’t have to loop to wait for the webpage to finish…) Here is some source I found on the Web: Delphi-Quellcode: Uses WinInet; procedure GetWebPage; ResStr:=’‘; FStringList.text := resStr; Rob |
|
|
|
Registriert seit: 19. Jan 2003 732 Beitr�ge Turbo Delphi f�r Win32 |
Re: How to Use Indy 10 idHTTP : IOHandler value is not valid
15. Jun 2005, 17:31 Hi, your code works fine for me (using Indy 10 for Win32). Could you tell us the value of «URL» in your case?
Dani H. |
|
|
|
Registriert seit: 10. Apr 2007 Ort: Traunreut 6 Beitr�ge |
Re: How to Use Indy 10 idHTTP : IOHandler value is not valid
22. Okt 2008, 13:11 This line: databuffer[dwread]:=#0; throws an ERangeError in Delphi 2009. Anyone has an idea how to fix this ? |
|
|
|
Registriert seit: 19. Jan 2003 732 Beitr�ge Turbo Delphi f�r Win32 |
Re: How to Use Indy 10 idHTTP : IOHandler value is not valid
22. Okt 2008, 13:44 What’s the value of dwread according to the debugger when this happens?
Dani H. |
|
|
|
Registriert seit: 10. Apr 2007 Ort: Traunreut 6 Beitr�ge |
Re: How to Use Indy 10 idHTTP : IOHandler value is not valid
23. Okt 2008, 09:37 dwRead = 8191 when this happens. I tried to change databuffer to As dwRead is the number of Bytes, the problem is: Either use Ansistring(1) or change the index(2)? 1: This would only make sense if the returned value also is Ansi-kind of string — and obviosly it is no more, else this wouldn’t happen..? 2: Does not make sense for me, because «Number of Bytes to read» should equal «number of Bytes read» — shouldn’t it? Can #0 be used for Unicodestrings/Chars anyway? PS: I write in english to ensure the creator of this thread could follow the discussion, too, if he wants … |
|
|
|
Registriert seit: 19. Dez 2005 Ort: Rosdorf 2.022 Beitr�ge Turbo Delphi f�r Win32 |
Re: How to Use Indy 10 idHTTP : IOHandler value is not valid
23. Okt 2008, 12:53 Which version of Delphi do you use?
Nikolai Wyderka |
|
|
|
Registriert seit: 10. Apr 2007 Ort: Traunreut 6 Beitr�ge |
Re: How to Use Indy 10 idHTTP : IOHandler value is not valid
23. Okt 2008, 12:54
Zitat von MarkusMaier: This line: databuffer[dwread]:=#0; throws an ERangeError in Delphi 2009. |
|
|
|
Registriert seit: 17. Sep 2006 Ort: Barchfeld 27.473 Beitr�ge Delphi 11 Alexandria |
Re: How to Use Indy 10 idHTTP : IOHandler value is not valid
23. Okt 2008, 13:34 Maybe defining all char-/stringtypes as ANSI charset could help. Delphi-Quellcode: var
Detlef |
|
|
|
Registriert seit: 10. Apr 2007 Ort: Traunreut 6 Beitr�ge |
Re: How to Use Indy 10 idHTTP : IOHandler value is not valid
23. Okt 2008, 14:11
Zitat von DeddyH: Maybe defining all char-/stringtypes as ANSI charset could help. It does not: Internetreadfile returns unicode data. This is the reason why this error occurs in D2009 and did not occur before anyway … I tried this and got invalid text data … The following changes: dwNumber := sizeof(databuffer) — sizeof(char); do not help either as they lead to invalid data, too … |
|
|










)
