HTTP.jl は HTTP プロトコルのクライアント及びサーバの機能を提供する Julia パッケージである。
JuliaからWeb APIを呼び出すためには、HTTP.jlパッケージが必要になる。
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
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))
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() には次のパラメータを指定できる。
メソッド |
---|
GET |
POST |
PUT |
HTTP.request()には、次に示すキーワードパラメータを指定できる。
using HTTP
url ="http://example.com/"
params = Dict("date" => "2019-04-25")
res = HTTP.get(url; query = params)
using HTTP
url ="http://example.com/"
res = HTTP.get(url; retries = 4)
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))
HTTP.get() はHTTPリクエストメッセージをGETメソッドで送信して、レスポンスメッセージを返す。
HTTP.get(url) -> HTTP.response
HTTP.get(url, headers) -> HTTP.response
HTTP.get(url, headers, body) -> HTTP.response
HTTP.post() はHTTPリクエストメッセージをPOSTメソッドで送信して、レスポンスメッセージを返す。
HTTP.post(url) -> HTTP.response
HTTP.post(url, headers) -> HTTP.response
HTTP.post(url, headers, body) -> HTTP.response
HTTP.put() はHTTPリクエストメッセージをPUTメソッドで送信して、レスポンスメッセージを返す。
HTTP.put(url) -> HTTP.response
HTTP.put(url, headers) -> HTTP.response
HTTP.put(url, headers, body) -> HTTP.response
Julia の HTTP パッケージには、以下に示すオブジェクトがある。
オブジェクト | 説明 |
---|---|
Request | HTTPリクエスト(要求) |
Response | HTTPレスポンス(応答) |
HTTP.Request は HTTP 要求を表すオブジェクトであり、以下に示すフィールドを持つ。
フィールド | 型 | 説明 |
---|---|---|
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} | コンテキスト |
HTTP.Response は HTTP 応答を表すオブジェクトであり、以下に示すフィールドを持つ。
フィールド | 型 | 説明 |
---|---|---|
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"
]
※上記の例では、見やすいように適宜改行を入れている。
Pythonから金融庁のEDINET APIを使って有価証券報告書を取得する
HTTP.jl contributors 2023. JuliaWeb / HTTP.jl
HTTP.jl contributors 2023. HTTP.jl Documentation
金融庁 2021. EDINET