質問

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クライアント.

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top