Last Updated on 2018年8月24日 by kabekin
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;