カナデKanade

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で実行すると、このモジュールも止まります(ソケットのドキュメントの最後の節を見てください)。
プレイグラウンド
結果
コードを書いて「実行」ボタンを押してください。