idhttp访问HTTPS

idhttp访问HTTPS

idhttp访问HTTPS

访问一个 WEB 网站,如果采用 HTTP 的话,直接使用 TIdHTTP 这个控件,最简单的用法是:

S := IdHTTP1.Get('www.qq.com');

这里返回的 S 就是对应的网页的文本内容。

如果要访问 https 的网站,则需要 SSL 库。在 Windows 底下,去 https://indy.fulgan.com/SSL/ 下载最新的 SSL 的库。下载后,解压缩,包括两个 dll 文件:ssleay32.dll 和 libeay32.dll;直接放到你的程序编译好的 EXE 相同文件夹底下就可以了。

运行期你的程序会自动加载这两个 DLL 完成 SSL 的功能。

设计期,拖一个 TIdSSLIOHandlerSocketOpenSSL 过来,然后设置 IdHTTP1 的属性:

1. IOHandler 这个属性,下拉,选择 IdSSLIOHandlerSocketOpenSSL1;

2. HandleRedirects 属性:设置为 True;默认是 False;

另外,要注意设置一下 IdSSLIOHandlerSocketOpenSSL1 的属性:SSLOptions -> Method 这个属性,设置为:sslvTLSv1_1

然后采用这行代码就搞定:S := IdHTTP1.Get('https://www.qq.com');

//需要引入的单元uses

IdBaseComponent, IdComponent, IdServerIOHandler, IdSSL, IdSSLOpenSSL,

IdTCPConnection, IdTCPClient, IdHTTP, IdIOHandler, IdIOHandlerSocket,

IdIOHandlerStack, IdZLibCompressorBase, IdCompressorZLib;

{

IndyHttp Get方式访问网站

参数:

url:要访问的网站网址

responseText:访问的返回值

proxyServer:代理服务器Ip

proxyPort:代理服务器端口

返回值:

访问是否成功的布尔值

}

function IndyGet(url: string; var responseText: string;

proxyServer: string = ''; proxyPort: integer = 0): Boolean;

var

IdHTTPTemp: TIdHTTP; // http客户端对象

IdSSLIOHandlerSocketOpenSSLTemp: TIdSSLIOHandlerSocketOpenSSL; // ssl对象

IdCompressorZLibTemp: TIdCompressorZLib; // 数据压缩对象

isSuccess: Boolean; // 是否访问成功的布尔值

begin

isSuccess := False; // 设置是否访问成功的布尔值默认值为false

try

try

{ 1, 创建TIdHTTP对象 }

IdHTTPTemp := TIdHTTP.Create(nil);

IdHTTPTemp.HandleRedirects := true; // 设置重定向属性,防止不能转发Url

IdHTTPTemp.Request.BasicAuthentication := true; // 必须设置此项为true才能一次通过验证

{

这里设置很重要,如果不这样设置,会出错:

HTTP/1.1 403 Bad Behavior

}

IdHTTPTemp.Request.Accept :=

'text/html, image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, */*';

IdHTTPTemp.Request.AcceptEncoding := 'gzip, deflate';

IdHTTPTemp.Request.UserAgent := 'Mozilla/4.0';

// 设置代理服务器

if trim(proxyServer) <> '' then

begin

IdHTTPTemp.ProxyParams.proxyServer := trim(proxyServer); // 代理服务器IP

IdHTTPTemp.ProxyParams.proxyPort := proxyPort; // 代理服务器端口

end;

{ 2,创建SSL组件 }

IdSSLIOHandlerSocketOpenSSLTemp :=

TIdSSLIOHandlerSocketOpenSSL.Create(nil);

{

设置SSL组件使用的OpenSSL版本号,如果设置不正确,会出错:

Error connectiong with ssl.

error:1409442E:SSL routines:ssl3_read_bytes:tlsv1 alert protocal version

}

IdSSLIOHandlerSocketOpenSSLTemp.SSLOptions.Method := sslvTLSv1_2;

// 设置indy的http控件使用的ssl依赖组件,必须设置,否则无法访问ssl网站

IdHTTPTemp.IOHandler := IdSSLIOHandlerSocketOpenSSLTemp;

{ 3,创建传输数据用的压缩组件 }

IdCompressorZLibTemp := TIdCompressorZLib.Create(nil);

// 设置indy的http控件使用的数据压缩组件,如果不设置,那么得到的是压缩的数据,不报任何错误

IdHTTPTemp.Compressor := IdCompressorZLibTemp;

{ 备用属性,暂时未用 }

// // 设置身份验证帐号

// IdHTTP1.Request.Username := Trim(account);

// // 设置身份验证密码

// IdHTTP1.Request.password := Trim(password);

// 得到web回应

responseText := IdHTTPTemp.Get(url);

// 如果web相应正常,则设置判断请求是否成功的布尔值为true

if IdHTTPTemp.ResponseCode = 200 then

begin

isSuccess := true; // 设置判断请求是否成功的布尔值为true

end;

// 关闭IdHTTP1连接

IdHTTPTemp.Disconnect;

except

on e: Exception do

begin

// 调试使用

// showMessage(e.ToString); //这里可以忽略错误,防止IdHTTP1无法访问的错误提示

isSuccess := False;

end;

end;

finally

// 释放创建过的各个对象

IdCompressorZLibTemp.Free;

IdSSLIOHandlerSocketOpenSSLTemp.Free;

IdHTTPTemp.Free;

end;

Result := isSuccess;

end;

相关数据

官方介绍阅兵安排
365bet手机网址

官方介绍阅兵安排

📅 07-29 👁️ 8929
关闭手机这几个功能,马上省电80%!很多人不知道
Bet体育365提款要多久2022

关闭手机这几个功能,马上省电80%!很多人不知道

📅 07-06 👁️ 6346
Linux 激荡 30 年,我们是否还需要一个新的 Linux 发行版?
Bet体育365提款要多久2022

Linux 激荡 30 年,我们是否还需要一个新的 Linux 发行版?

📅 07-01 👁️ 2116