検索

ホームページ  >  に質問  >  本文

Android的三种http请求方式的区别

关于Android的三种http请求方式:
(1)okhttp
(2)httpURLConnection
(3)httpClient

谁熟悉的能介绍一下,并解析一下区别呢?

PHP中文网PHP中文网2771日前574

全員に返信(2)返信します

  • 高洛峰

    高洛峰2017-04-17 17:47:01

    この質問には少し問題があります。これらは 3 つの方法ではなく、httpURLConnection と httpClient はアクセスを実現するための 2 つの特定の方法です。
    1)、HttpClient
    HttpClient は、Apache Jakarta Common のサブプロジェクトであり、HTTP プロトコルをサポートする効率的で最新の機能豊富なクライアント プログラミング ツールキットを提供するために使用され、最新バージョンをサポートします。 HTTP プロトコルと提案。

    機能:

    1. 標準の純粋な Java 言語に基づいています。 Http1.0 と Http1.1 を実装しました

    2. すべての HTTP メソッド (GET、POST、PUT、DELETE、HEAD、OPTIONS、および TRACE) を拡張可能なオブジェクト指向構造で実装します。

    3. HTTPS プロトコルをサポートします。

    4. HTTP プロキシを介して透過的な接続を確立します。

    5. CONNECT メソッドを使用して、HTTP プロキシ経由でトンネルされた https 接続を確立します。

    6. 基本、ダイジェスト、NTLMv1、NTLMv2、NTLM2 セッション、SNPNEGO/Kerberos 認証方式。

    7. プラグインのカスタム認証スキーム。

    8. ポータブルで信頼性の高いソケット ファクトリにより、サードパーティ ソリューションの使用が容易になります。

    9. 接続マネージャーはマルチスレッド アプリケーションをサポートします。最大接続数の設定と各ホストの最大接続数の設定をサポートし、期限切れの接続を検出して閉じることができます。

    10. Set-Cookie で Cookie を自動的に処理します。

    11. プラグインのカスタム Cookie ポリシー。

    12. リクエストの出力ストリームは、ストリーム内のコンテンツをソケット サーバーに直接バッファリングすることを回避できます。

    13. Response の入力ストリームは、対応するコンテンツをソケット サーバーから直接効率的に読み取ることができます。

    14. KeepAlive を使用して、http1.0 および http1.1 で永続的な接続を維持します。

    15. サーバーから直接送信された応答コードとヘッダーを取得します。

    16. 接続タイムアウトを設定する機能。
      使用方法

    HttpClient を使用してリクエストを送信し、レスポンスを受信するのは非常に簡単で、通常は次の手順が必要です。

    1. HttpClient オブジェクトを作成します。

    2. リクエストメソッドのインスタンスを作成し、リクエストURLを指定します。 GET リクエストを送信する必要がある場合は HttpGet オブジェクトを作成し、POST リクエストを送信する必要がある場合は HttpPost オブジェクトを作成します。

    3. リクエスト パラメータを送信する必要がある場合は、HttpGet および HttpPost に共通の setParams (HetpParams params) メソッドを呼び出して HttpPost オブジェクトのリクエスト パラメータを追加できます。また、setEntity (HttpEntity エンティティ) メソッドを呼び出すこともできます。リクエストパラメータを設定します。

    4. HttpClient オブジェクトのexecute(HttpUriRequest request)を呼び出してリクエストを送信します。このメソッドはHttpResponseを返します。

    5. HttpResponse の getAllHeaders()、getHeaders(String name) およびその他のメソッドを呼び出してサーバーの応答ヘッダーを取得します。HttpResponse の getEntity() メソッドを呼び出して、サーバーの応答コンテンツをラップする HttpEntity オブジェクトを取得します。プログラムは、このオブジェクトを通じてサーバーの応答コンテンツを取得できます。

    6. 接続を解放します。実行方法が成功したかどうかに関係なく、接続は解放される必要があります

    2)、HttpURLConnection
    写真を見つけてください

    3) okhttp
    これをオンラインで検索して解析することはできますが、移動しません

    ここで言えることは、Android 2.3 以降のバージョンでは HttpURLConnection を使用し、Android 2.2 以下のバージョンでは HttpClient を使用してください。
    理由:
    HttpClient
    DefaultHttpClient とその兄弟 AndroidHttpClient は両方とも HttpClient の固有の実装クラスであり、その実装は比較的安定しており、バグはほとんどありません。
    しかし同時に、HttpClient には多数の API があるため、互換性を壊さずにアップグレードして拡張することは困難です。そのため、Android チームは現在、HttpClient の改善と最適化に積極的に取り組んでいません。
    HttpURLConnection
    HttpURLConnection は、HTTP 操作の実行に使用できる多目的の軽量 HTTP クライアントであり、ほとんどのアプリケーションに適しています。 HttpURLConnection が提供する API は比較的シンプルですが、これにより使用や拡張も容易になります。
    しかし、Android 2.2 より前では、HttpURLConnection には常にいくつかの迷惑なバグがありました。たとえば、読み取り可能な InputStream で close() メソッドが呼び出される場合、接続プールが失敗する可能性があります。その場合、通常の解決策は、接続プール機能を直接無効にすることです

    返事
    0
  • ringa_lee

    ringa_lee2017-04-17 17:47:01

    その違いは非常に大きいので詳しく説明すると時間がかかりますので、簡単に説明しましょう。

    HttpClient は Java の世界における優れた HTTP クライアント ツールキットであるため、当初は Android にもこれがサポートされており、誰もがこれを便利に使用して HTTP リクエストを行えるようになることを願っています。ただし、Android に元々含まれていたのは HttpClient のベータ版であったため、その後の Android での HttpClient の使用はバグだらけになりました。 Android エンジニアはこの問題を解決するつもりはなかったようで、HttpClient を後のフレームワークから追い出したため、Android で HttpClient を使用することは基本的に推奨されません。

    なぜ Android は HttpClient を放棄するつもりなのでしょうか?重要な理由は、HttpURLConnection の使用を好むことです。 HttpURLConnection は Java API のカテゴリに属します。HttpClient などのサードパーティ ライブラリと比較して、HttpURLConnection は Google 独自の制御が容易です。ただし、HttpURLConnection のカプセル化は比較的単純で、HTTP リクエストの処理は比較的低レベルであるため、特に使い勝手が良いわけではありません。

    OkHttp は HttpClient に似ており、これもサードパーティのライブラリです。ただし、そのパッケージ化は比較的高レベルであるため、よりシンプルで使いやすく、Android 専用のサポートがあり、HttpClient のような未完成のプロジェクトよりもはるかに優れています。

    返事
    0
  • キャンセル返事