web-dev-qa-db-ja.com

URLConnection.setDoOutput()は何に影響しますか?

URLConnectionにはsetDoOutput()があります。 ドキュメント に従ってください

出力にURL接続を使用する場合はDoOutputフラグをtrueに設定し、そうでない場合はfalseに設定します。

今私は直面している 正確にこの問題 -JavaランタイムはsetDoOutput(true)が呼び出されたときにリクエストをPOSTに変換し、サーバーはGETリクエストにのみ応答します。コードからsetDoOutput(true)を削除するとどうなるかを理解したいと思います。

これは正確に何に影響しますか? falseに設定したとします-今何ができるのか、今は何ができないのですか? GETリクエストを実行できますか?このメソッドのコンテキストでの「出力」とは何ですか?

69
sharptooth

たとえば、POSTまたはPUTリクエストを使用して)リクエスト本文を送信(output)する場合は、trueに設定する必要があります。GETでは、通常、体を送るので、あなたはそれを必要としません。

リクエスト本体自体の送信は、接続の出力ストリームを介して行われます。

conn.getOutputStream().write(someBytes);
86
Thilo

setDoOutput(true)は、POSTおよびPUT要求に使用されます。 falseの場合、GET要求を使用するためのものです。

24
Petar Minchev

接続を長く維持し、GETとPOSTの両方を送信する場合、コメントを追加します。

if (doGet) {    // some boolean
    con.setDoOutput(false); // reset any previous setting, if con is long lasting
    con.setRequestMethod("GET");
}
else {
    con.setDoOutput(true);  // reset any previous setting, if con is long lasting
    con.setRequestMethod("POST");
}

また、接続が長続きしないように、毎回接続を閉じます。

if (doClose)    // some boolean
    con.setRequestProperty("Connection", "close");

con.connect();              // force connect request
1
SoloPilot
public void setDoOutput( boolean dooutput )

パラメータとして値を取り、このURLConnectionのdoOutputフィールドのこの値を指定された値に設定します。

URL接続は、入力および/または出力に使用できます。出力にURL接続を使用する場合はDoOutputフラグをtrueに設定し、そうでない場合はfalseに設定します。デフォルトはfalseです。

0