はじめに
D-man botで使われているtwitter4dはstd.net.curlを使っているためlibcurlに依存しています。
今回、std.net.curlからdlang-requestsに変更するために調べた使い方をまとめます。
dlang-requests
読んで字のごとくpython-requestsインスパイア系のHTTP/FTPクライアントライブラリです。
APIは3つのレベルに分かれています。
- 最も高水準な
getContent
とpostContent
-
Request
を用いResponse
構造体を返すRequest.get()
,Reuest.post
,Request.exec!"method"
など - 最も低水準な
HTTPRequest
とFTPRequest
今回は2つ目のRequest
とResponse
の使います。
Request
GET
Request rq = Request();
Response rs = rq.get("https://httpbin.org/");
assert(rs.code==200);
std.net.curlは2xx以外のコードを受け取ったとき例外を返しますが、dlang-requestはハンドリングできます。
POST
POSTもGETと同様にResponse
を返します。
また、Request
にはaddHeaders
でヘッダーを付加できます。
auto rq = Request();
rq.addHeaders(["User-Agent": "test-123", "X-Header": "x-value"]);
auto rs = rq.post("http://httpbin.org/post", `{"a":"b"}`, "application/x-www-form-urlencoded");
Response
レスポンスの詳細を表します。
-
code
- HTTP/FTPのレスポンスコード -
responseBody
- レスポンスのボディ部 -
responseHeaders
- レスポンスのヘッダー部
Streaming server response
useStreaming
をtrue
にすることで逐次レスポンスを受け取ることができます。
auto rq = Request();
rq.useStreaming = true;
rq.verbosity = 2;
auto rs = rq.get("http://httpbin.org/image/jpeg");
auto stream = rs.receiveAsRange();
while(!stream.empty) {
writefln("Received %d bytes, total received %d from d ocument legth %d", stream.front.length,
rq.contentReceived, rq.contentLength);
stream.popFront;
}
byChunkAsync
とほぼ同等の挙動をします。