如何解决为什么TIdHTTP无法正确获得结果,但是Postman可以
我已经在Delphi XE3中编写了一个函数,可以使用TIdHTTP
从Web上获取一些数据。它无法正确获得结果,但邮递员可以。使用浏览器也可以正常返回数据。
有人可以在这里帮忙吗?
procedure CreateHTTP(var vHTTP: TIdHTTP; var vSSL: TIdSSLIOHandlerSocketOpenSSL);
begin
vHTTP := TIdHTTP.Create(nil);
vSSL := TIdSSLIOHandlerSocketOpenSSL.Create(vHTTP);
vSSL.SSLOptions.Method := sslvTLSv1;
vSSL.SSLOptions.Mode := sslmClient;
vHTTP.ProtocolVersion := pv1_0;
vHTTP.HandleRedirects := True;
vHTTP.IOHandler := vSSL;
vHTTP.Request.UserAgent := 'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML,like Gecko) Chrome/76.0.3809.100 Safari/537.36';
vHTTP.Request.ContentType := 'text/plain';
end;
function HttpGetData(vUrl: String): String;
var
lIdHttp: TIdHTTP;
lSSL: TIdSSLIOHandlerSocketOpenSSL;
lDataStream: TStringStream;
lCode: integer;
begin
Result :='';
CreateHTTP(lIdHttp,lSSL);
lDataStream := TStringStream.Create('',TEncoding.UTF8);
try
try
lIdHttp.Get(vUrl,lDataStream);
lCode := lIdHttp.ResponseCode;
Result := lDataStream.DataString;
except
on E: EIdHTTPProtocolException do
begin
lIdHttp.Disconnect;
end;
end;
finally
lIdHttp.Disconnect;
lDataStream.Free;
lSSL.Free;
lIdHttp.Free;
end;
end;
lData := HttpGetData('https://emh5.eastmoney.com/api/CaoPanBiDu/GetCaoPanBiDuPart1Get?fc=30023602&color=w');
解决方法
我在这里看到该站点需要TLS 1.2。开始时,它在这里也行不通,但后来我将Indy更新为10.6.2,将ssleay32.dll和libeay32.dll更新为新版本,并且与TLS 1.2配合良好。哦,我也在这里更改了代码
vSSL.SSLOptions.Method := sslvTLSv1_2; //sslvTLSv1;
vSSL.SSLOptions.SSLVersions := [sslvTLSv1_2];
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。