|
Foundation 1.1.2 | |||||||||
前のクラス 次のクラス | フレームあり フレームなし | |||||||||
概要: 入れ子 | フィールド | コンストラクタ | メソッド | 詳細: フィールド | コンストラクタ | メソッド |
public interface HttpConnection
このインタフェースは、HTTP 接続に必要なメソッドと定数を定義します。
HTTP は、要求の送信前に要求のパラメータを設定する必要がある要求応答プロトコルの 1 つです。接続は、次のいずれかの状態になります。
setRequestMethod
setRequestProperty
次のメソッドは、Setup 状態の接続を Connected 状態に切り替えます。
openInputStream
openDataInputStream
getLength
getType
getEncoding
getHeaderField
getResponseCode
getResponseMessage
getHeaderFieldInt
getHeaderFieldDate
getExpiration
getDate
getLastModified
getHeaderField
getHeaderFieldKey
次のメソッドは、接続が Setup 状態または Connected 状態の間、呼び出すことができます。
close
getRequestMethod
getRequestProperty
getURL
getProtocol
getHost
getFile
getRef
getPort
getQuery
openOutputStream
メソッドまたは openDataOutputStream
メソッドによって出力ストリームがオープンしたあと、setRequestMethod
または setRequestProperty
を使用して要求パラメータを変更することはできません。要求パラメータの送信後、これらのメソッドは IOException
をスローします。
OutputStream.close
メソッドまたは DataOutputStream.close
メソッドを使用して出力ストリームを閉じると、接続が Connected 状態になります。OutputStream.flush
メソッドまたは DataOutputStream.flush
メソッドを使用して出力ストリームをフラッシュするときは、ストリームに書き込まれたデータとともに要求パラメータを送信する必要があります。
close
メソッドを呼び出すと、任意の状態から Closed 状態に切り替えることができます。同時に、その接続からオープンしたすべてのストリームがクローズします。 StreamConnection の使用例
StreamConnection
を使用した単純な URL の読み取りです。HTTP 固有の動作は不要か、使用しません。(注: この例では、HTTP 応答ヘッダーと HTTP 応答コードがすべて無視されます。プロキシまたはサーバーがエラー応答ページを送信した場合、アプリケーションは InputStream
で取得されたデータを識別できません。
URL のオープンには、Connector.open
を使用します。結果としては、StreamConnection
が返されます。StreamConnection
から InputStream
がオープンします。これを使用して、ファイルの終わり (-1) までのすべての文字が読み取られます。例外がスローされた場合、接続は終了し、ストリームもクローズします。
void getViaStreamConnection(String url) throws IOException { StreamConnection c = null; InputStream s = null; try { c = (StreamConnection)Connector.open(url); s = c.openInputStream(); int ch; while ((ch = s.read()) != -1) { ... } } finally { if (s != null) s.close(); if (c != null) c.close(); } }
ContentConnection の使用例
ContentConnection
を使用した単純な URL の読み取りです。HTTP 固有の動作は不要か、使用しません。
URL のオープンには、Connector.open
を使用します。結果としては、ContentConnection
が返されます。ContentConnection
で長さが表示される場合があります。長さが指定された場合、データの一括読み取りが可能になります。ContentConnection
から InputStream
がオープンします。これを使用して、ファイルの終わり (-1) までのすべての文字が読み取られます。例外がスローされた場合、接続は終了し、ストリームもクローズします。
void getViaContentConnection(String url) throws IOException { ContentConnection c = null; DataInputStream is = null; try { c = (ContentConnection)Connector.open(url); int len = (int)c.getLength(); dis = c.openDataInputStream(); if (len > 0) { byte[] data = new byte[len]; dis.readFully(data); } else { int ch; while ((ch = dis.read()) != -1) { ... } } } finally { if (dis != null) dis.close(); if (c != null) c.close(); } }
HttpConnection の使用例
HttpConnection
を使用して、HTTP ヘッダーとデータを読み取ります。
URL のオープンには、Connector.open
を使用します。結果としては、HttpConnection
が返されます。HTTP ヘッダーが読み取られ、処理されます。長さが指定された場合、データの一括読み取りが可能になります。HttpConnection
から InputStream
がオープンします。これを使用して、ファイルの終わり (-1) までのすべての文字が読み取られます。例外がスローされた場合、接続は終了し、ストリームもクローズします。
void getViaHttpConnection(String url) throws IOException { HttpConnection c = null; InputStream is = null; int rc; try { c = (HttpConnection)Connector.open(url); // 応答コードを取得すると接続が開始されて、 // 要求が送信され、HTTP 応答ヘッダーが読み取られる。 // ヘッダーは要求があるまで保管される。 rc = c.getResponseCode(); if (rc != HttpConnection.HTTP_OK) { throw new IOException("HTTP response code: " + rc); } is = c.openInputStream(); // ContentType を取得 String type = c.getType(); // 長さを取得し、データを処理 int len = (int)c.getLength(); if (len > 0) { int actual = 0; int bytesread = 0 ; byte[] data = new byte[len]; while ((bytesread != len) && (actual != -1)) { actual = is.read(data, bytesread, len - bytesread); bytesread += actual; } } else { int ch; while ((ch = is.read()) != -1) { ... } } } catch (ClassCastException e) { throw new IllegalArgumentException("Not an HTTP URL"); } finally { if (is != null) is.close(); if (c != null) c.close(); } }
POST と HttpConnection の使用例
ヘッダーとコンテンツを持つ要求をサーバーに送信し、そのヘッダーおよびコンテンツを処理します。
URL のオープンには、Connector.open
を使用します。結果としては、HttpConnection
が返されます。要求メソッドが POST に設定され、要求ヘッダーが設定されます。単純なコマンドが書き込まれ、フラッシュされます。HTTP ヘッダーが読み取られ、処理されます。長さが指定された場合、データの一括読み取りが可能になります。HttpConnection
から InputStream
がオープンします。これを使用して、ファイルの終わり (-1) までのすべての文字が読み取られます。例外がスローされた場合、接続は終了し、ストリームもクローズします。
void postViaHttpConnection(String url) throws IOException { HttpConnection c = null; InputStream is = null; OutputStream os = null; int rc; try { c = (HttpConnection)Connector.open(url); // 要求メソッドとヘッダーを設定 c.setRequestMethod(HttpConnection.POST); c.setRequestProperty("If-Modified-Since", "29 Oct 1999 19:43:31 GMT"); c.setRequestProperty("User-Agent", "Profile/MIDP-2.0 Configuration/CLDC-1.0"); c.setRequestProperty("Content-Language", "en-US"); // 出力ストリームを取得すると、ヘッダーがフラッシュされる場合がある os = c.openOutputStream(); os.write("LIST games\n".getBytes()); os.flush(); // Optional, getResponseCode will flush // 応答コードを取得すると接続が開始されて、 // 要求が送信され、HTTP 応答ヘッダーが読み取られる。 // ヘッダーは要求があるまで保管される。 rc = c.getResponseCode(); if (rc != HttpConnection.HTTP_OK) { throw new IOException("HTTP response code: " + rc); } is = c.openInputStream(); // ContentType を取得 String type = c.getType(); processType(type); // 長さを取得し、データを処理 int len = (int)c.getLength(); if (len > 0) { int actual = 0; int bytesread = 0 ; byte[] data = new byte[len]; while ((bytesread != len) && (actual != -1)) { actual = is.read(data, bytesread, len - bytesread); bytesread += actual; } process(data); } else { int ch; while ((ch = is.read()) != -1) { process((byte)ch); } } } catch (ClassCastException e) { throw new IllegalArgumentException("Not an HTTP URL"); } finally { if (is != null) is.close(); if (os != null) os.close(); if (c != null) c.close(); } }
コネクタの簡易ストリームメソッド
次の点に注意してください。Connector
クラスは、指定の URL から直接入力または出力ストリームを取得する、次の簡易メソッドを定義します。
InputStream openInputStream(String url)
DataInputStream openDataInputStream(String url)
OutputStream openOutputStream(String url)
DataOutputStream openDataOutputStream(String url)
getRequestMethod()
setRequestMethod()
getRequestProperty()
setRequestProperty()
getLength()
getType()
getEncoding()
getHeaderField()
getResponseCode()
getResponseMessage()
getHeaderFieldInt
getHeaderFieldDate
getExpiration
getDate
getLastModified
getHeaderField
getHeaderFieldKey
フィールドの概要 | |
---|---|
static String |
GET
HTTP Get メソッドです。 |
static String |
HEAD
HTTP Head メソッドです。 |
static int |
HTTP_ACCEPTED
202: 処理要求が受け付けられましたが、処理はまだ完了していません。 |
static int |
HTTP_BAD_GATEWAY
502: サーバーがゲートウェイまたはプロキシとして機能しているとき、要求を処理するためにアクセスした上流のサーバーから不正な応答を受け取りました。 |
static int |
HTTP_BAD_METHOD
405: Request-URI のリソースでは、Request-Line に指定されたメソッドが許可されません。 |
static int |
HTTP_BAD_REQUEST
400: 要求の構文が正しくないため、サーバーはこの要求を理解できませんでした。 |
static int |
HTTP_CLIENT_TIMEOUT
408: サーバーの所定の待ち時間内に、クライアントが要求を生成しませんでした。 |
static int |
HTTP_CONFLICT
409: 現在のリソースの状態に矛盾があるため、要求を完了できませんでした。 |
static int |
HTTP_CREATED
201: 要求が処理され、新しいリソースが作成されました。 |
static int |
HTTP_ENTITY_TOO_LARGE
413: 要求エンティティーが大きすぎて処理できないため、サーバーは要求の処理を拒否しています。 |
static int |
HTTP_EXPECT_FAILED
417: サーバーが Expect 要求ヘッダーフィールド内に指定された条件を満たすことができない場合や、プロキシサーバーである場合、このサーバーは、「次のホップのサーバーが要求を満たすことができない」という曖昧な情報を返します。 |
static int |
HTTP_FORBIDDEN
403: サーバーは要求を理解しましたが、要求の実行を拒否しています。 |
static int |
HTTP_GATEWAY_TIMEOUT
504: サーバーがゲートウェイまたはプロキシとして機能しているとき、要求を処理するためにアクセスした上流のサーバー (URI で指定) またはその他の必要な補助サーバーから、所定の時間内に応答を受け取ることができませんでした。 |
static int |
HTTP_GONE
410: 要求されたリソースはすでにサーバー上になく、転送先アドレスも不明です。 |
static int |
HTTP_INTERNAL_ERROR
500: サーバーが予期しなかった条件を検出したため、要求を処理できませんでした。 |
static int |
HTTP_LENGTH_REQUIRED
411: サーバーは、定義済みの Content-Length がない要求の受け付けを拒否します。 |
static int |
HTTP_MOVED_PERM
301: 要求されたリソースに新しい永続 URI が割り当てられたので、今後このリソースを参照するときは返されたいずれかの URI を使用する必要があります。 |
static int |
HTTP_MOVED_TEMP
302: 要求されたリソースの URI が一時的に変更されています。 |
static int |
HTTP_MULT_CHOICE
300: 要求されたリソースは固有の場所を持つ任意の表現セットの 1 つに対応しており、エージェント駆動型のネゴシエーション情報が提供されているため、ユーザー (またはユーザーエージェント) はより望ましい表現を選択し、その要求を所定の場所にリダイレクトできます。 |
static int |
HTTP_NO_CONTENT
204: サーバーが要求処理を完了しましたが、エンティティー本体を返す必要はなく、更新済みのメタ情報を返すことができます。 |
static int |
HTTP_NOT_ACCEPTABLE
406: 要求されているリソースは、要求とともに送信された受け入れヘッダーで受け付け不可になっているコンテンツ特性を持つ応答エンティティーを生成できるだけです。 |
static int |
HTTP_NOT_AUTHORITATIVE
203: エンティティーヘッダー内に返されたメタ情報は、元のサーバーから得られる完全なセットではありません。 |
static int |
HTTP_NOT_FOUND
404: サーバーは要求 URI に一致する内容を検出できませんでした。 |
static int |
HTTP_NOT_IMPLEMENTED
501: サーバーは要求を処理するために必要な機能をサポートしていません。 |
static int |
HTTP_NOT_MODIFIED
304: クライアントが条件付きの GET 要求を行い、アクセスを許可された場合でも、ドキュメントが変更されていないと、サーバーは応答としてこの状態コードを返します。 |
static int |
HTTP_OK
200: 要求が正常に実行されました。 |
static int |
HTTP_PARTIAL
206: サーバーはリソースの GET 要求を部分的に完了しました。 |
static int |
HTTP_PAYMENT_REQUIRED
402: このコードは将来使用できるように予約されています。 |
static int |
HTTP_PRECON_FAILED
412: 前提条件が、サーバー上のテストで false と評価された 1 つ以上の要求ヘッダーフィールド内に指定されています。 |
static int |
HTTP_PROXY_AUTH
407: このコードは 401 (承認されていない) と似ていますが、クライアント側が最初にプロキシに対して自身の認証情報を提示する必要があります。 |
static int |
HTTP_REQ_TOO_LONG
414: Request-URI が長すぎて解釈できないため、サーバーは要求の処理を拒否しています。 |
static int |
HTTP_RESET
205: サーバーが要求処理を完了したため、ユーザーエージェントは要求の送信元のドキュメントビューをリセットする必要があります。 |
static int |
HTTP_SEE_OTHER
303: 要求に対する応答の URI が変更されているので、GET メソッドを使用してそのリソース上の応答を取得する必要があります。 |
static int |
HTTP_TEMP_REDIRECT
307: 要求されたリソースの URI が一時的に変更されています。 |
static int |
HTTP_UNAUTHORIZED
401: この要求にはユーザー認証が必要です。 |
static int |
HTTP_UNAVAILABLE
503: サーバーの一時的な過負荷またはメンテナンスのために、サーバーは現在要求を処理することができません。 |
static int |
HTTP_UNSUPPORTED_RANGE
416: 要求に Range 要求ヘッダーフィールドが含まれているのに、このフィールド内の range-specifier 値がどれも現在選択されているリソースの範囲と重ならず、要求に If-Range 要求ヘッダーフィールドが含まれていない場合、サーバーはこの状態コードを含む応答を返します。 |
static int |
HTTP_UNSUPPORTED_TYPE
415: 要求のエンティティーの形式が要求されたメソッドの要求されたリソースでサポートされていないため、サーバーは要求の処理を拒否しています。 |
static int |
HTTP_USE_PROXY
305: 要求されたリソースには、Location フィールドに指定されたプロキシを使用してアクセスする必要があります。 |
static int |
HTTP_VERSION
505: サーバーは、要求メッセージ内で使用されている HTTP プロトコルのバージョンをサポートしていないか、サポートを拒否しています。 |
static String |
POST
HTTP Post メソッドです。 |
メソッドの概要 | |
---|---|
long |
getDate()
date ヘッダーフィールドの値を返します。 |
long |
getExpiration()
expires ヘッダーフィールドの値を返します。 |
String |
getFile()
この HttpConnection の URL のファイル部分を返します。 |
String |
getHeaderField(int n)
インデックスによりヘッダーフィールド値を取得します。 |
String |
getHeaderField(String name)
指定されたヘッダーフィールドの値を返します。 |
long |
getHeaderFieldDate(String name,
long def)
指定されたフィールドを日付として構文解析した値を返します。 |
int |
getHeaderFieldInt(String name,
int def)
指定されたフィールドを数値として構文解析した値を返します。 |
String |
getHeaderFieldKey(int n)
インデックスによりヘッダーフィールドキーを取得します。 |
String |
getHost()
この HttpConnection の URL のホスト情報 (ホスト名または IPv4 アドレス) を返します。 |
long |
getLastModified()
last-modified ヘッダーフィールドの値を返します。 |
int |
getPort()
この HttpConnection の URL のネットワークポート番号を返します。 |
String |
getProtocol()
この HttpConnection の URL のプロトコル名 (http または https) を返します。 |
String |
getQuery()
この HttpConnection の URL のクエリー部分を返します。 |
String |
getRef()
この HttpConnection の URL の参照部分を返します。 |
String |
getRequestMethod()
現在の要求メソッド (HEAD、GET、POST) を取得します。 |
String |
getRequestProperty(String key)
この接続の指定された一般要求プロパティーの値を返します。 |
int |
getResponseCode()
HTTP 応答状態コードを返します。 |
String |
getResponseMessage()
サーバーから応答コードとともに HTTP 応答メッセージが返された場合、そのメッセージを取得します。 |
String |
getURL()
この接続の URL の文字列表現を返します。 |
void |
setRequestMethod(String method)
URL 要求のメソッドを次のどれかに設定します。 |
void |
setRequestProperty(String key,
String value)
一般要求プロパティーを設定します。 |
インタフェース javax.microedition.io.ContentConnection から継承されたメソッド |
---|
getEncoding, getLength, getType |
インタフェース javax.microedition.io.InputConnection から継承されたメソッド |
---|
openDataInputStream, openInputStream |
インタフェース javax.microedition.io.Connection から継承されたメソッド |
---|
close |
インタフェース javax.microedition.io.OutputConnection から継承されたメソッド |
---|
openDataOutputStream, openOutputStream |
インタフェース javax.microedition.io.Connection から継承されたメソッド |
---|
close |
フィールドの詳細 |
---|
static final String HEAD
static final String GET
static final String POST
static final int HTTP_OK
static final int HTTP_CREATED
static final int HTTP_ACCEPTED
static final int HTTP_NOT_AUTHORITATIVE
static final int HTTP_NO_CONTENT
static final int HTTP_RESET
static final int HTTP_PARTIAL
static final int HTTP_MULT_CHOICE
static final int HTTP_MOVED_PERM
static final int HTTP_MOVED_TEMP
Location
ヘッダーは、アプリケーションによる要求の再送信先を示します。
static final int HTTP_SEE_OTHER
static final int HTTP_NOT_MODIFIED
static final int HTTP_USE_PROXY
static final int HTTP_TEMP_REDIRECT
static final int HTTP_BAD_REQUEST
static final int HTTP_UNAUTHORIZED
static final int HTTP_PAYMENT_REQUIRED
static final int HTTP_FORBIDDEN
static final int HTTP_NOT_FOUND
static final int HTTP_BAD_METHOD
static final int HTTP_NOT_ACCEPTABLE
static final int HTTP_PROXY_AUTH
static final int HTTP_CLIENT_TIMEOUT
static final int HTTP_CONFLICT
static final int HTTP_GONE
static final int HTTP_LENGTH_REQUIRED
static final int HTTP_PRECON_FAILED
static final int HTTP_ENTITY_TOO_LARGE
static final int HTTP_REQ_TOO_LONG
static final int HTTP_UNSUPPORTED_TYPE
static final int HTTP_UNSUPPORTED_RANGE
static final int HTTP_EXPECT_FAILED
static final int HTTP_INTERNAL_ERROR
static final int HTTP_NOT_IMPLEMENTED
static final int HTTP_BAD_GATEWAY
static final int HTTP_UNAVAILABLE
static final int HTTP_GATEWAY_TIMEOUT
static final int HTTP_VERSION
メソッドの詳細 |
---|
String getURL()
String getProtocol()
HttpConnection
の URL のプロトコル名 (http または https) を返します。
HttpConnection
の URL のプロトコルString getHost()
HttpConnection
の URL のホスト情報 (ホスト名または IPv4 アドレス) を返します。
HttpConnection
の URL のホスト情報String getFile()
HttpConnection
の URL のファイル部分を返します。
HttpConnection
の URL のファイル部分。
ファイルが存在しない場合は null
String getRef()
HttpConnection
の URL の参照部分を返します。RFC 2396 によると、URL 内のシャープ記号 (#) の後ろのテキスト部分がオプションのフラグメント識別子になります。ユーザーエージェントは、この情報を、リソースを正常に取得したあとの補足参照情報として使用できます。フラグメント識別子の形式と解釈は、取得した情報のメディアの種類 (RFC 2046) によって異なります。
HttpConnection
の URL の参照部分。
値が存在しない場合は null
String getQuery()
HttpConnection
の URL のクエリー部分を返します。
RFC 2396 によると、URL 内の最初の疑問符 (?) の後ろのテキスト部分がクエリーコンポーネントになります。
HttpConnection
の URL のクエリー部分。
値が存在しない場合は null
int getPort()
HttpConnection
の URL のネットワークポート番号を返します。
HttpConnection
の URL のネットワークポート番号。
Connector.open
に渡された文字列にポート番号が含まれていない場合は、デフォルトの HTTP ポート番号 80String getRequestMethod()
setRequestMethod(java.lang.String)
void setRequestMethod(String method) throws IOException
method
- HTTP メソッド
IOException
- メソッドをリセットできない場合、または要求されたメソッドが HTTP で有効でない場合getRequestMethod()
String getRequestProperty(String key)
key
- 要求プロパティーを示すキーワード (「accept」など)
null
setRequestProperty(java.lang.String, java.lang.String)
void setRequestProperty(String key, String value) throws IOException
注:複数のプロパティーを 1 つのプロパティーに付加できるようにする、コンマで区切られたリスト構文を使用するために、HTTP は、同じキーで複数のインスタンスを正当に持てる要求プロパティーをすべて必要とします。
key
- 要求を識別するキーワード (「accept
」など)value
- キーワードに関連した値
IOException
- 接続が Connected 状態の場合にスローされるgetRequestProperty(java.lang.String)
int getResponseCode() throws IOException
HTTP/1.0 200 OK HTTP/1.0 401 Unauthorized応答が有効な HTTP でない場合、それぞれ整数コード 200 と 401 が返されます。
IOException
- サーバーへの接続でエラーが発生した場合String getResponseMessage() throws IOException
HTTP/1.0 200 OK HTTP/1.0 404 Not Found文字列「OK」と「Not Found」をそれぞれ抽出します。応答から何も認識できなかった場合 (結果が有効な HTTP ではなかった場合)、null を返します。
null
IOException
- サーバーへの接続でエラーが発生した場合long getExpiration() throws IOException
expires
ヘッダーフィールドの値を返します。
IOException
- サーバーへの接続でエラーが発生した場合long getDate() throws IOException
date
ヘッダーフィールドの値を返します。
0
。
戻り値は、1970 年 1 月 1 日 GMT からのミリ秒数
IOException
- サーバーへの接続でエラーが発生した場合long getLastModified() throws IOException
last-modified
ヘッダーフィールドの値を返します。結果は、1970 年 1 月 1 日 GMT からのミリ秒数です。
HttpConnection
が参照するリソースが最後に変更された日付。不明の場合は 0
IOException
- サーバーへの接続でエラーが発生した場合String getHeaderField(String name) throws IOException
name
- ヘッダーフィールドの名前
null
IOException
- サーバーへの接続でエラーが発生した場合int getHeaderFieldInt(String name, int def) throws IOException
この形式の getHeaderField
が存在しているのは、一部の接続タイプ (http-ng
など) が事前に構文解析されたヘッダーを持つからです。そうした接続タイプのクラスは、このメソッドをオーバーライドすることで構文解析を回避できます。
name
- ヘッダーフィールドの名前def
- デフォルト値
def
値
IOException
- サーバーへの接続でエラーが発生した場合long getHeaderFieldDate(String name, long def) throws IOException
この形式の getHeaderField
が存在しているのは、一部の接続タイプ (http-ng
など) が事前に構文解析されたヘッダーを持つからです。そうした接続タイプのクラスは、このメソッドをオーバーライドすることで構文解析を回避できます。
name
- ヘッダーフィールドの名前def
- デフォルト値
def
引数の値
IOException
- サーバーへの接続でエラーが発生した場合String getHeaderField(int n) throws IOException
n
- ヘッダーフィールドのインデックス
null
。
フィールド値がない場合は空の String
IOException
- サーバーへの接続でエラーが発生した場合String getHeaderFieldKey(int n) throws IOException
n
- ヘッダーフィールドのインデックス
null
。
IOException
- サーバーへの接続でエラーが発生した場合
|
Foundation 1.1.2 | |||||||||
前のクラス 次のクラス | フレームあり フレームなし | |||||||||
概要: 入れ子 | フィールド | コンストラクタ | メソッド | 詳細: フィールド | コンストラクタ | メソッド |
Copyright 2006 Sun Microsystems, Inc. All rights reserved. Use is subject to license terms. Documentation Redistribution Policy も参照してください。