Webのアドレスから取ってこよう
Webサーバーにリクエストを送って答えを受け取る【HTTP】モジュールを知りましょう。
【HTTP】モジュールは、Webサーバーにリクエストを送って答えを受け取ります。ソケットの上で動く道具なので(アドレスに接続し、リクエストの文字列を送り、答えの文字列を読む作業を代わりにやってくれます)、【ソケット】と同じくHanaランタイムで実行するときだけ使えます。このドキュメントの実行ボタンでは「『HTTP』モジュールはブラウザでは使えません。」というエラーになりますが、それが正常です。
| 道具 | できること |
|---|---|
〈取得〉(アドレス) |
そのアドレスの内容を取ってきます(2つ目の値でヘッダーの辞書を渡せます) |
〈送信〉(アドレス, 本文) |
本文を送ります(POST)。3つ目の値でヘッダーの辞書を渡せます |
〈リクエスト〉(方式, アドレス) |
PUT、DELETE、PATCH、HEADなど別の方式でリクエストします(3つ目の値は本文、4つ目の値はヘッダーの辞書です) |
アドレスはhttp://かhttps://で始まる必要があります。3つの道具はどれも、答えを辞書で返します。
| キー | 値 |
|---|---|
「status」 |
ステータス番号(数字)です。200は成功、404は存在しないアドレスです |
「body」 |
受け取った内容(文字列)です |
「headers」 |
答えのヘッダーの辞書です。名前はすべて小文字です(例: 「content-type」) |
404や500のようにサーバーがエラーの状態で答えても、エラーにはなりません。答えは受け取れたので辞書で返し、ステータス番号を見て判断します。サーバーに接続できなかったり、時間が30秒を超えたりするとエラーになります。アドレスの行き先がほかの場所に移ったという答え(リダイレクト)は自動でたどります。
【HTTP】から〈取得〉を持ってこよう
『答え』を【辞書】の〈取得〉(「https://example.com/」)にしよう
もし(『答え』の「status」と200が等しい)なら:
『答え』の「body」を出力しよう
それ以外なら:
枠「だめでした: {『答え』の「status」}」を出力しよう
送って受け取る
【HTTP】から〈送信〉を持ってこよう
『答え』を【辞書】の〈送信〉(「https://example.com/メモ」, 「今日のやること」, {「Content-Type」: 「text/plain」})にしよう
『答え』の「status」を出力しよう
ヘッダーの辞書には文字列だけを入れられます。リクエストにはUser-Agent: hariヘッダーが標準で付きますが、同じ名前を渡せば渡した値が優先されます。
知っておくこと
- 受け取る内容は32MBまでしか読みません。それより大きいとエラーになります。
- 受け取った文字列がUTF-8でなければ、読めない文字は
�に置き換わります。 --allow-net=falseで実行すると、このモジュールも止まります(ソケットのドキュメントの最後の節を見てください)。