HttpURLConnection クラス
定義
重要
一部の情報は、リリース前に大きく変更される可能性があるプレリリースされた製品に関するものです。 Microsoft は、ここに記載されている情報について、明示または黙示を問わず、一切保証しません。
HTTP 固有の機能をサポートする URLConnection。
[Android.Runtime.Register("java/net/HttpURLConnection", DoNotGenerateAcw=true)]
public abstract class HttpURLConnection : Java.Net.URLConnection
[<Android.Runtime.Register("java/net/HttpURLConnection", DoNotGenerateAcw=true)>]
type HttpURLConnection = class
inherit URLConnection
- 継承
- 派生
- 属性
注釈
HTTP 固有の機能をサポートする URLConnection。 詳細については 、仕様 を参照してください。
このクラスの使用は、次のパターンに従います。 <ol><li>を呼び出URL#openConnection() URL.openConnection()
して結果を にHttpURLConnection
キャストすることで、新しい HttpURLConnection
を取得します。 <li>要求を準備します。 要求のプライマリ プロパティは URI です。 要求ヘッダーには、資格情報、優先コンテンツ タイプ、セッション Cookie などのメタデータが含まれる場合もあります。 <li>必要に応じて、要求本文をアップロードします。 インスタンスに要求本文が含まれている場合は、 で #setDoOutput(boolean) setDoOutput(true)
構成する必要があります。 によって #getOutputStream()
返されるストリームに書き込むことでデータを送信します。 <li>応答を読み取ります。 応答ヘッダーには、通常、応答本文のコンテンツ タイプや長さ、変更日、セッション Cookie などのメタデータが含まれます。 応答本文は、 によって #getInputStream()
返されるストリームから読み取られる場合があります。 応答に本文がない場合、そのメソッドは空のストリームを返します。 <li>切断します。 応答本文が読み取られたら、 を HttpURLConnection
呼び出 #disconnect()
して を閉じる必要があります。 切断すると、接続によって保持されているリソースが解放され、リソースが閉じられたり再利用されたりする可能性があります。 </Ol>
たとえば、 で http://www.android.com/
Web ページを取得するには:
{@code
URL url = new URL("http://www.android.com/");
HttpURLConnection urlConnection = (HttpURLConnection) url.openConnection();
try {
InputStream in = new BufferedInputStream(urlConnection.getInputStream());
readStream(in);
} finally {
urlConnection.disconnect();
}
}
<h3>"https" スキームを使用して URL で HTTPS</h3> を呼び出すと URL#openConnection()
、 が返 HttpsURLConnection
されます。これにより、既定値 javax.net.ssl.HostnameVerifier HostnameVerifier
と javax.net.ssl.SSLSocketFactory SSLSocketFactory
をオーバーライドできます。 から作成されたSSLSocketFactory
アプリケーション提供では、証明書チェーンを検証するためのカスタムjavax.net.ssl.X509TrustManager X509TrustManager
と、クライアント証明書を提供するためのカスタムjavax.net.ssl.X509KeyManager X509KeyManager
を提供javax.net.ssl.SSLContext SSLContext
できます。 詳細については、 javax.net.ssl.HttpsURLConnection HttpsURLConnection
をご覧ください。
<h3>応答処理</h3>HttpURLConnection
は、最大 5 つの HTTP リダイレクトを追跡します。 1 つの配信元サーバーから別の配信元サーバーへのリダイレクトに従います。 この実装は、HTTPS から HTTP へのリダイレクト、またはその逆に従いません。
HTTP 応答でエラーが発生したことが示された場合、 #getInputStream()
は をスローします IOException
。 を使用して #getErrorStream()
、エラー応答を読み取ります。 ヘッダーは、 を使用して #getHeaderFields()
通常の方法で読み取ることができます。
<h3>コンテンツ<の投稿/h3> Web サーバーにデータをアップロードするには、 を使用して出力用の接続を #setDoOutput(boolean) setDoOutput(true)
構成します。
最適なパフォーマンスを得るための呼び出しは、本文の長さが事前にわかっているときか#setChunkedStreamingMode(int)
、そうでない場合に呼び出#setFixedLengthStreamingMode(int)
す必要があります。 そうしないと HttpURLConnection
、送信される前にメモリ内の完全な要求本文をバッファーに格納し、ヒープを無駄にし (おそらく枯渇する)、待機時間を長くする必要があります。
たとえば、アップロードを実行するには、次のようにします。
{@code
HttpURLConnection urlConnection = (HttpURLConnection) url.openConnection();
try {
urlConnection.setDoOutput(true);
urlConnection.setChunkedStreamingMode(0);
OutputStream out = new BufferedOutputStream(urlConnection.getOutputStream());
writeStream(out);
InputStream in = new BufferedInputStream(urlConnection.getInputStream());
readStream(in);
} finally {
urlConnection.disconnect();
}
}
<h3>Performance</h3> このクラスから返される入力ストリームと出力ストリームは、><バッファーに<入っていないか、厳密>ではありません。 ほとんどの呼び出し元は、返されるストリームを または java.io.BufferedOutputStream BufferedOutputStream
でjava.io.BufferedInputStream BufferedInputStream
ラップする必要があります。 一括読み取りまたは書き込みのみを行う呼び出し元は、バッファリングを省略できます。
サーバー間で大量のデータを転送する場合は、ストリームを使用して、一度にメモリに格納されるデータの量を制限します。 本文全体を一度にメモリに格納する必要がない限り、完全な本文を 1 バイト配列または文字列として格納するのではなく、ストリームとして処理します。
待機時間を短縮するために、このクラスは、複数の要求/応答ペアに対して同じ基になる Socket
を再利用できます。 その結果、HTTP 接続が必要以上に長く開いたままになることがあります。 を #disconnect()
呼び出して、接続されているソケットのプールにソケットを返す場合があります。
既定では、サーバーが gzip 圧縮を使用する要求の HttpURLConnection
この実装により、 の呼び出し元 #getInputStream()
のデータが自動的に圧縮解除されます。 この場合、Content-Encoding および Content-Length 応答ヘッダーはクリアされます。 Gzip 圧縮は、要求ヘッダーで許容されるエンコーディングを設定することで無効にすることができます。
{@code
urlConnection.setRequestProperty("Accept-Encoding", "identity");
}
Accept-Encoding 要求ヘッダーを設定すると、自動圧縮解除が明示的に無効になり、応答ヘッダーはそのまま残ります。呼び出し元は、応答の Content-Encoding ヘッダーに従って、必要に応じて圧縮解除を処理する必要があります。
#getContentLength()
は送信されたバイト数を返し、圧縮ストリームのから読み取 #getInputStream()
ることができるバイト数を予測するために使用できません。 代わりに、使い果たされるまで、つまり -1 を返す場合 InputStream#read
は、そのストリームを読み取ります。
<h3>ネットワーク サインオン</h3> 一部の Wi-Fi ネットワークでは、ユーザーがサインオン ページをクリックするまでインターネット アクセスがブロックされます。 このようなサインオン ページは、通常、HTTP リダイレクトを使用して表示されます。 を使用 #getURL()
して、接続が予期せずリダイレクトされたかどうかをテストできます。 このチェックは、 または #getInputStream()
を呼び出#getHeaderFields()
してトリガーできる、応答ヘッダーを受信した後<、または 厳密>に応答ヘッダーを受け取るまで<>有効ではありません。 たとえば、応答が予期しないホストにリダイレクトされなかったことをチェックするには、次のようにします。
{@code
HttpURLConnection urlConnection = (HttpURLConnection) url.openConnection();
try {
InputStream in = new BufferedInputStream(urlConnection.getInputStream());
if (!url.getHost().equals(urlConnection.getURL().getHost())) {
// we were redirected! Kick the user out to the browser to sign on?
}
...
} finally {
urlConnection.disconnect();
}
}
<h3>HTTP 認証</h3 は>HttpURLConnection
HTTP 基本認証をサポートします。 を使用して Authenticator
、VM 全体の認証ハンドラーを設定します。
{@code
Authenticator.setDefault(new Authenticator() {
protected PasswordAuthentication getPasswordAuthentication() {
return new PasswordAuthentication(username, password.toCharArray());
}
});
}
HTTPS と組み合わせない限り、これは<>ユーザー認証のためのセキュリティで保護されたメカニズムではなく<、強力>です。 特に、ユーザー名、パスワード、要求、応答はすべて、暗号化なしでネットワーク経由で送信されます。
<h3>Cookie を<使用したセッション/h3> クライアントとサーバー間の有効期間が長い可能性のあるセッションを確立して維持するには、 HttpURLConnection
拡張可能な Cookie マネージャーが含まれます。 と CookieManager
を使用して VM 全体の Cookie 管理をCookieHandler
有効にします。
{@code
CookieManager cookieManager = new CookieManager();
CookieHandler.setDefault(cookieManager);
}
既定では、 CookieManager
配信元サーバー からの Cookie のみを受け入れます。 その他の 2 つのポリシーとして、 と CookiePolicy#ACCEPT_NONE
がCookiePolicy#ACCEPT_ALL
含まれています。 を実装 CookiePolicy
してカスタム ポリシーを定義します。
既定値 CookieManager
では、受け入れられたすべての Cookie がメモリ内に保持されます。 VM が終了すると、これらの Cookie は忘れてしまいます。 カスタム Cookie ストアを定義するために を実装 CookieStore
します。
HTTP 応答によって設定された Cookie に加えて、プログラムで Cookie を設定することもできます。 HTTP 要求ヘッダーに含めるには、Cookie にドメインとパスのプロパティが設定されている必要があります。
既定では、 の HttpCookie
新しいインスタンスは 、RFC 2965 Cookie をサポートするサーバーでのみ機能します。 多くの Web サーバーでは、以前の仕様 である RFC 2109 のみがサポートされています。 ほとんどの Web サーバーとの互換性を保つには、Cookie のバージョンを 0 に設定します。
たとえば、フランス語で受信 www.twitter.com
する場合:
{@code
HttpCookie cookie = new HttpCookie("lang", "fr");
cookie.setDomain("twitter.com");
cookie.setPath("/");
cookie.setVersion(0);
cookieManager.getCookieStore().add(new URI("http://twitter.com/"), cookie);
}
<h3>HTTP メソッド</h3>
HttpURLConnection
では、 メソッドが GET
既定で使用されます。 が呼び出された場合#setDoOutput setDoOutput(true)
は を使用POST
します。 その他の HTTP メソッド (OPTIONS
、、HEAD
PUT
、DELETE
および TRACE
) は、 と共に#setRequestMethod
使用できます。
<h3>プロキシ</h3> 既定では、このクラスは 配信元サーバーに直接接続します。 または Proxy.Type#SOCKS SOCKS
プロキシ経由でProxy.Type#HTTP HTTP
接続することもできます。 プロキシを使用するには、接続の作成時に を使用 URL#openConnection(Proxy) URL.openConnection(Proxy)
します。
<h3>IPv6 サポート</h3>
このクラスには、IPv6 の透過的なサポートが含まれています。 IPv4 アドレスと IPv6 アドレスの両方を持つホストの場合、接続が確立されるまで、各ホストのアドレスへの接続が試行されます。
<h3>応答キャッシュ</h3> Android 4.0 (アイスクリーム サンドイッチ、API レベル 15) には応答キャッシュが含まれています。 アプリケーションで HTTP キャッシュを有効にする手順については、以下を参照 android.net.http.HttpResponseCache
してください。
<h3>以前のリリース<のバグを回避する/h3> Android 2.2 (Froyo) より前のバージョンでは、このクラスにはいくつかの苛立つバグがありました。 特に、読み取り可能で InputStream
を呼び出すとclose()
、接続プールが有害になる可能性があります。 接続プールを無効にして、この問題を回避します。
{@code
private void disableConnectionReuseIfNecessary() {
// Work around pre-Froyo bugs in HTTP connection reuse.
if (Integer.parseInt(Build.VERSION.SDK) < Build.VERSION_CODES.FROYO) {
System.setProperty("http.keepAlive", "false");
}
}}
の HttpURLConnection
各インスタンスは、1 つの要求/応答ペアに使用できます。 このクラスのインスタンスはスレッド セーフではありません。
JDK1.1 に追加されました。
の java.net.HttpURLConnection
Java ドキュメント。
このページの一部は、によって作成および共有された作業に基づく変更であり、に記載されている条件に従って使用されます。
コンストラクター
HttpURLConnection(IntPtr, JniHandleOwnership) |
JNI オブジェクトのマネージド表現を作成するときに使用されるコンストラクター。ランタイムによって呼び出されます。 |
HttpURLConnection(URL) |
HttpURLConnection のコンストラクター。 |
フィールド
HttpAccepted |
古い.
HTTP Status-Code 202: 承諾済み。 |
HttpBadGateway |
古い.
HTTP Status-Code 502: 無効なゲートウェイ。 |
HttpBadMethod |
古い.
HTTP Status-Code 405: メソッドは使用できません。 |
HttpBadRequest |
古い.
HTTP Status-Code 400: 要求が正しくありません。 |
HttpClientTimeout |
古い.
HTTP Status-Code 408: 要求のタイムアウト。 |
HttpConflict |
古い.
HTTP Status-Code 409: 競合。 |
HttpCreated |
古い.
HTTP Status-Code 201: 作成済み。 |
HttpEntityTooLarge |
古い.
HTTP Status-Code 413: 要求エンティティが大きすぎます。 |
HttpForbidden |
古い.
HTTP Status-Code 403: 許可されていません。 |
HttpGatewayTimeout |
古い.
HTTP Status-Code 504: ゲートウェイ タイムアウト。 |
HttpGone |
古い.
HTTP Status-Code 410: Gone。 |
HttpInternalError |
古い.
HTTP Status-Code 500: 内部サーバー エラー。 |
HttpLengthRequired |
古い.
HTTP Status-Code 411: 必要な長さ。 |
HttpMovedPerm |
古い.
HTTP Status-Code 301: 永続的に移動されました。 |
HttpMovedTemp |
古い.
HTTP Status-Code 302: 一時的なリダイレクト。 |
HttpMultChoice |
古い.
HTTP Status-Code 300: 複数の選択肢。 |
HttpNoContent |
古い.
HTTP Status-Code 204: コンテンツなし。 |
HttpNotAcceptable |
古い.
HTTP Status-Code 406: 受け入れられません。 |
HttpNotAuthoritative |
古い.
HTTP Status-Code 203: 権限のない情報。 |
HttpNotFound |
古い.
HTTP Status-Code 404: 見つかりません。 |
HttpNotImplemented |
古い.
HTTP Status-Code 501: 実装されていません。 |
HttpNotModified |
古い.
HTTP Status-Code 304: 変更されていません。 |
HttpOk |
古い.
HTTP Status-Code 200: OK。 |
HttpPartial |
古い.
HTTP Status-Code 206: 部分的なコンテンツ。 |
HttpPaymentRequired |
古い.
HTTP Status-Code 402: 支払いが必要です。 |
HttpPreconFailed |
古い.
HTTP Status-Code 412: 前提条件に失敗しました。 |
HttpProxyAuth |
古い.
HTTP Status-Code 407: プロキシ認証が必要です。 |
HttpReqTooLong |
古い.
HTTP Status-Code 414: 要求 URI が大きすぎます。 |
HttpReset |
古い.
HTTP Status-Code 205: コンテンツをリセットします。 |
HttpSeeOther |
古い.
HTTP Status-Code 303: その他を参照してください。 |
HttpServerError |
古い.
HTTP Status-Code 500: 内部サーバー エラー。 |
HttpUnauthorized |
古い.
HTTP Status-Code 401: 未承認。 |
HttpUnavailable |
古い.
HTTP Status-Code 503: サービスを利用できません。 |
HttpUnsupportedType |
古い.
HTTP Status-Code 415: サポートされていないメディアの種類。 |
HttpUseProxy |
古い.
HTTP Status-Code 305: プロキシを使用します。 |
HttpVersion |
古い.
HTTP Status-Code 505: HTTP バージョンはサポートされていません。 |
プロパティ
AllowUserInteraction |
このオブジェクトのフィールドの値を |
ChunkLength |
出力にチャンク エンコード ストリーミング モードを使用する場合のチャンク長。 |
Class |
この |
Connected |
の場合 |
ConnectTimeout |
接続タイムアウトの設定を返します。 または、この URLConnection によって参照されるリソースへの通信リンクを開くときに使用する、指定されたタイムアウト値 (ミリ秒単位) を設定します。 (継承元 URLConnection) |
Content |
この URL 接続の内容を取得します。 (継承元 URLConnection) |
ContentEncoding |
ヘッダー フィールドの値を |
ContentLength |
ヘッダー フィールドの値を |
ContentLengthLong |
ヘッダー フィールドの値を |
ContentType |
ヘッダー フィールドの値を |
Date |
ヘッダー フィールドの値を |
DefaultUseCaches |
のフラグの既定値を |
DoInput |
この |
DoOutput |
この |
ErrorStream |
接続に失敗したが、サーバーが有用なデータを送信した場合は、エラー ストリームを返します。 |
Expiration |
ヘッダー フィールドの値を |
FixedContentLength |
固定長ストリーミング モードを使用する場合の固定コンテンツ長。 |
FixedContentLengthLong |
固定長ストリーミング モードを使用する場合の固定コンテンツ長。 |
FollowRedirects |
|
Handle |
基になる Android インスタンスへのハンドル。 (継承元 Object) |
HeaderFields |
ヘッダー フィールドの変更できないマップを返します。 (継承元 URLConnection) |
IfModifiedSince |
このオブジェクトのフィールドの値を |
InputStream |
この開いている接続から読み取る入力ストリームを返します。 (継承元 URLConnection) |
InstanceFollowRedirects |
この |
JniIdentityHashCode |
HTTP 固有の機能をサポートする URLConnection。 (継承元 Object) |
JniPeerMembers |
HTTP 固有の機能をサポートする URLConnection。 |
LastModified |
ヘッダー フィールドの値を |
Method |
HTTP メソッド (GET、POST、PUT など)。 |
OutputStream |
この接続に書き込む出力ストリームを返します。 (継承元 URLConnection) |
PeerReference |
HTTP 固有の機能をサポートする URLConnection。 (継承元 Object) |
Permission |
このオブジェクトによって表される接続を作成するために必要なアクセス許可を表すアクセス許可オブジェクトを返します。 (継承元 URLConnection) |
ReadTimeout |
読み取りタイムアウトの設定を返します。 または、読み取りタイムアウトを指定したタイムアウト (ミリ秒単位) に設定します。 (継承元 URLConnection) |
RequestMethod |
要求メソッドを取得します。 または、URL 要求のメソッドを設定します。UL<>LI>GET <LI>POST <LI> の 1 つ<HEAD <LI OPTIONS <LI>>PUT <LI>DELETE <LI>TRACE </UL> は、プロトコルの制限に従って有効です。 |
RequestProperties |
この接続の一般的な要求プロパティの変更できないマップを返します。 (継承元 URLConnection) |
ResponseCode |
HTTP 応答メッセージから状態コードを取得します。 |
ResponseMessage |
サーバーから応答コードと共に返される HTTP 応答メッセージ (存在する場合) を取得します。 |
ThresholdClass |
この API は Mono for Android インフラストラクチャをサポートしており、コードから直接使用するためのものではありません。 |
ThresholdType |
この API は Mono for Android インフラストラクチャをサポートしており、コードから直接使用するためのものではありません。 |
Url |
URL は、この接続を開く World Wide Web 上のリモート オブジェクトを表します。 (継承元 URLConnection) |
URL |
この |
UseCaches |
この |
メソッド
AddRequestProperty(String, String) |
キーと値のペアで指定された一般的な要求プロパティを追加します。 (継承元 URLConnection) |
Clone() |
このオブジェクトのコピーを作成して返します。 (継承元 Object) |
Connect() |
このような接続がまだ確立されていない場合は、この URL によって参照されるリソースへの通信リンクを開きます。 (継承元 URLConnection) |
ConnectAsync() |
HTTP 固有の機能をサポートする URLConnection。 (継承元 URLConnection) |
Disconnect() |
サーバーに対する他の要求が近い将来に行われる可能性が低いことを示します。 |
Dispose() |
HTTP 固有の機能をサポートする URLConnection。 (継承元 Object) |
Dispose(Boolean) |
HTTP 固有の機能をサポートする URLConnection。 (継承元 Object) |
Equals(Object) |
他のオブジェクトがこのオブジェクトと "等しい" かどうかを示します。 (継承元 Object) |
GetContent(Class[]) |
この URL 接続の内容を取得します。 (継承元 URLConnection) |
GetHashCode() |
オブジェクトのハッシュ コード値を返します。 (継承元 Object) |
GetHeaderField(Int32) |
sup>th/sup ヘッダー フィールドの< |
GetHeaderField(String) |
名前付きヘッダー フィールドの値を返します。 (継承元 URLConnection) |
GetHeaderFieldDate(String, Int64) |
日付として解析された名前付きフィールドの値を返します。 (継承元 URLConnection) |
GetHeaderFieldInt(String, Int32) |
数値として解析された名前付きフィールドの値を返します。 (継承元 URLConnection) |
GetHeaderFieldKey(Int32) |
sup>th/sup> ヘッダー フィールドのキーを< |
GetHeaderFieldLong(String, Int64) |
数値として解析された名前付きフィールドの値を返します。 (継承元 URLConnection) |
GetRequestProperty(String) |
この接続の名前付き一般要求プロパティの値を返します。 (継承元 URLConnection) |
JavaFinalize() |
オブジェクトへの参照がなくなったとガベージ コレクションが判断したときに、オブジェクトのガベージ コレクターによって呼び出されます。 (継承元 Object) |
Notify() |
このオブジェクトのモニターで待機している 1 つのスレッドを起動します。 (継承元 Object) |
NotifyAll() |
このオブジェクトのモニターで待機しているすべてのスレッドを起動します。 (継承元 Object) |
SetChunkedStreamingMode(Int32) |
このメソッドは、コンテンツの長さが <事前に既知の b>not</b> である場合に、内部バッファリングなしで HTTP 要求本文のストリーミングを有効にするために使用されます。 |
SetFixedLengthStreamingMode(Int32) |
このメソッドは、コンテンツの長さが事前にわかっているときに、内部バッファリングなしで HTTP 要求本文のストリーミングを有効にするために使用されます。 |
SetFixedLengthStreamingMode(Int64) |
このメソッドは、コンテンツの長さが事前にわかっているときに、内部バッファリングなしで HTTP 要求本文のストリーミングを有効にするために使用されます。 |
SetHandle(IntPtr, JniHandleOwnership) |
Handle プロパティを設定します。 (継承元 Object) |
SetRequestProperty(String, String) |
一般的な要求プロパティを設定します。 (継承元 URLConnection) |
ToArray<T>() |
HTTP 固有の機能をサポートする URLConnection。 (継承元 Object) |
ToString() |
オブジェクトの文字列形式を返します。 (継承元 Object) |
UnregisterFromRuntime() |
HTTP 固有の機能をサポートする URLConnection。 (継承元 Object) |
UsingProxy() |
接続がプロキシを経由しているかどうかを示します。 |
Wait() |
現在のスレッドが起動するまで待機します。通常<は、通知</em> または>< em 中断</em によって待機します>。> (継承元 Object) |
Wait(Int64) |
現在のスレッドが起動するまで待機します。通常<は、通知></em> または <>em 中断</em>、または特定のリアルタイムが経過するまで待機します。 (継承元 Object) |
Wait(Int64, Int32) |
現在のスレッドが起動するまで待機します。通常<は、通知></em> または <>em 中断</em>、または特定のリアルタイムが経過するまで待機します。 (継承元 Object) |
明示的なインターフェイスの実装
IJavaPeerable.Disposed() |
HTTP 固有の機能をサポートする URLConnection。 (継承元 Object) |
IJavaPeerable.DisposeUnlessReferenced() |
HTTP 固有の機能をサポートする URLConnection。 (継承元 Object) |
IJavaPeerable.Finalized() |
HTTP 固有の機能をサポートする URLConnection。 (継承元 Object) |
IJavaPeerable.JniManagedPeerState |
HTTP 固有の機能をサポートする URLConnection。 (継承元 Object) |
IJavaPeerable.SetJniIdentityHashCode(Int32) |
HTTP 固有の機能をサポートする URLConnection。 (継承元 Object) |
IJavaPeerable.SetJniManagedPeerState(JniManagedPeerStates) |
HTTP 固有の機能をサポートする URLConnection。 (継承元 Object) |
IJavaPeerable.SetPeerReference(JniObjectReference) |
HTTP 固有の機能をサポートする URLConnection。 (継承元 Object) |
拡張メソッド
JavaCast<TResult>(IJavaObject) |
Android ランタイムチェック型変換を実行します。 |
JavaCast<TResult>(IJavaObject) |
HTTP 固有の機能をサポートする URLConnection。 |
GetJniTypeName(IJavaPeerable) |
HTTP 固有の機能をサポートする URLConnection。 |