openstream from example ejemplo data conectar java http url

java - from - ¿La nueva URL(...).openConnection() implica necesariamente un POST?



url java ejemplo (2)

Si creo un HTTP java.net.URL y luego openConnection() , ¿implica necesariamente que se va a publicar una publicación HTTP? Sé que openStream() implica un GET. Si es así, ¿cómo se realiza uno de los otros verbos HTTP sin tener que trabajar con la capa de socket sin procesar?


No, no lo hace. Pero si el protocolo de la URL es HTTP, obtendrá un HttpURLConnection como objeto de devolución. Esta clase tiene un método setRequestMethod para especificar qué método HTTP quieres usar.

Si quieres hacer cosas más sofisticadas, es mejor que utilices una biblioteca como Jakarta HttpClient .


Si recupera el objeto URLConnection utilizando openConnection() en realidad no comienza a comunicarse con el servidor. Eso no sucederá hasta que obtenga la transmisión de URLConnection() . Cuando obtiene la conexión por primera vez, puede agregar / cambiar encabezados y otras propiedades de conexión antes de abrirla.

El ciclo de vida de URLConnection es un poco extraño. No envía los encabezados al servidor hasta que haya obtenido uno de los flujos. Si solo obtiene el flujo de entrada, entonces creo que hace un GET, envía los encabezados y luego le permite leer el resultado. Si obtienes el flujo de salida, entonces creo que lo envía como un POST, ya que supone que estarás escribiendo datos en él (es posible que necesites llamar a setDoOutput(true) para que el flujo de salida funcione). Tan pronto como reciba la secuencia de entrada, la secuencia de salida se cerrará y esperará la respuesta del servidor.

Por ejemplo, esto debería hacer un 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

Si bien esto haría un 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 también hará otras cosas extrañas. Si el servidor especifica una longitud de contenido, entonces URLConnection mantendrá la corriente de entrada subyacente abierta hasta que reciba esa cantidad de datos, incluso si la cierra explícitamente . Esto nos causó muchos problemas, ya que dificultó un poco el cierre de nuestro cliente, ya que URLConnection mantendría abierta la conexión de red. Probablemente esto probablemente exista incluso si solo usas getStream() .