关于 TIdHttp

经验总结:

1、IdHttp 不支持多线程,只支持异步。所有网上的多线程写法下,如果同时并发多个长 GET 或 POST 请求时,会阻塞。

以下代码用于显示下载数据的进程。

procedure TForm1.IdHTTP1WorkBegin(Sender: TObject; AWorkMode: TWorkMode;
const AWorkCountMax: Integer);//开始下载前,将ProgressBar1最大值设置为需要接收数据大小.
begin
ProgressBar1.Max:=AWorkCountMax;
ProgressBar1.Min:=0;
ProgressBar1.Position:=0;
end;

procedure TForm1.IdHTTP1Work(Sender: TObject; AWorkMode: TWorkMode;
const AWorkCount: Integer);//接收数据时候,进度将在ProgressBar1显示出来.
begin
ProgressBar1.Position:=ProgressBar1.Position+AWorkCount;
end;

加载https的站点页面内容的时候记得在窗体上加上“IdSSLIOHandlerSocketOpenSSL1”

以及idhttp里面IOHandler为“IdSSLIOHandlerSocketOpenSSL1”

不然老报“IOHandler value is not valid.”错误。

dnspod API V2.0 就是用的https 用delphi开发客户 只需要用idhttp就可以post

在界面上放一个TIdHTTP控件,命名为IdHTTP1,再放一个TIdSSLIOHandlerSocket控件,命名为

IdSSLIOHandlerSocket1,将IdHTTP1的IOHandler属性设为IdSSLIOHandlerSocket1,这样就可以随

意的Get,Post那些地址为https开头的网站了。
不过这样仍然不行,当运行程序时,会报错“Could not load SSL library”,这是因为

TIdSSLIOHandlerSocket控件需要OpenSSL Library来配合,OpenSSL Library包含有两个动态链接库

libeay32.dll和ssleay32.dll。
OpenSSL Indy版下载 http://indy.fulgan.com/SSL/

或http://download.csdn.net/detail/netcreate/3498085(经测试,delphi 2010下的indy可以用)

将这个rar解包释放两个dll到你的程序目录即可,但是我这样做完以后post数据还是不行,发现

idhttp这里有个版本的选项Method,默认的是sslvSSLv2,改为sslvSSLv3,post返回数据正常,

yeah~仔细看了看,这个属性是IdSSLIOHandlerSocket1的。

写一个登录HTTPS协议网站的工具,想用INDY实现 
现在老是会报错“Could not load SSL library”,可是我已经把ssleay32.dll和libeay32.dll两个

库文件拷进去了,是不是要专门支持D7的库文件才可以.

有类似的代码也可以提供参考一下,非常感谢!

是的,在Indy10.0.5之前的版本所使用的OpenSSL是Indy特别的版本 
Indy10.2.3之前仅支持OpenSSL的0.9.8以前的版本 
Indy10.2.3及之后才支持…

时间: 2024-07-29 14:21:28

关于 TIdHttp的相关文章

Delphi xe5 控件TIdhttp的用法post,get解决中文乱码问题

网络接口如下图: 浏览器演示如下:http://xxx.xxx.xxx.xxx/web/login!doLogin?data={"password":"yy123","userCode":"yyy123","terminalCode":"123"} 返回信息是一个json格式的字符串:{"errorMsg":"登录成功!","result

一、酷狗 歌词搜索 Indy TIdhttp

酷狗歌词Url: http://lib9.service.kugou.com/websearch/index.php?page=1&cmd=100&pagesize=9&keyword= +歌名 酷狗歌词编码:UTF-8 中文歌名转UTF8编码代码 1 function StrToHex(str: string; AEncoding: TEncoding): string; 2 var 3 ss: TStringStream; 4 i: Integer; 5 begin 6 Res

delphi tidhttp 超时的解决方案

现在delphi都发布到xe10.1了,tidhttp还有缺陷,那就是超时设置在没有网络或者连不上服务器的时候是无效的,不管你设置为多少都要10-20秒.connectTimeout和readTimeout都试过了,网上找了一圈,有人提出修改源码,我没试,应该也可以.我采用的是把idhttp.get方法放到线程里,在主线程定时检查返回状态,这样就可以控制超时时间了,代码如下. 1 strResult:=''; 3 Tthread.CreateAnonymousThread( 4 procedur

delphi Tidhttp 发送json格式报文

type TwmsThreadpostJson = class(TThread) private Furl: string; Fpostcmd: string; FResult: string; FBOOL: Boolean; protected procedure Execute; override; end; class function TWmsApplicationfunction.postjson(url, postcmd: string): string; var FThread:

Delphi - Indy TIdHTTP方式创建程序外壳 - 实现可执行程序的自动升级

Delphi 实现可执行程序的自动升级 准备工作: 1:Delphi调用TIdHTTP方式开发程序,生成程序打包外壳 说明:程序工程命名为ERP_Update 界面布局如下: 代码实现如下: 1 unit Unit1; 2 3 interface 4 5 uses 6 Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, 7 Dialogs, StdCtrls, ExtCtrls, 8 IdTCPCo

利用TidHttp下载服务器图片

//从服务器上把图片下载到本地并处理procedure TForm3.ImgShow(filename:string);var  imageStream:TMemoryStream;  jpg:TJpegImage;  imgFile:string;  Bmp1,Bmp2 :TBitmap;  w1,h1:Integer;begin  try  //从网上将图片下传到本地,在下载时写入数据流   imgFile:='http://192.168.X.X/Images/'+filename;  

delphi TIdHTTP Post乱码问题

这里主要说的是中文乱码的问题 1. 发过去的是乱码如下处理, 服务器采用的是UFT-8编码的情况下 uses  HTTPApp;      sPost := HTTPEncode(UTF8Encode('中文处理')); 2. 返回的是乱码如下处理 ResponseStream:=TStringstream.Create('',TEncoding.UTF8); idhttp.Post(ConnectUrl,sends,ResponseStream);

TIdHTTP get下载文件

function Tform1.DownConfigreFile(var errmsg: string; url, name: string): boolean; var MyStream: TMemoryStream; begin Result := true; MyStream := TMemoryStream.Create; try try httpUpdate.Get(url + name, MyStream); MyStream.SaveToFile(ExtractFilePath(A

THttpCli发送和接受数据,代替indy10 TidHttp解决超时时间无效的问题

var StartTime:Integer; //由于Indy10碰到网络异常断掉,Indy超时时间无效的问题,需要安装第三方控件 OverByteICS 解决这个问题.procedure TFormPost.Button2Click(Sender: TObject); //发送overbyte 控件ICS var Data: AnsiString; AJson: TQJson; Strtemp: string; strData: string; postcmd: AnsiString; msR