URLConnection の接続、タイムアウト、およびシャットダウンの使用法の概要
Dec 20, 2016 pm 01:46 PMHttpURLConnection は Java で WEB リソースをリクエストするために使用できます。
1. URL リクエストのカテゴリ
は、GET リクエストと POST リクエストの 2 つのカテゴリに分かれています。 2 つの違いは次のとおりです:
a:) get リクエストは静的ページを取得することも、URL 文字列の後にパラメータを置いてサーブレットに渡すこともできます
b:) post と get の違いは、投稿のパラメータは URL 文字列には配置されず、http リクエストの本文に配置されます。
2. URLConnection オブジェクトの問題
Java コード
URL = new URL("http://localhost:8080/TestHttpURLConnectionPro.do");
URLConnection = url.openConnection (); / ここでの UrlConnection オブジェクトは、実際には URL の
// リクエスト プロトコル (ここでは http) に基づいています。
' s 's 's 's ‐ ‐ ‐ ‐ HttpURLConnection を使用する
3. HttpURLConnection オブジェクトのパラメータの問題
Java コード
// これはポストリクエストであるため、パラメータを http ボディに配置する必要があるため、設定する必要があります。デフォルトは false です。
httpUrlConnection.setDoInput(true);
//リクエストはキャッシュを使用できません
httpUrlConnection.setUseCaches(false);
// Set 送信されるコンテンツ タイプはシリアル化可能な Java オブジェクトであると判断されます
// (これが設定されていない場合、シリアル化されたオブジェクトを送信するとき、デフォルトの WEB サービスがこのタイプではない場合、java.io.EOFException がスローされる可能性があります)
httpUrlConnection.setRequestProperty("Content-type", "application/x-java-serialized-object");
//リクエストメソッドを「POST」に設定します。デフォルトは GET
httpUrlConnection.setRequestMethod("POST ");
//Connection、上記の項目 2 の url.openConnection() からこの時点までの設定を完了する必要があります。接続する前に、
Java コード // ここで getOutputStream は暗黙的に接続します (つまり、上記の connect() メソッドを呼び出すのと同じように、 // したがって、開発中に上記の connect() を呼び出さなくても大丈夫です) 。 OutputStream outStrm = httpUrlConnection.getOutputStream(); 5. HttpURLConnection のデータ書き込みとデータ送信の問題 Java コード // 次に、出力ストリーム オブジェクトを介してオブジェクト出力ストリーム オブジェクトを構築し、シリアル化可能な出力オブジェクトを実現します。 ObjectOutputStream objOutputStrm = new ObjectOutputStream(outStrm); //データをオブジェクト出力ストリームに書き込み、データはメモリ バッファに保存されます objOutputStrm.writeObject(new String("I am test data" ) ;現時点では、これ以上データをオブジェクト出力ストリームに書き込むことはできません。以前に書き込まれたデータはメモリ バッファーに存在します。// 準備された http リクエストは、以下の getInputStream() 関数が呼び出されたときにのみ正式にサーバーに送信されます。 . objOutputStm.close(); // HttpURLConnection 接続オブジェクトの getInputStream() 関数を呼び出します。 // メモリ バッファーにカプセル化された完全な HTTP リクエスト メッセージをサーバーに送信します。 InputStream inStrm = httpConn.getInputStream(); // <===実際にリクエストを送信するコードセグメントはここにあります // 上記の httpConn.getInputStream() メソッドが呼び出されています。 request 終了しました。 オブジェクト出力ストリームへの次の出力は無意味です // オブジェクト出力ストリームが close() メソッドを呼び出していない場合でも、次の操作はオブジェクト出力ストリームにデータを書き込みません。
// したがって、データを再送信する場合は、接続を再作成し、パラメータを再設定し、ストリームオブジェクトを再作成し、データを再書き込みし、
// データを再送信する必要があります(これらの操作は再調査する必要はありません。さらに調査する必要があります)
objOutputStm(new String(""));
Javaコード
OutputStream os = httpConn.getOutputStream();
param = new String (); = = + 電話番号 +
" "&msg=" + java.net.URLEncoder.encode(msg,"GBK ") ; ;
os.write(param.getBytes());
7. ネットワーク異常時にプログラムがフリーズして実行を継続しないようにするためのタイムアウト設定
System.setProperty(" sun.net.client.defaultConnectTimeout", "30000");
System.setProperty("sun.net.client.defaultReadTimeout", "30000");
ここで: sun.net. client.defaultConnectTimeout: タイムアウトホストへの接続のタイムアウト (単位: ミリ秒)
sun.net.client.defaultReadTimeout: ホストからのデータ読み取りのタイムアウト (単位: ミリ秒)
JDK 1.5 より前のバージョンのみを渡すことができます これら 2 つのシステム プロパティを次のように設定しますネットワークタイムアウトを制御します。 1.5では、HttpURLConnectionの親クラスURLConnectionの次の2つのメソッドも使用できます:
setConnectTimeout: 接続ホストのタイムアウトを設定します(単位: ミリ秒)
setReadTimeout: ホストからのデータ読み取りのタイムアウトを設定します(単位: ミリ秒) )
例:
HttpURLConnection urlCon = (HttpURLConnection)url.openConnection();
urlCon.setReadTimeout(30000);
概要:
a : HttpURLConnection の connect() 関数は、実際にはサーバーとの TCP 接続を確立するだけであり、実際には http リクエストを送信しません。
post であっても get であっても、http リクエストは実際には HttpURLConnection の getInputStream() 関数まで正式に送信されません。b: POST を使用して URL リクエストを送信する場合、URL リクエストパラメータの設定順序が最優先されます。
接続オブジェクト (設定された関数) のすべての設定は、connect() 関数の前に実行する必要があります。 OutputStream での書き込み操作は、inputStream での読み取り操作よりも前に行う必要があります。これらの順序は、実際には http リクエストの形式によって決まります。
inputStream 読み取り操作が outputStream 書き込み操作よりも前にある場合、例外がスローされます:java.net.ProtocolException: 入力の読み取り後に出力を書き込むことはできません....
c: http リクエストは実際には 2 つの部分で構成されます。は http ヘッダーです。この http リクエストに関するすべての設定は http ヘッダーで定義されます。
もう 1 つはコンテンツです。connect() 関数は、HttpURLConnection オブジェクトの設定値に基づいて http ヘッダー情報を生成するため、connect 関数を呼び出す前に、
すべての設定を準備する必要があります。d: http ヘッダーの直後に http リクエストの本文が続きます。本文の内容は、outputStream ストリームを通じて書き込まれます。実際、outputStream は単なる文字列ストリームです。書き込まれた内容はすぐにネットワークに送信されませんが、outputStream が閉じられると、入力内容に基づいて http ボディが生成されます。
この時点で、http によって要求されたすべての準備が整いました。 getInputStream() 関数が呼び出されると、準備された http リクエストが正式にサーバーに送信され、この http リクエストに対するサーバーの戻り情報を読み取るための入力ストリームが返されます。 httpリクエストはgetInputStream(httpヘッダーとボディを含む)中に送信されているため、getInputStream()関数
の後に接続オブジェクトを設定する(httpヘッダー情報を変更する)か、outputStreamに書き込む(ボディを変更する) は無意味です。これらの操作を実行すると例外が発生します。

人気の記事

人気の記事

ホットな記事タグ

メモ帳++7.3.1
使いやすく無料のコードエディター

SublimeText3 中国語版
中国語版、とても使いやすい

ゼンドスタジオ 13.0.1
強力な PHP 統合開発環境

ドリームウィーバー CS6
ビジュアル Web 開発ツール

SublimeText3 Mac版
神レベルのコード編集ソフト(SublimeText3)

ホットトピック











いくつかの .NET オープンソース AI および LLM 関連プロジェクト フレームワークを共有する

Java フレームワークと .NET フレームワークのパフォーマンスの違い

Telegram Meme Coins が Ton ネットワークを破壊する恐れ

Binance Futures が POPCAT と SUN USDⓈ マージン付き無期限契約を追加

ミームコインが広範な仮想通貨市場の上昇に加わり、ベイビー・ドージとSUNが急上昇
