「API/HTTP」の編集履歴(バックアップ)一覧はこちら
「API/HTTP」(2013/09/14 (土) 18:43:39) の最新版変更点
追加された行は緑色になります。
削除された行は赤色になります。
このページではHTTP APIについて解説する。
参考資料:
-[[HTTP API>http://computercraft.info/wiki/index.php?title=HTTP_%28API%29]]
執筆時のバージョン:
-ComputerCraft 1.56 for Minecraft 1.6.2
----
#contents
----
*HTTP API
HTTPによりインターネット上のサーバーへGET/POSTリクエストを送信し、ウェブサイトをダウンロードすることができるAPI。
このAPIを利用するには、前もって[[ComputerCraft.cfg>Config]]のenableAPI_httpをtrueにしておく必要がある。設定がfalse(デフォルト)の場合、このAPI自体コンピュータに読み込まれない。
文字列をURLエンコードするには[[textutils.urlEncode関数>API/Textutils#id_c92ca7c3]]を利用するとよい。
なお、ここでは(プロトコルとしての)HTTPについての解説は行わない。
**各メソッドのヘッダ
(どんなヘッダが送信されているのか気になる人向け)
HTTP APIでは&u(){プレイヤーが任意のヘッダを指定することはできず}、またComputerCraft側でも特にヘッダを指定していないため、Javaデフォルトのヘッダで送信されているものと思われる。
以下は各メソッドで送信されるリクエスト行およびヘッダ行の例。ちなみに、ゲーム内でpastebinプログラムを利用して[[Pastebin>http://pastebin.com/]]でプログラムファイルを取得・投稿した時のもの(Javaバージョンは1.7.0 25)。
&bold(){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
>
&bold(){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( &italic(){url}[, &italic(){postData}])
-URL&italic(){url}(文字列)にHTTPリクエストを送信する。 &br()&italic(){postData}(文字列)を指定すると、POSTメソッドでメッセージボディとして送信される。&italic(){postData}が省略またはnilの時はGETメソッドで送信される
-戻り値:nil
レスポンスは[[os.pullEvent関数>API/OS#id_12ecb1d0]]で[[http_successまたはhttp_failureイベント>API/OS#id_aae1e50c]]を捕捉することで取得する。そのため、レスポンスを非同期的に取得することができる。
例:
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( &italic(){url} )
-URL&italic(){url}(文字列)にHTTP GETリクエストを送信し、レスポンスを取得する
-戻り値:テーブル型。取得したウェブサイトの[[ファイルハンドル>API/FS#id_340ee13d]]。ただし、取得に失敗した場合は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( &italic(){url}, &italic(){postData})
-URL&italic(){url}(文字列)にHTTP POSTリクエストを送信し、レスポンスを取得する。&italic(){postData}(文字列)がメッセージボディとして送信される
-戻り値:テーブル型。取得したウェブサイトの[[ファイルハンドル>API/FS#id_340ee13d]]。ただし、取得に失敗した場合はnilが返る
リクエストに対するレスポンスが返ってくるまで処理を停止する。内部的にはhttp.request関数とos.pullEvent関数を利用している。
&italic(){postData}が省略またはnilの場合は代わりに""(長さ0文字列)が使われる。
このページではHTTP APIについて解説する。
参考資料:
-[[HTTP API>http://computercraft.info/wiki/index.php?title=HTTP_%28API%29]]
執筆時のバージョン:
-ComputerCraft 1.56 for Minecraft 1.6.2
----
#contents
----
*HTTP API
HTTPによりインターネット上のサーバーへGET/POSTリクエストを送信し、ウェブサイトをダウンロードすることができるAPI。
このAPIを利用するには、前もって[[ComputerCraft.cfg>Config]]のenableAPI_httpをtrueにしておく必要がある。設定がfalse(デフォルト)の場合、このAPI自体コンピュータに読み込まれない。
文字列をURLエンコードするには[[textutils.urlEncode関数>API/Textutils#id_c92ca7c3]]を利用するとよい。
なお、ここでは(プロトコルとしての)HTTPについての解説は行わない。
**各メソッドのヘッダ
(どんなヘッダが送信されているのか気になる人向け)
HTTP APIでは&u(){プレイヤーが任意のヘッダを指定することはできず}、またComputerCraft側でも特にヘッダを指定していないため、Javaデフォルトのヘッダで送信されているものと思われる。
以下は各メソッドで送信されるリクエスト行およびヘッダ行の例。ちなみに、ゲーム内でpastebinプログラムを利用して[[Pastebin>http://pastebin.com/]]でプログラムファイルを取得・投稿した時のもの(Javaバージョンは1.7.0 25)。
&bold(){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
>
&bold(){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( &italic(){url}[, &italic(){postData}])
-URL&italic(){url}(文字列)にHTTPリクエストを送信する。 &br()&italic(){postData}(文字列)を指定すると、POSTメソッドでメッセージボディとして送信される。&italic(){postData}が省略またはnilの時はGETメソッドで送信される
-戻り値:nil
レスポンスは[[os.pullEvent関数>API/OS#id_12ecb1d0]]で[[http_successまたはhttp_failureイベント>API/OS#id_aae1e50c]]を捕捉することで取得する。そのため、レスポンスを非同期的に取得することができる。
例:
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( &italic(){url} )
-URL&italic(){url}(文字列)にHTTP GETリクエストを送信し、レスポンスを取得する
-戻り値:テーブル型。取得したウェブサイトの[[ファイルハンドル>API/FS#id_340ee13d]]。ただし、取得に失敗した場合は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( &italic(){url}, &italic(){postData})
-URL&italic(){url}(文字列)にHTTP POSTリクエストを送信し、レスポンスを取得する。&italic(){postData}(文字列)がメッセージボディとして送信される
-戻り値:テーブル型。取得したウェブサイトの[[ファイルハンドル>API/FS#id_340ee13d]]。ただし、取得に失敗した場合はnilが返る
リクエストに対するレスポンスが返ってくるまで処理を停止する。内部的にはhttp.request関数とos.pullEvent関数を利用している。
&italic(){postData}が省略またはnilの場合は代わりに""(長さ0文字列)が使われる。