new URL(…).openConnection() は必ず POST を意味しますか?
質問
HTTPを作成すると java.net.URL
それから電話する openConnection()
それは、HTTP 投稿が行われることを必ずしも暗示しているのでしょうか?私はそれを知っています openStream()
GET を意味します。もしそうなら、生のソケット層を操作せずに他の HTTP 動詞のいずれかを実行するにはどうすればよいでしょうか?
解決
を取得すると、 URLConnection
オブジェクトを使用する openConnection()
実際にサーバーとの通信は開始されません。それは、からストリームを取得するまで起こりません。 URLConnection()
. 。初めて接続を取得するときは、実際に接続を開く前に、ヘッダーやその他の接続プロパティを追加/変更できます。
URLConnection のライフサイクルは少し奇妙です。いずれかのストリームを取得するまで、ヘッダーはサーバーに送信されません。入力ストリームを取得するだけの場合は、GET を実行し、ヘッダーを送信して、出力を読み取ることができると思います。出力ストリームを取得した場合は、データを書き込むことを想定しているため、それを POST として送信すると思います (呼び出しが必要な場合があります) setDoOutput(true)
出力ストリームが機能するようにします)。入力ストリームを取得するとすぐに出力ストリームは閉じられ、サーバーからの応答を待ちます。
たとえば、これは POST を実行する必要があります。
URL myURL = new URL("http://example.com/my/path");
URLConnection conn = myURL.openConnection();
conn.setDoOutput(true);
conn.setDoInput(true);
OutputStream os = conn.getOutputStream();
os.write("Hi there!");
os.close();
InputStream is = conn.getInputStream();
// read stuff here
これは GET を実行します。
URL myURL = new URL("http://example.com/my/path");
URLConnection conn = myURL.openConnection();
conn.setDoOutput(false);
conn.setDoInput(true);
InputStream is = conn.getInputStream();
// read stuff here
URLConnection
他にも奇妙なことをするでしょう。サーバーがコンテンツの長さを指定する場合、 URLConnection
それだけの量のデータを受信するまで、基礎となる入力ストリームを開いたままにします。 明示的に閉じたとしても. 。これにより、クライアントを完全にシャットダウンすることが少し難しくなり、私たちにとって多くの問題が発生しました。 URLConnection
ネットワーク接続を開いたままにしておきます。これはおそらく、単に使用した場合でも存在します getStream()
けれど。
他のヒント
いいえ、違います。ただし、URL のプロトコルが HTTP の場合は、 HttpURLConnection
リターンオブジェクトとして。このクラスには、 setRequestMethod
メソッドを使用して、使用する HTTP メソッドを指定します。
より洗練されたことをしたい場合は、おそらく次のようなライブラリを使用する方が良いでしょう。 ジャカルタHTTPクライアント.