Jer*_*dge 5 delphi rest ssl github indy
我正在Delphi 10.1 Berlin中进行一个与GitHub集成的项目。该项目打算通过ZIP文件下载存储库。但是,我遇到了一些问题。
最初,我选择(一如既往)使用Indy与GitHub API集成。我一直将Indy用于所有Web API使用。但是,在GitHub上使用它并没有取得成功。
该API需要HTTPS。我已经获得了用于Indy的最新OpenSSL DLL,并且正在将Indy库与Delphi 10.1 Berlin一起使用。
我已经安装了TIdHTTP带有TIdSSLIOHandlerSocketOpenSSL附件的组件。我已将IO处理程序设置为所有Method可用选项,但没有一个给我有效的响应。我得到两种不同的回应之一...
sslvSSLv3,我得到:error:14094410:SSL routines: SSL3_READ_BYTES:sslv3 alert handshake failure.sslvTLSv1_2,我得到:error:1409442E:SSL routines:SSL_READ_BYTES:tlsv1 alert protocol version我TRESTClient现在只能诉诸于能够使用该API。但是它不能正确处理二进制文件。
测试很简单https://api.github.com。我可以在Chrome和Postman中打电话给我,然后得到答复。只是不通过印地。
如何通过Delphi的Indy库完成与GitHub API的连接?
该Indy HTTP子类可与GitHub API一起使用。
type
TIndyHttpTransport = class(TIdCustomHTTP)
public
constructor Create;
end;
implementation
uses
IdSSLOpenSSL;
{ TIndyHttpTransport }
constructor TIndyHttpTransport.Create;
var
SSLIO: TIdSSLIOHandlerSocketOpenSSL;
begin
inherited Create;
HTTPOptions := HTTPOptions + [hoNoProtocolErrorException, hoWantProtocolErrorContent];
SSLIO := TIdSSLIOHandlerSocketOpenSSL.Create(Self);
SSLIO.SSLOptions.SSLVersions := [sslvTLSv1, sslvTLSv1_1, sslvTLSv1_2];
SSLIO.SSLOptions.Mode := sslmClient;
SSLIO.SSLOptions.VerifyMode := [];
SSLIO.SSLOptions.VerifyDepth := 0;
Self.IOHandler := SSLIO;
// Request.UserAgent := 'my useragent string';
end;
Run Code Online (Sandbox Code Playgroud)
也许您的代码也需要修改用户代理字符串(因为我将此代码与其他服务提供商一起使用,不仅是GitHub。其中一些需要修改后的用户代理字符串,而不是默认值)。
来源:https : //github.com/michaelJustin/daraja-framework/blob/master/demo/common/IndyHttpTransport.pas