API > HTTP


※上記の広告は60日以上更新のないWIKIに表示されています。更新することで広告が下部へ移動します。

このページではHTTP APIについて解説する。

参考資料:
執筆時のバージョン:
  • ComputerCraft 1.56 for Minecraft 1.6.2




HTTP API

HTTPによりインターネット上のサーバーへGET/POSTリクエストを送信し、ウェブサイトをダウンロードすることができるAPI。

このAPIを利用するには、前もってComputerCraft.cfgのenableAPI_httpをtrueにしておく必要がある。設定がfalse(デフォルト)の場合、このAPI自体コンピュータに読み込まれない。

文字列をURLエンコードするにはtextutils.urlEncode関数を利用するとよい。

なお、ここでは(プロトコルとしての)HTTPについての解説は行わない。

各メソッドのヘッダ

(どんなヘッダが送信されているのか気になる人向け)

HTTP APIではプレイヤーが任意のヘッダを指定することはできず、またComputerCraft側でも特にヘッダを指定していないため、Javaデフォルトのヘッダで送信されているものと思われる。

以下は各メソッドで送信されるリクエスト行およびヘッダ行の例。ちなみに、ゲーム内でpastebinプログラムを利用してPastebinでプログラムファイルを取得・投稿した時のもの(Javaバージョンは1.7.0 25)。

GET の例
GET /raw.php?i=smLqWBif HTTP/1.1
User-Agent: Java/1.7.0_25
Host: pastebin.com
Accept: text/html, image/gif, image/jpeg, *; q=.2, */*; q=.2
Connection: keep-alive


POST の例
POST /api/api_post.php HTTP/1.1
User-Agent: Java/1.7.0_25
Host: pastebin.com
Accept: text/html, image/gif, image/jpeg, *; q=.2, */*; q=.2
Connection: keep-alive
Content-Length: 219


request

dan200.computer.core.apis.HTTPAPI で定義
  • http.request( url[, postData])
  • URLurl(文字列)にHTTPリクエストを送信する。
    postData(文字列)を指定すると、POSTメソッドでメッセージボディとして送信される。postDataが省略またはnilの時はGETメソッドで送信される
  • 戻り値:nil

レスポンスはos.pullEvent関数http_successまたはhttp_failureイベントを捕捉することで取得する。そのため、レスポンスを非同期的に取得することができる。

例:
local url = "http://example.com/"
http.request(url)

while true do
  local event, sourceUrl, file = os.pullEvent()
  if event == "http_success" and sourceUrl == url then
    print(file.readAll())
    file.close()
    break
  elseif event == "http_failure" and sourceUrl == url then
    print("Server didn't respond.")
    break
  end
end
http://example.com/(IANAのExampleドメイン)からウェブページをダウンロードする。
成功した場合はページの内容(HTML)が、失敗(タイムアウト)した場合は"Server didn't respond."が表示される。

get

assets\computercraft\lua\bios.lua で定義
  • http.get( url )
  • URLurl(文字列)にHTTP GETリクエストを送信し、レスポンスを取得する
  • 戻り値:テーブル型。取得したウェブサイトのファイルハンドル。ただし、取得に失敗した場合はnilが返る

リクエストに対するレスポンスが返ってくるまで処理を停止する。内部的にはhttp.request関数とos.pullEvent関数を利用している。

例:
local file = http.get("http://example.com/")
if file ~= nil then
  print(file.readAll())
  file.close()
else
  print("Server didn't respond.")
end
http://example.com/(IANAのExampleドメイン)からウェブページをダウンロードする。
成功した場合はページの内容(HTML)が、失敗(タイムアウト)した場合は"Server didn't respond."が表示される。

post

assets\computercraft\lua\bios.lua で定義
  • http.post( url, postData)
  • URLurl(文字列)にHTTP POSTリクエストを送信し、レスポンスを取得する。postData(文字列)がメッセージボディとして送信される
  • 戻り値:テーブル型。取得したウェブサイトのファイルハンドル。ただし、取得に失敗した場合はnilが返る

リクエストに対するレスポンスが返ってくるまで処理を停止する。内部的にはhttp.request関数とos.pullEvent関数を利用している。

postDataが省略またはnilの場合は代わりに""(長さ0文字列)が使われる。