Меню

Idhttp1 get delphi ошибка iohandler value is not valid

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

Max Williams's user avatar

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

RRUZ's user avatar

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

Метки нет (Все метки)


Delphi
1
2
3
4
5
6
begin
 
Memo1.Text := Idhttp1.Get('https://yandex.ru');
 
 
end;

Программа компилируется, но после того как пользователь нажимает на 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
там не требуется таскать за собой DLL для HTTPS



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

Поиск:

Ответ в темуСоздание новой темы
Создание опроса
> IOHandler value is not valid 

:(

   

Опции темы

Akella
  Дата 18.1.2010, 13:10 (ссылка)
| (нет голосов)
Загрузка ... Загрузка …




Быстрая цитата

Цитата

Творец
****

Профиль
Группа: Модератор
Сообщений: 18485
Регистрация: 14.5.2003
Где: Корусант

Репутация: 4
Всего: 329

Нужно получить контент сайтов:
novorossiysk.irr.ru/real-estate/rent
и
ivanovo.irr.ru/real-estate/rent
Выполняю

Код

Memo1.Text := Utf8ToAnsi(IdHTTP1.Get('http://novorossiysk.irr.ru/real-estate/rent/'));

В ответ: 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.
Не могу найти компоненту в дельфи  IdCompressorZLibEx, хотя не форме он лежит в основном проекте.

Создаю новый проект. Открываю существующий. Копирую в IdCompressorZLibEx1 из существующего. Вставляю в новый. Ошибка: class TIdCompressorZLibEx not found

D2007. Indy  10.1.5

Добавлено @ 13:14
Хотя компонент вроде как установлен:
user posted image

Путь прописан: $(BDS)LibIndy10
Файл присутствует: C:Program FilesCodeGearRAD Studio5.0libIndy10IdCompressorZLibEx.dcu

Это сообщение отредактировал(а) Akella — 18.1.2010, 13:19

PM MAIL   Вверх
Akella
Дата 18.1.2010, 15:48 (ссылка)
| (нет голосов)
Загрузка ... Загрузка …




Быстрая цитата

Цитата

Творец
****

Профиль
Группа: Модератор
Сообщений: 18485
Регистрация: 14.5.2003
Где: Корусант

Репутация: 4
Всего: 329

C IdCompressorZLibEx разобрался. Связи с ошибкой «‘IOHandler value is not valid» нет. Щёлкнул правой кнопкой по палитре компонент. Выполнил команду reset.

Дальше. Относительно IOHandler value is not valid.

Ошибочка со ссылкой. На самом деле на этих страничках idHTTP спотыкается:
novorossiysk.irr.ru/advert/55647193/
novorossiysk.irr.ru/advert/55718429/
novorossiysk.irr.ru/advert/49045114/

что там может быть военного

Это сообщение отредактировал(а) Akella — 18.1.2010, 16:11

PM MAIL   Вверх
Akella
Дата 18.1.2010, 16:19 (ссылка)
| (нет голосов)
Загрузка ... Загрузка …




Быстрая цитата

Цитата

Творец
****

Профиль
Группа: Модератор
Сообщений: 18485
Регистрация: 14.5.2003
Где: Корусант

Репутация: 4
Всего: 329

Делаю простой эксперимент.
На форму кидаю IdHTTP и Memo
В этом случае в мемо попадает текст без ошибок 🙁
Настройки IdHTTP одинаковые.

PM MAIL   Вверх
Akella
Дата 18.1.2010, 17:12 (ссылка)
| (нет голосов)
Загрузка ... Загрузка …




Быстрая цитата

Цитата

Творец
****

Профиль
Группа: Модератор
Сообщений: 18485
Регистрация: 14.5.2003
Где: Корусант

Репутация: 4
Всего: 329

Начинаю соображать.
В конце страничек есть баннеры. один из баннеров ведёт на pronto.ru, когда заходишь на сайт браузером, то автоматом попадаешь на https, хотя ссылка на страничке http. Тут-то IdHttp и загинается, гад.
Что можно придумать?

Добавлено через 5 минут и 39 секунд
Вопрос такой. Как IdHttp заставить не заходить на другие сайты?

PM MAIL   Вверх
Romikgy
Дата 18.1.2010, 18:06 (ссылка)
| (нет голосов)
Загрузка ... Загрузка …




Быстрая цитата

Цитата

Любитель-программер
****

Профиль
Группа: Участник Клуба
Сообщений: 7325
Регистрация: 11.5.2005
Где: Porto Franco Odes sa

Репутация: 3
Всего: 146

а если попробовать заюзать OnRedirect  и проверять куда нужно а куда нет ….

———————

Владение русской орфографией это как владение кунг-фу — истинные мастера не применяют его без надобности.

smile

PM   Вверх
Keeper89
Дата 18.1.2010, 19:19 (ссылка)
| (нет голосов)
Загрузка ... Загрузка …




Быстрая цитата

Цитата

Эксперт
****

Профиль
Группа: Завсегдатай
Сообщений: 2580
Регистрация: 26.2.2009

Репутация: 6
Всего: 58

Akella

Для защищенных соединений (SSL) можно поместить компонент IdSSLIOHandlerSocket и подсунуть его в IOHandler.

Плюс, что если парсить страницы для печати? На них вроде бы нет рекламы и редиректов.

———————

Cogito, ergo sum

Keeper’s blog
CnWizards Downloads

user posted image

PM MAIL WWW   Вверх
Akella
Дата 18.1.2010, 21:37 (ссылка)
| (нет голосов)
Загрузка ... Загрузка …




Быстрая цитата

Цитата

Творец
****

Профиль
Группа: Модератор
Сообщений: 18485
Регистрация: 14.5.2003
Где: Корусант

Репутация: 4
Всего: 329

Цитата(Keeper89 @  18.1.2010,  19:19 Найти цитируемый пост)
Для защищенных соединений (SSL) можно поместить компонент IdSSLIOHandlerSocket и подсунуть его в IOHandler.

Нету защищённых соединений и не хочу их использовать. или использовать «автоматически».

Меня интересует ivanovo.irr.ru и протокол http, а не pronto.ru с протоколом https.

Почему IdHTTP в пустом тестовом проекте нормально грузятся странички, а в проекте IdHTTP пытается лезть на другие сайты? Свойства IdHTTP одинаковые.

Я однажды столкнулся с IdFtp, эта компонента тоже ни с того ни с чего начала вести себя непредсказуемо. Оказалось, что в USES попали какие-то модули не те.

Добавлено через 2 минуты и 10 секунд

Цитата(Romikgy @  18.1.2010,  18:06 Найти цитируемый пост)
а если попробовать заюзать OnRedirect  и проверять куда нужно а куда нет ….

Цитата
https://login.pronto.ru/login?gateway=true&service=http://irr.ru/controllers/cas/auth.php

Добавлено через 9 минут и 24 секунды
Если отменить редирект:

Код

procedure TfmSite.IdHTTP1Redirect(Sender: TObject; var dest: string;
  var NumRedirect: Integer; var Handled: Boolean; var VMethod: string);
begin
  if Pos('pronto.ru', dest) <> 0 then
    begin
      Handled := false;
    end;

То вываливается ошибка 302

PM MAIL   Вверх
Akella
Дата 18.1.2010, 21:56 (ссылка)
| (нет голосов)
Загрузка ... Загрузка …




Быстрая цитата

Цитата

Творец
****

Профиль
Группа: Модератор
Сообщений: 18485
Регистрация: 14.5.2003
Где: Корусант

Репутация: 4
Всего: 329

Нужно подсунуть или какой-то универсальный IOHandler, или подсовывать в какой-то момент SSL IOHandler  smile 
Кто-нить поможет?  smile

Это сообщение отредактировал(а) Akella — 18.1.2010, 22:24

PM MAIL   Вверх
Keeper89
Дата 18.1.2010, 22:58 (ссылка)
| (нет голосов)
Загрузка ... Загрузка …




Быстрая цитата

Цитата

Эксперт
****

Профиль
Группа: Завсегдатай
Сообщений: 2580
Регистрация: 26.2.2009

Репутация: 6
Всего: 58

Цитата(Akella @  18.1.2010,  21:56 Найти цитируемый пост)
Нужно подсунуть или какой-то универсальный IOHandler, или подсовывать в какой-то момент SSL IOHandler

Я это и предлагаю сделать smile

  • TIdHTTP
  • TIdSSLIOHandlerSocketOpenSSL
  • И два файла: libeay32.dll и ssleay32.dll

https://forums.codegear.com/thread.jspa?threadID=8692

———————

Cogito, ergo sum

Keeper’s blog
CnWizards Downloads

user posted image

PM MAIL WWW   Вверх
Akella
Дата 18.1.2010, 23:02 (ссылка)
| (нет голосов)
Загрузка ... Загрузка …




Быстрая цитата

Цитата

Творец
****

Профиль
Группа: Модератор
Сообщений: 18485
Регистрация: 14.5.2003
Где: Корусант

Репутация: 4
Всего: 329

Цитата(Keeper89 @  18.1.2010,  22:58 Найти цитируемый пост)
# TIdHTTP
# TIdSSLIOHandlerSocketOpenSSL
# И два файла: libeay32.dll и ssleay32.dll

Это я и делаю.

Добавлено через 41 секунду
Вот, что интересует?

Цитата(Akella @  18.1.2010,  21:37 Найти цитируемый пост)
Почему IdHTTP в пустом тестовом проекте нормально грузятся странички, а в проекте IdHTTP пытается лезть на другие сайты? Свойства IdHTTP одинаковые.

Добавлено через 4 минуты и 32 секунды
Keeper89, ты понимаешь, изначально заходим на http, а там нам в лоб https….
Я с таким не сталкивался. Что делать в таких случаях?
Если сразу связать TIdHTTP и TIdSSLIOHandlerSocketOpenSSL на этапе проектирования и выполнить TIdHTTP.get то получаем ошибку read time out

Добавлено через 5 минут и 11 секунд

Цитата(Akella @  18.1.2010,  21:56 Найти цитируемый пост)
ужно подсунуть или какой-то универсальный IOHandler, или подсовывать в какой-то момент SSL IOHandler  smile

…или-или….

Добавлено через 11 минут и 54 секунды
Звезда в шоке (с).   smile 
Теперь и в новом проекте  IOHandler value is not valid

PM MAIL   Вверх
Akella
Дата 19.1.2010, 00:36 (ссылка)
| (нет голосов)
Загрузка ... Загрузка …




Быстрая цитата

Цитата

Творец
****

Профиль
Группа: Модератор
Сообщений: 18485
Регистрация: 14.5.2003
Где: Корусант

Репутация: 4
Всего: 329

Короче, тут столько левого. создам я новую тему.

PM MAIL   Вверх
Keeper89
Дата 19.1.2010, 00:41 (ссылка)
| (нет голосов)
Загрузка ... Загрузка …




Быстрая цитата

Цитата

Эксперт
****

Профиль
Группа: Завсегдатай
Сообщений: 2580
Регистрация: 26.2.2009

Репутация: 6
Всего: 58

Сделал тестовый проект, Indy 10.1.1. : http://slil.ru/28511360

———————

Cogito, ergo sum

Keeper’s blog
CnWizards Downloads

user posted image

PM MAIL WWW   Вверх



















Ответ в темуСоздание новой темы
Создание опроса
Правила форума «Delphi: Сети»
Snowy
Poseidon
MetalFan

Запрещено:

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делится вскрытыми компонентами

  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) — крупнейшем в рунете сборнике материалов по Дельфи

Если Вам помогли и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, Snowy, Poseidon, MetalFan.

 

0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Сети | Следующая тема »

    msm.ru

    Нравится ресурс?

    Помоги проекту!

    Пожалуйста, выделяйте текст программы тегом [сode=pas] … [/сode]. Для этого используйте кнопку [code=pas] в форме ответа или комбобокс, если нужно вставить код на языке, отличном от Дельфи/Паскаля.


    Следующие вопросы задаются очень часто, подробно разобраны в FAQ и, поэтому, будут безжалостно удаляться:
    1. Преобразовать переменную типа String в тип PChar (PAnsiChar)
    2. Как «свернуть» программу в трей.
    3. Как «скрыться» от Ctrl + Alt + Del (заблокировать их и т.п.)
    4. Как прочитать список файлов, поддиректорий в директории?
    5. Как запустить программу/файл?
    … (продолжение следует) …


    Вопросы, подробно описанные во встроенной справочной системе Delphi, не несут полезной тематической нагрузки, поэтому будут удаляться.
    Запрещается создавать темы с просьбой выполнить какую-то работу за автора темы. Форум является средством общения и общего поиска решения. Вашу работу за Вас никто выполнять не будет.


    Внимание
    Попытки открытия обсуждений реализации вредоносного ПО, включая различные интерпретации спам-ботов, наказывается предупреждением на 30 дней.
    Повторная попытка — 60 дней. Последующие попытки бан.
    Мат в разделе — бан на три месяца…

    >
    Ошибка при выполнении
    , IdHTTP

    • Подписаться на тему
    • Сообщить другу
    • Скачать/распечатать тему

      


    Сообщ.
    #1

    ,
    19.11.07, 16:03

      В этом месте:
      vdata:=IdHTTP1.Get(fstr);

      выдает
      IOHandler value is not valid

      в других прогах, где я похлжее писал, все норм работало
      вопрос: эт че и че надо?

      Добавлено 19.11.07, 16:11
      кстати это наверно из-за https протокола, тогда вопрос, как с ним


      Cyberwaste



      Сообщ.
      #2

      ,
      19.11.07, 16:25

        У меня все работает, какие у тебя типы у vdata и fstr.


        crystalbit



        Сообщ.
        #3

        ,
        19.11.07, 16:30

          fstr:string;
          vdata:WideString;

          я понял из-за чего — это https протокол

          0 пользователей читают эту тему (0 гостей и 0 скрытых пользователей)

          0 пользователей:

          • Предыдущая тема
          • Delphi: Общие вопросы
          • Следующая тема

          Рейтинг@Mail.ru

          [ 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

          Давайте немного настроим эти компоненты, в свойстве компонента TIdHTTPIOHandler укажем компонент 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

           

          Alt

          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);
          Try
            Page:=IdHttp.Get(URL);
            FStringList.Text:=Page;
            …..
            …..
          Finally
            IdHttp.Free;
          End;

          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?
          I don’t want to use the components in design time
          but I want to create it in Runtime.

          Greets,

          Delphi Lover.

          Rob

           

          Bei Google nach dem markiertem Wort suchen

          Bei Wikipedia nach dem markiertem Wort suchen

          Im Forum nach dem markiertem Wort suchen

          Mit Zitat antworten
          Zitat

          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

           

          Alt

          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;
          var
            databuffer : array[0..4095] of char;
            ResStr : string;
            hSession, hfile, hRequest: hInternet;
            dwindex,dwcodelen,datalen,dwread,dwNumber: cardinal;
            dwcode : array[1..20] of char;
            Str : pchar;
            AUrl : String;
          begin
            FStringList:=TStringList.Create;

            ResStr:=’‘;
            AUrl:=’www.google.com‘;
            hSession:=InternetOpen(‘InetURL:/1.0‘,
                                   INTERNET_OPEN_TYPE_PRECONFIG,
                                   nil,
                                   nil,
                                   0);
            if assigned(hsession) then
            begin
              hfile:=InternetOpenUrl(
                     hsession,
                     pchar(AUrl),
                     nil,
                     0,
                     INTERNET_FLAG_RELOAD,
                     0);
              dwIndex := 0;
              dwCodeLen := 10;
              HttpQueryInfo(hfile,
                            HTTP_QUERY_STATUS_CODE,
                            @dwcode,
                            dwcodeLen,
                            dwIndex);
              dwNumber := sizeof(databuffer)-1;
              while (InternetReadfile(hfile,
                                      @databuffer,
                                      dwNumber,
                                      DwRead)) do
              begin
                if dwRead =0 then break;
                databuffer[dwread]:=#0;
                Str := pchar(@databuffer);
                resStr := resStr + Str;
              end;
              if assigned(hfile) then InternetCloseHandle(hfile);
            end;
            InternetCloseHandle(hsession);

            FStringList.text := resStr;

          Rob

           

          Bei Google nach dem markiertem Wort suchen

          Bei Wikipedia nach dem markiertem Wort suchen

          Im Forum nach dem markiertem Wort suchen

          Mit Zitat antworten
          Zitat

          Benutzerbild von Dani

          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

           

          Alt

          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.
          At Least I Can Say I Tried

           

          Bei Google nach dem markiertem Wort suchen

          Bei Wikipedia nach dem markiertem Wort suchen

          Im Forum nach dem markiertem Wort suchen

          Mit Zitat antworten
          Zitat

          Registriert seit: 10. Apr 2007

          Ort: Traunreut

          6 Beitr�ge

          Re: How to Use Indy 10 idHTTP : IOHandler value is not valid

           

          Alt

          22. Okt 2008, 13:11

          This line:

          databuffer[dwread]:=#0;

          throws an ERangeError in Delphi 2009.

          Anyone has an idea how to fix this ?

           

          Bei Google nach dem markiertem Wort suchen

          Bei Wikipedia nach dem markiertem Wort suchen

          Im Forum nach dem markiertem Wort suchen

          Mit Zitat antworten
          Zitat

          Benutzerbild von Dani

          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

           

          Alt

          22. Okt 2008, 13:44

          What’s the value of dwread according to the debugger when this happens?

          Dani H.
          At Least I Can Say I Tried

           

          Bei Google nach dem markiertem Wort suchen

          Bei Wikipedia nach dem markiertem Wort suchen

          Im Forum nach dem markiertem Wort suchen

          Mit Zitat antworten
          Zitat

          Registriert seit: 10. Apr 2007

          Ort: Traunreut

          6 Beitr�ge

          Re: How to Use Indy 10 idHTTP : IOHandler value is not valid

           

          Alt

          23. Okt 2008, 09:37

          dwRead = 8191 when this happens.

          I tried to change databuffer to
          databuffer : array[0..8191] of char;
          — in this case, dwRead becomes 16383.

          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 …

           

          Bei Google nach dem markiertem Wort suchen

          Bei Wikipedia nach dem markiertem Wort suchen

          Im Forum nach dem markiertem Wort suchen

          Mit Zitat antworten
          Zitat

          Benutzerbild von inherited

          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

           

          Alt

          23. Okt 2008, 12:53

          Which version of Delphi do you use?

          Nikolai Wyderka

          SWIM SWIM HUNGRY!
          Neuer Blog: hier!

           

          Bei Google nach dem markiertem Wort suchen

          Bei Wikipedia nach dem markiertem Wort suchen

          Im Forum nach dem markiertem Wort suchen

          Mit Zitat antworten
          Zitat

          Registriert seit: 10. Apr 2007

          Ort: Traunreut

          6 Beitr�ge

          Re: How to Use Indy 10 idHTTP : IOHandler value is not valid

           

          Alt

          23. Okt 2008, 12:54

          Zitat von MarkusMaier:

          This line:

          databuffer[dwread]:=#0;

          throws an ERangeError in Delphi 2009.
          Anyone has an idea how to fix this ?

           

          Bei Google nach dem markiertem Wort suchen

          Bei Wikipedia nach dem markiertem Wort suchen

          Im Forum nach dem markiertem Wort suchen

          Mit Zitat antworten
          Zitat

          Benutzerbild von DeddyH

          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

           

          Alt

          23. Okt 2008, 13:34

          Maybe defining all char-/stringtypes as ANSI charset could help.

          Delphi-Quellcode:

          var
            databuffer : array[0..4095] of Ansichar;
            ResStr : Ansistring;
            hSession, hfile, hRequest: hInternet;
            dwindex,dwcodelen,datalen,dwread,dwNumber: cardinal;
            dwcode : array[1..20] of Ansichar;
            Str : pAnsichar;
            AUrl : AnsiString;

          Detlef
          «Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen �bertrumpft. Die Welt wird eine Generation von Idioten bekommen.» (Albert Einstein)
          Dieser Tag ist l�ngst gekommen

           

          Bei Google nach dem markiertem Wort suchen

          Bei Wikipedia nach dem markiertem Wort suchen

          Im Forum nach dem markiertem Wort suchen

          Mit Zitat antworten
          Zitat

          Registriert seit: 10. Apr 2007

          Ort: Traunreut

          6 Beitr�ge

          Re: How to Use Indy 10 idHTTP : IOHandler value is not valid

           

          Alt

          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);

          dwLastItem := dwread div SizeOf(char);
          databuffer[dwLastItem]:=#0;

          do not help either as they lead to invalid data, too …

           

          Bei Google nach dem markiertem Wort suchen

          Bei Wikipedia nach dem markiertem Wort suchen

          Im Forum nach dem markiertem Wort suchen

          Mit Zitat antworten
          Zitat

          0 0 голоса
          Рейтинг статьи
          Подписаться
          Уведомить о
          guest

          0 комментариев
          Старые
          Новые Популярные
          Межтекстовые Отзывы
          Посмотреть все комментарии

          А вот еще интересные материалы:

        • Яшка сломя голову остановился исправьте ошибки
        • Ясность цели позволяет целеустремленно добиваться намеченного исправьте ошибки
        • Ясность цели позволяет целеустремленно добиваться намеченного где ошибка
        • Identifier redeclared delphi ошибка
        • Identifier expected java ошибка