gpt4 book ai didi

rest - 在 Delphi 中使用来自 Indy 的 GitHub API

转载 作者:太空宇宙 更新时间:2023-11-03 12:45:42 28 4
gpt4 key购买 nike

我正在使用 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 选项,但没有一个给我有效的响应。我得到两种不同的回应之一......

  1. 当使用 sslvSSLv3 时,我得到:error:14094410:SSL routines: SSL3_READ_BYTES:sslv3 alert handshake failure.
  2. 当使用 sslvTLSv1_2 时,我得到:error:1409442E:SSL routines:SSL_READ_BYTES:tlsv1 alert protocol version

我现在必须求助于 TRESTClient 才能使用 API。但它不能正确处理二进制文件。

测试很简单https://api.github.com。我可以在 Chrome 和 Postman 中调用它,并得到响应。只是不是通过 Indy。

如何通过 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;

也许您的代码还需要修改用户代理字符串(因为我将此代码用于不同的服务提供商,而不仅仅是 GitHub。其中一些需要修改的用户代理字符串而不是默认值)。

来源:https://github.com/michaelJustin/daraja-framework/blob/master/demo/common/IndyHttpTransport.pas

关于rest - 在 Delphi 中使用来自 Indy 的 GitHub API,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56436568/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com