httpurlconnection vs apache commons http
-
27-09-2019 - |
質問
JavaデフォルトのhttpurlConnectionクラスを使用して問題があるかどうかを知りたかっただけです。 Apache Commonsに切り替えたある種のバグ。
それとも、クラスが公開する(ugい)インターフェイスが、サードパーティのhttp libの誕生を正当化する(ugい)インターフェイスですか?
開示: :java.netがいくつかの深刻な問題を抱えていることに対するいくつかの議論を聞いたことがありますが、Javaコア分布の一部であるクラスにはJDKのいくつかのリリースの後も問題があるとは信じがたいと思います。
解決
物事は私をapache httpclientに駆り立てます。
- バギーのキープアライブサポート。
- クッキーハンドリング。
今すぐhttpclient 4(apache httpコンポーネント)を使用する必要があります。
編集:最初の問題はここで何度か議論されています。見る、
httpurlconnection.getResponseCode()は、2回目の呼び出しで-1を返します
httpurlconnection:応答全体を読まなければならないことは何ですか?
Androidでは問題が悪化しているように見えますが、J2SEの正確な問題が見られました。
他のヒント
Android SDKは言います 新しいコードのhttpurlconnectionをお勧めします.
Androidには2つのHTTPクライアントが含まれています。
HttpURLConnection
とApache HTTP Client
. 。どちらも、HTTPS、ストリーミングアップロードとダウンロード、構成可能なタイムアウト、IPv6、接続プーリングをサポートしています。 Apache HTTPクライアントは、Android 2.2(Froyo)以前のリリースのバグが少ない。 Android 2.3(Gingerbread)以降の場合、HttpURLConnection
最良の選択です。そのシンプルなAPIと小さなサイズは、Androidに最適です。透明な圧縮と応答キャッシュネットワークの使用を削減し、速度を改善し、バッテリーを節約します。を参照してください Android開発者ブログ 2つのHTTPクライアントの比較のため。
...しかし、私はJavaコアディストリビューションの一部であるクラスには、JDKのいくつかのリリース後もまだ問題があるとは信じがたいと思います。
太陽を守るために、彼らは岩と硬い場所の間に挟まれています:
彼らがこれらの問題を修正すれば、彼らは間違いなく、現在のAPIと彼らの理想的ではない動作に依存する数万のレガシーアプリケーションを破るでしょう。彼らがそれをした場合、彼らからの放射性降下物 支払い 顧客ベースは大規模です。そして、より多くの企業は、古代のJDKリリースを使用して立ち往生します。
彼らが問題を解決しない場合、彼らはすべての問題を修正するべきだと考える純粋主義者から無限のflakを得る。
少なくともHTTPクライアントAPIが必要な人は、より良い代替手段を持っています...彼らがそれを使用したい場合。
それが@Deprecatedが発明された理由です。
理論的には、はい...
ただし、実際には、Oracleは、プログラマー(およびさらに重要なことに、マネージャー)への強力なシグナルとしてOracleによって使用されています。 する必要があります コードを変更します。
それはここでは保証されていません。具体的な問題を見てみましょう。
"
HttpURLConnection
クッキーを処理することはできません」はそれを非難する理由ではありません。すでに申請を構築した人HttpURLConnection
すでにこの問題に対処しています。彼らにとっては、別のHTTPクライアントクラスに変更されていない不要な作業に変更します。"
HttpURLConnection
キープアリブをサポートしていません」も非難する理由ではありません。ほとんどのアプリケーションは違反しません 必要 キープアリブ。
等々。
非難は鈍器であり、太陽 /オラクルの哲学は、APIが使用が困難な場合にのみ使用する必要があるということです 安全に;つまり、強いとき ビジネスケース コードの再加工に時間を費やす開発者向けなど。
しかし、それについて私の言葉を持ってはいけません。太陽 /オラクルがある場合を見てください もっている 非推奨の方法とクラス。歴史的な例外があっても、明確なパターンがあります。