2011-12-21 23 views
60

C'è setDoOutput() in URLConnection. Secondo documentation dovreiChe cosa influenza esattamente URLConnection.setDoOutput()?

Impostare il flag DoOutput true se si intende utilizzare il collegamento URL per l'uscita, false in caso contrario.

Ora sto affrontando exactly this problem - il runtime Java converte la richiesta di POST volta setDoOutput(true) si chiama e il server risponde solo alle richieste GET. Voglio capire cosa succede se rimuovo quello setDoOutput(true) dal codice.

Che cosa esattamente influenzerà? Supponiamo di averlo impostato su false - cosa posso fare ora e cosa non posso fare ora? Sarò in grado di eseguire le richieste GET? Cosa è "output" nel contesto di questo metodo?

risposta

76

È necessario impostarlo su true se si desidera inviare (output) un corpo di richiesta, ad esempio con richieste POST o PUT. Con GET, di solito non invii un corpo, quindi non ne hai bisogno.

invio del corpo della richiesta stessa avviene tramite flusso di output della connessione:

conn.getOutputStream().write(someBytes); 
+0

Cosa succede se sto scaricando un'immagine? – Jaydev

+0

Download in corso? O caricare? – Thilo

24

setDoOutput(true) viene utilizzato per le richieste POST e PUT. Se è false, allora è per l'utilizzo delle richieste GET.

+0

Forse anche per PUT. – Thilo

+0

@Thilo - Buon punto. –

+1

ok, come posso forzare questa connessione a fare PUT poiché il server dall'altra parte accetta solo richieste PUT, non POST ...? –

0
public void setDoOutput(boolean dooutput) 

Si assume un valore come parametro e imposta il valore del campo doOutput per questo URLConnection al valore specificato.

Una connessione URL può essere utilizzata per l'input e/o l'output. Impostare il flag DoOutput su true se si intende utilizzare la connessione URL per l'output, false in caso contrario. Il valore predefinito è falso.

+3

L'ho letto nella documentazione prima di chiedere. Il motivo per cui sto chiedendo è che non capisco le implicazioni di quelli. – sharptooth

+0

Se vuoi scrivere su un oggetto di connessione devi impostare il serDoOutput vero –

1

L'aggiunta di un commento, se si dispone di una connessione di lunga durata e inviare sia GETS e post, questo è quello che faccio:

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"); 
} 

E per evitare che la connessione duri a lungo, chiuderla ogni volta.

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

con.connect();    // force connect request 
Problemi correlati