Julia HTTP package

HTTP.jl は HTTP プロトコルのクライアント及びサーバの機能を提供する Julia パッケージである。

目次

  1. 1 パッケージ
    1. 1.1 パッケージの追加
    2. 1.2 パッケージのロード
  2. 2 メソッド
    1. 2.1 request
    2. 2.2 get
    3. 2.3 post
    4. 2.4 put
  3. 3 オブジェクト
    1. 3.1 HTTP.Request
    2. 3.2 HTTP.Response

1 パッケージ

JuliaからWeb APIを呼び出すためには、HTTP.jlパッケージが必要になる。

1.1 パッケージの追加

JuliaにHTTPパッケージを追加するには、REPLから Pkg.add を実行する。

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

パッケージの追加は、Julia のインストール後に1度だけ行えばよい。パッケージを使うたびに追加する必要はない。

JuliaにHTTPパッケージを追加していないと、次のエラーメッセージが表示される。

ERROR: LoadError: ArgumentError: Package HTTP not found in current path:
- Run `import Pkg; Pkg.add("HTTP")` to install the HTTP package.

Stacktrace:
[1] require(::Module, ::Symbol) at .\loading.jl:823
[2] include at .\boot.jl:326 [inlined]
[3] include_relative(::Module, ::String) at .\loading.jl:1038
[4] include(::Module, ::String) at .\sysimg.jl:29
[5] exec_options(::Base.JLOptions) at .\client.jl:267
[6] _start() at .\client.jl:436
in expression starting at C:\Users\tsuka\Documents\examples\julia\edinet.jl:1

1.2 パッケージのロード

Julia で HTTP パッケージを使用するためには、using キーワードで HTTP パッケージをロードする必要がある。

julia> using HTTP

JuliaからWeb APIを呼び出すサンプルとして、金融庁の電子開示システム「EDINET」の書類一覧APIを使って、メタデータを取得する例を示す。

using HTTP

# 書類一覧APIのエンドポイント
url = "https://disclosure.edinet-fsa.go.jp/api/v1/documents.json"

# 書類一覧APIのリクエストパラメータ
params = Dict("date" => "2019-04-25")

# 書類一覧APIの呼び出し
res = HTTP.get(url; require_ssl_verification = false, query = params)

# レスポンスの表示
println(String(res.body))

2 メソッド

2.1 request

HTTP.request() はHTTPリクエストメッセージを送信して、レスポンスメッセージを返す。

HTTP.request(method, url) -> HTTP.response
HTTP.request(method, url, headers) -> HTTP.response
HTTP.request(method, url, headers, body) -> HTTP.response

パラメータ

HTTP.request() には次のパラメータを指定できる。

method
HTTPメソッドを指定する。
method
メソッド
GET
POST
PUT
url
リクエストメッセージを送信するURLを指定する。
headers
HTTPヘッダを指定する。

キーワードパラメータ

HTTP.request()には、次に示すキーワードパラメータを指定できる。

proxy
プロキシのURLを指定する。
query
URLのクエリパラメータを置き換える。
using HTTP
url ="http://example.com/"
params = Dict("date" => "2019-04-25")
res = HTTP.get(url; query = params)
      
require_ssl_verification
SSL証明書の検証を要求する。
retries
リトライの回数を指定する。
using HTTP
url ="http://example.com/"
res = HTTP.get(url; retries = 4)
verbose
1または2に設定すると、追加のメッセージロギングが行われる。

サンプル

HTTPリスクエストメッセージを送信して、HTTPレスポンスメッセージを受信する例を次に示す。

using HTTP
r = HTTP.request("GET", "http://example.com/")
println(r.request)
println(r.version)
println(r.status)
println(r.headers)
println(String(r.body))

2.2 get

HTTP.get() はHTTPリクエストメッセージをGETメソッドで送信して、レスポンスメッセージを返す。

HTTP.get(url) -> HTTP.response
HTTP.get(url, headers) -> HTTP.response
HTTP.get(url, headers, body) -> HTTP.response

2.3 post

HTTP.post() はHTTPリクエストメッセージをPOSTメソッドで送信して、レスポンスメッセージを返す。

HTTP.post(url) -> HTTP.response
HTTP.post(url, headers) -> HTTP.response
HTTP.post(url, headers, body) -> HTTP.response

2.4 put

HTTP.put() はHTTPリクエストメッセージをPUTメソッドで送信して、レスポンスメッセージを返す。

HTTP.put(url) -> HTTP.response
HTTP.put(url, headers) -> HTTP.response
HTTP.put(url, headers, body) -> HTTP.response

3 オブジェクト

Julia の HTTP パッケージには、以下に示すオブジェクトがある。

HTTPパッケージのオブジェクト
オブジェクト 説明
Request HTTPリクエスト(要求)
Response HTTPレスポンス(応答)

3.1 HTTP.Request

HTTP.Request は HTTP 要求を表すオブジェクトであり、以下に示すフィールドを持つ。

HTTP.Requestのフィールド
フィールド 説明
method String HTTPメソッド
target String ターゲット
version HTTPVersion HTTPのバージョン
header HTTP.Headers HTTPのヘッダ
body Union{Vector{UInt8}, IO} HTTPのボディ
response HTTP.Response この要求に対する応答
url URI 要求のフルURL
context Dict{Symbol, Any} コンテキスト

3.2 HTTP.Response

HTTP.Response は HTTP 応答を表すオブジェクトであり、以下に示すフィールドを持つ。

HTTP.Responseのフィールド
フィールド 説明
version HTTPVersion HTTPのバージョン
status Int16 HTTPのステータス
headers Vector{Pair{String,String}} HTTPのヘッダ
body Vector{UInt8} or body::IO HTTPのボディ
request HTTP.Request HTTPの要求

HTTP.Response の例を以下に示す。

julia> using HTTP

julia> res = HTTP.request("GET", "http://example.com/")
HTTP.Messages.Response:
"""
HTTP/1.1 200 OK
Age: 334348
Cache-Control: max-age=604800
Content-Type: text/html; charset=UTF-8
Date: Tue, 04 Jul 2023 01:17:32 GMT
Etag: "3147526947+gzip+ident"
Expires: Tue, 11 Jul 2023 01:17:32 GMT
Last-Modified: Thu, 17 Oct 2019 07:18:26 GMT
Server: ECS (sec/9795)
Vary: Accept-Encoding
X-Cache: HIT
Content-Length: 1256

<!doctype html>
<html>
<head>
    <title>Example Domain</title>

    <meta charset="utf-8" />
    <meta http-equiv="Content-type" content="text/html; charset=utf-8" />
    <meta name="viewport" content="width=device-width, initial-scale=1" />
    <style type="text/css">
    body {
        background-color: #f0f0f2;
        margin: 0;
        padding: 0;
        font-family: "Open Sans", "Helvetica Neue", Helvetica, Arial, sans-serif;

    }
    div {
        width: 600px;
        margin: 5em auto;
        padding: 2em;
        background-color: #fdfdff;
        border-radius: 0.5em;
        box-shadow: 2px 3px 7px 2px rgba(0,0,0,0.02);
    }
    a:link, a:visited {
        color: #38488f;
        text-decoration: none;
    }
    @media (max-width: 700px) {
        div {
            margin: 0 auto;
            width: auto;
        }
    }
    </style>
</head>

<body>
<div>
    <h1>Example Domain</h1>
    <p>This domai
⋮
1256-byte body
"""

julia> println(res.version)
1.1.0

julia> println(res.status)
200

julia> println(res.headers)
Pair{SubString{String}, SubString{String}}[
  "Age" => "334348",
  "Cache-Control" => "max-age=604800",
  "Content-Type" => "text/html; charset=UTF-8",
  "Date" => "Tue, 04 Jul 2023 01:17:32 GMT",
  "Etag" => "\"3147526947+gzip+ident\"",
  "Expires" => "Tue, 11 Jul 2023 01:17:32 GMT",
  "Last-Modified" => "Thu, 17 Oct 2019 07:18:26 GMT",
  "Server" => "ECS (sec/9795)",
  "Vary" => "Accept-Encoding",
  "X-Cache" => "HIT",
  "Content-Length" => "1256"
]

※上記の例では、見やすいように適宜改行を入れている。

関連記事

Linuxのcurlコマンド

Pythonから金融庁のEDINET APIを使って有価証券報告書を取得する

参考文献

HTTP.jl contributors 2023. JuliaWeb / HTTP.jl

HTTP.jl contributors 2023. HTTP.jl Documentation

金融庁 2021. EDINET