はじめに
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とほぼ同等の挙動をします。