JuliaでHTTP Requestを送る方法


JuliaにはHttpRequestを送る際に便利なライブラリーが用意されています。
それを使えば簡単にリクエストを行うことができます。

ただし標準で使用できるものではないため、
パッケージをインストールする必要があります。

インストールするところから始めてみましょう。

インストール


JuliaにはPkgというパッケージ管理ツールがあります。
これをJuliaのREPLからしようしてライブラリーを組み込みます。
HTTPというパッケージを以下のように取得します。

インストールできたらusingしてみましょう。
初回はコンパイルのため少し時間がかかります。

julia> using Pkg

julia> Pkg.add("HTTP")
...

julia> using HTTP
[ Info: Precompiling HTTP [cd3eb016-35fb-5094-929b-558a96fad6f3]

サンプル作成


これで準備が整いました。

簡単なサンプルを書いてみましょう

using HTTP

req = HTTP.request("GET","https://www.euniclus.com")
print(String(req.body))


これを実行するとhtmlを取得できます。

HTTP.requestにHttpメソッドとurlを渡します。

この関数が呼ばれた時点で指定したurlへリクエストが送られます。

戻り地はstatusやbodyなどのメンバ変数をもつオブジェクトです。

bodyに実際のデータが入っていますがこれをそのまま出力してもバイナリが出力されます。
String関数で文字列に変換できます。


POST Requestを送ることができます。

送られてきたPOSTデータをそのまま返却するサンプルを作ってみましょう。

using JSON
using HTTP
data = Dict("id" => 1, "name" => "euniclus" )

req = HTTP.request("POST",  "http://localhost:9999/api", ["Content-Type" => "application/json"], JSON.json(data))
println(String(req.body))


nodejsで書いたapiサーバーを用意します。

var express = require('express')
var app = express()

const bodyParser = require('body-parser')
app.use(bodyParser.json())
app.use(bodyParser.urlencoded({
    extended: true
    }));    

    app.post('/api', function(req, res){
      data = req.body
      console.log(data)
      res.send( "Server: "+data["id"]+" "+data["name"] )
    })

app.listen(9999)


実行するとこうなります。

$ julia request.jl
Server: 1 euniclus
$ node api.js
{ name: 'euniclus', id: 1 }


POSTで送られたデータがサーバーから返却されました。
GETにしろPOSTにしろ一行でリクエストが完了するのは楽でいいですね。