LazarusによるHTTPクライアントメモ

Free Pascal Compiler のLazarus環境でHTTP/JSON通信を行うためのメモ。

一通り通信できるようになったのでざっくりは把握できるようになりましたが、
手探りで情報を探しながら使い方を探っているので間違ってるかも・・

FPCで使えるHTTPクライアントを調べてみると
TFPHttpClient型
TFPCustomHTTPClient型
などを見つけました。

どちらも fphttpclient ユニット内にあり追加ライブラリのインストールは不要←コレ重要^^
イベント駆動型で使う場合はインスタンスを生成してアクセス、
手続き型で使う場合はwithで囲って生成して使う例が多いようです。

どうやらリクエスト毎に生成、廃棄とできるだけスコープを狭く使うのが良いっぽいです
使い方メモ。

uses fphttpclient; でユニット追加
①HttpObj := TFPHttpClient; //← TFPHttpClient型で変数宣言
②HttpObj := TFPHTTPClient.Create(nil);  //←引数はnilで生成
③HttpObj.Addheader('ヘッダに付加する文字列');  //←リクエスト前にヘッダをセット
④s := HttpObj.Get(URL);  //← 要求実行
⑤ HttpObj.Free  //←インスタンス破棄
TFPHttpClientでOANDAのREST APIに接続する方法 → 接続OK
var
  HttpObj: TFPHttpClient;
  s, u: string;
begin
  u := stURL + stParam;
  HttpObj := TFPHTTPClient.Create(nil);
   //GET用ヘッダ作成
   HttpObj.AddHeader('Accept','application/json');
   HttpObj.AddHeader('Content-Type','application/x-www-form-urlencoded');
   HttpObj.AddHeader('Authorization', stToken);
   try
     Memo1.Lines.Add('■GET要求→' + u);
     s := HttpObj.Get(u); //GETで要求
   except
     on e: Exception do begin
     Memo1.Lines.Add('■例外発生: ' + e.Message);
     HttpObj.Free;
   end;
end;
TFPCustomHTTPClientでページ取得
var
  s1, s2: string;
  HTTPObj: TFPCustomHTTPClient;
begin
  HTTPObj := TFPCustomHTTPClient.Create(Nil);
    s1 := HTTPObj.Get('htp://www.yahoo.jp.jp');  //←Webページを表示しようとするとエラー発生
    //RSSページ等は正常に取得可能
    s1 := HTTPObj.Get('https://news.google.com/news?hl=ja&ned=us&ie=UTF-8&oe=UTF-8&output=rss');
    s2 := HTTPObj.SimpleGet('https://news.yahoo.co.jp/pickup/rss.xml');
  Memo1.Lines.Add(s1);
  Memo1.Lines.Add(s2);
end;
手続き型で使う場合はwith文でTFPHttpClientクラスの範囲を指定して生成→使用→開放のパターンでOKっぽい
 With TFPHttpClient.Create(Nil) do begin
   try
     AddHeader('Accept-Language','ja');
     s1 :=Get('https://news.nifty.com/rsslist/') ;
     memo1.Lines.Add(s1);
   finally
     Free;
   end;
 end;

 

kabekin