¿A qué afecta exactamente URLConnection.setDoOutput ()?


80

Hay setDoOutput()en URLConnection. Según la documentación debería

Establezca el indicador DoOutput en verdadero si tiene la intención de utilizar la conexión URL para la salida, falso en caso contrario.

Ahora me enfrento exactamente a este problema : el tiempo de ejecución de Java convierte la solicitud a POSTuna vez que setDoOutput(true)se llama y el servidor solo responde a las GETsolicitudes. Quiero entender qué sucede si elimino eso setDoOutput(true)del código.

¿Qué afectará esto exactamente? Supongamos que lo configuro en false: ¿qué puedo hacer ahora y qué no puedo hacer ahora? ¿Podré realizar GETsolicitudes? ¿Qué es "salida" en el contexto de este método?

Respuestas:


96

Debe establecerlo en verdadero si desea enviar ( generar ) un cuerpo de solicitud, por ejemplo, con solicitudes POST o PUT. Con GET, no suele enviar un cuerpo, por lo que no lo necesita.

El envío del cuerpo de la solicitud se realiza a través del flujo de salida de la conexión:

conn.getOutputStream().write(someBytes);

¿Qué pasa si estoy descargando una imagen?
Jaydev

Descargando? ¿O subiendo?
Thilo

27

setDoOutput(true)se utiliza para POSTy PUTsolicita. Si es falseasí, es para usar GETsolicitudes.


2
ok, ¿cómo puedo forzar esta conexión para hacer PUT ya que el servidor del otro lado solo acepta solicitudes PUT, no POST ...?
ante.sabo

¿Qué pasa si estoy descargando una imagen?
Jaydev

1

Agregando un comentario, si tiene una conexión duradera y envía GET y POST, esto es lo que hago:

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

Y para evitar que la conexión sea duradera, ciérrela cada vez.

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

con.connect();              // force connect request

0
public void setDoOutput( boolean dooutput )

Toma un valor como parámetro y establece este valor del doOutputcampo para esta URLConnection en el valor especificado.

Se puede utilizar una conexión URL para entrada y / o salida. Establezca el indicador DoOutput en verdadero si tiene la intención de utilizar la conexión URL para la salida, falso en caso contrario. El valor predeterminado es falso.


3
Lo he leído en la documentación antes de preguntar. La razón por la que pregunto es que no entiendo las implicaciones de eso.
diente afilado

Si desea escribir en un objeto de conexión, debe establecer serDoOutput como verdadero
Mithun Sasidharan
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.