CloudFlare
フレームワークでクライアントを作成したいと考えていますFiremonkey
。ご存じない方のために説明すると、CloudFlare は、Web サイトを持っているすべての人にとって一種の CDN として機能します。利用可能な API があり、多くの Web API と同様にJSON
、トークンベースのシステムで使用しています。API にアクセスするには、アカウントのメール アドレスとアカウント トークンの両方が必要です。これは HTTPS で実行されます。ご想像のとおり、HTTP または非 SSL 経由で API にアクセスしようとすると、単純に null の結果が返されます。
私が作成したいアプリケーションは、オールインワンの管理ツールとして機能し、Web ブラウザーを使用して CloudFlare の設定を管理する必要がなくなります。最も基本的な問題があります。SSL ポスト。Web ブラウザ経由で API リクエストを送信し、結果のリストを取得できます (例:https://www.cloudflare.com/api_json.html?a=stats&z=DOMAIN&u=EMAIL&tkn=TOKEN
明らかな理由で個人情報が削除された) が、これらと同じ結果 (または API からの結果) を取得する方法がわかりませんさらに言えば)Firemonkeyで。
Overbyte ICS
基本的なバンドル コンポーネントと同様に SSL をインストールしましたがIndy
、これを使い始めるのに苦労しています。HTTPS/SSL 経由でパラメーターのリストを投稿する必要がありますがhttps://www.cloudflare.com/api_json.html
、どこから始めればよいかほとんどわかりません。主にICSを使用して、SOに関するいくつかのさまざまな例を見てきましたが、複数のパラメーターを使用した投稿、フォーマット方法などに固有のものを見つけることができませんでした.
私が試した 1 つの例は、 ICS を使用して、パラメーターTSSLHttpCli
を 1 つの文字列として書き込みa=stats&z=DOMAIN&u=EMAIL&tkn=TOKEN
(つまり しかし、これは私に与えます。これは私が試したコードです(ただし、個人の詳細を一般的な値に置き換えました)。SendStream
TSSLHttpCli
0,0
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
も呼ばれません。
最初は AnsiString の代わりに String を使用しようとしましたが、これは単に文字列全体ではなく Data の最初の文字を出力するだけです。
機能しない理由は多数あります (API アクセスの詳細はすべて正しいため、コードの問題です) が、より多くの経験と知識を持った人が正しい方向に向けてくれる必要があります。
私のネットワーク コーディングの知識は限られており、これまで Delphi で基本的な SQL と FTP しか扱っていませんでした。このステップが完了したら、まだ解析済みの JSON を使用する必要がありますが、今のところ、この作業を開始できるように、この作業を手伝ってくれる人はいますか?