我想在框架中创建一个CloudFlare
客户端。Firemonkey
对于那些不知道的人,CloudFlare 可以作为任何拥有网站的人的 CDN。它们有一个可用的 API,并且与许多 Web API 一样,它们JSON
与基于令牌的系统一起使用。它需要帐户电子邮件地址和帐户令牌才能访问 API。它在 HTTPS 上运行,您可以想象,尝试通过 HTTP/非 SSL 访问 API 只会产生空结果。
我希望创建的应用程序将用作一体化管理工具,旨在消除我使用 Web 浏览器来管理我的 CloudFlare 设置的需要。我遇到了最基本的问题;SSL 发布。看,我可以通过网络浏览器提交 API 请求并获取结果列表(例如https://www.cloudflare.com/api_json.html?a=stats&z=DOMAIN&u=EMAIL&tkn=TOKEN
- 出于明显原因删除了个人详细信息),但我不确定我将如何获得这些相同的结果(或来自 API 的任何结果就此而言)在Firemonkey中。
我已经Overbyte ICS
安装了 SSL,以及基本的捆绑Indy
组件,但我很难开始使用它。我需要https://www.cloudflare.com/api_json.html
通过 HTTPS/SSL 发布参数列表,但我不知道从哪里开始。我已经看到了一些围绕 SO 的各种示例,主要使用 ICS,但我一直无法找到任何特定于使用多个参数发布的内容、我应该如何格式化它等等。
我尝试的一个示例是使用 ICS TSSLHttpCli
,将我的参数写为单个字符串(即a=stats&z=DOMAIN&u=EMAIL&tkn=TOKEN
),将其写入SendStream
of TSSLHttpCli
,寻找0,0
,设置 URL(即https://www.cloudflare.com/api_json.html?
),然后调用该Post
方法。但是,这给了我Connection aborted on request
. 这是我尝试过的代码(尽管我已经用通用值替换了个人详细信息);
var
Data : AnsiString;
RcvStrm, SndStrm : TMemoryStream;
begin
SndStrm := TMemoryStream.Create;
RcvStrm := TMemoryStream.Create;
Data := '?a=stats&z=MYDOMAIN&u=MYEMAIL&tkn=MYTOKEN';
SslHttpCli.SendStream := SndStrm;
SslHttpCli.SendStream.Write(Data[1],Length(Data));
SslHttpCli.SendStream.Seek(0,0);
Memo1.Lines.LoadFromStream(SndStrm);
ShowMessage('Waiting!');
SslHttpCli.RcvdStream := RcvStrm;
SslHttpCli.URL := 'https://www.cloudflare.com/api_json.html';
SslHttpCli.Post;
Memo1.Lines.Clear;
Memo1.Lines.LoadFromStream(RcvStrm);
Memo1.Lines.Add('.....');
RcvStrm.Free;
SndStrm.Free;
ShowMessage('Complete!');
end;
这些ShowMessage
程序只是为了提供视觉中断,因此我每次都可以查看流中的数据。当Memo1.Lines.LoadFromStream(SndStrm);
被调用时,我按预期得到一个问号,Data
即备忘录中的内容。
当我调用时Memo1.Lines.LoadFromStream(RcvStrm);
,我希望它添加来自 API 的返回结果,然后添加它下面的 5 个点。但是,这并没有发生,很明显我收到的消息与问题有关。我假设我没有正确设置数据,但我只是不确定在尝试发布之前我应该如何格式化它。我什至将下面的所有内容都注释掉Memo1.Lines.LoadFromStream(RcvStrm);
到最后,看看是否在Clear
备忘录上调用了该过程,但备忘录的内容与我调用时的内容保持一致LoadFromStream(SndStrm)
。决赛ShowMessage
也不叫。
我最初尝试使用 String 而不是 AnsiString,但这只是输出 Data 的第一个字符而不是整个字符串。
它不起作用的原因可能有很多(API访问的所有细节都是正确的,所以这是代码的问题),但我需要有更多经验和知识的人来指引我正确的方向。
我的网络编码知识有限,到目前为止我只在Delphi中处理过基本的SQL和FTP。一旦我完成了这一步,我仍然必须使用解析的 JSON,但是现在,任何人都可以帮助我完成这项工作,这样我就可以开始了吗?