Delphi的idhttp报IOHandler value is not valid错误的原因


本文整理自网络,侵删。

 
出现这种问题的原因是由于访问的 URL地址为https或存在其跳转地址为https。

首先单纯使用idhttp是只能访问http,而https则需要搭配IdSSLIOHandlerSocketOpenSSL来实现对https的访问支持,当然还需要在系统目录或编译目标程序的同目录下有ssleay32.dll与libeay32.dll两个SLL协议的支持库。

下面贴出一个简单示例,但对于需要管理cookie的自然要继续完善idhttp的其他项设置,尤其是有些https站是屏蔽直接使用IdCookieManager的。

function TMyHttp.SSLGetS(URL: string): string;
var
  Http: TIdhttp;
  SSLIO: TIdSSLIOHandlerSocketOpenSSL;
begin
  Http := TIdHttp.Create(nil);
  Http.ProtocolVersion := pv1_1;
  Http.HandleRedirects := True;
  SSLIO := TIdSSLIOHandlerSocketOpenSSL.Create(nil);
  SSLIO.SSLOptions.Method:=sslvTLSv1;
  SSLIO.SSLOptions.Mode := sslmClient;
  try
    try
      Http.IOHandler:=SSLIO;
      Result := Http.Get(URL);
    except
      Result := '';
    end;
  except
 
  end;
  Http.Disconnect;
  FreeAndNil(SSLIO);
  FreeAndNil(Http);
end;
我使用的是Delphi 2007,它最高仅支持Indy10.2.3版本,搭配前面提到的两个OpenSLL Shared Library 1.0.1.5(1.0.1.e)版本文件。

相关阅读 >>

Delphi将图片转换成文本支持转换回去

Delphi xe android 程序切换到后台及从后台切换到前台实现

Delphi 对提交参数编码

Delphi把一个字符串中的某个子串,用另一个子串去替换

github上通过星级评估排名前10的最受欢迎的开源Delphi项目

Delphi 中的md5实现方法及Delphi2009和Delphi2010中用法

Delphi winapi: getdesktopwindow - 返回桌面窗口的句柄

Delphi tadoquery 中文使用说明

Delphi中webbrowser自动登录路由器网页

Delphi之声音资源(*.res)的编译方法

更多相关阅读请进入《Delphi》频道 >>



打赏

取消

感谢您的支持,我会继续努力的!

扫码支持
扫码打赏,您说多少就多少

打开支付宝扫一扫,即可进行扫码打赏哦

分享从这里开始,精彩与您同在

评论

管理员已关闭评论功能...