usar peticiones peticion metodos httppost example ejemplos ejemplo cuando java html http httpwebrequest

peticiones - ¿Cómo enviar una solicitud HTTP en java?



peticiones http java (9)

Esta pregunta ya tiene una respuesta aquí:

En Java, ¿Cómo redactar un mensaje de solicitud HTTP y enviarlo a un servidor web HTTP?


Aquí hay un programa completo de Java 7:

class GETHTTPResource { public static void main(String[] args) throws Exception { try (java.util.Scanner s = new java.util.Scanner(new java.net.URL("http://tools.ietf.org/rfc/rfc768.txt").openStream())) { System.out.println(s.useDelimiter("//A").next()); } } }

El nuevo try-with-resources cerrará automáticamente el escáner, lo que cerrará automáticamente InputStream.


Desde el tutorial de Java de Oracle.

import java.net.*; import java.io.*; public class URLConnectionReader { public static void main(String[] args) throws Exception { URL yahoo = new URL("http://www.yahoo.com/"); URLConnection yc = yahoo.openConnection(); BufferedReader in = new BufferedReader( new InputStreamReader( yc.getInputStream())); String inputLine; while ((inputLine = in.readLine()) != null) System.out.println(inputLine); in.close(); } }


El cliente http de Google java tiene una API agradable para las solicitudes http. Puede agregar fácilmente soporte JSON, etc. Aunque para una simple solicitud puede ser una exageración.

import com.google.api.client.http.GenericUrl; import com.google.api.client.http.HttpRequest; import com.google.api.client.http.HttpResponse; import com.google.api.client.http.HttpTransport; import com.google.api.client.http.javanet.NetHttpTransport; import java.io.IOException; import java.io.InputStream; public class Network { static final HttpTransport HTTP_TRANSPORT = new NetHttpTransport(); public void getRequest(String reqUrl) throws IOException { GenericUrl url = new GenericUrl(reqUrl); HttpRequest request = HTTP_TRANSPORT.createRequestFactory().buildGetRequest(url); HttpResponse response = request.execute(); System.out.println(response.getStatusCode()); InputStream is = response.getContent(); int ch; while ((ch = is.read()) != -1) { System.out.print((char) ch); } response.disconnect(); } }


Esto te ayudara. No olvide agregar el JAR HttpClient.jar a la ruta de clase.

import java.io.FileOutputStream; import java.io.IOException; import org.apache.commons.httpclient.HttpClient; import org.apache.commons.httpclient.HttpStatus; import org.apache.commons.httpclient.NameValuePair; import org.apache.commons.httpclient.methods.PostMethod; public class MainSendRequest { static String url = "http://localhost:8080/HttpRequestSample/RequestSend.jsp"; public static void main(String[] args) { //Instantiate an HttpClient HttpClient client = new HttpClient(); //Instantiate a GET HTTP method PostMethod method = new PostMethod(url); method.setRequestHeader("Content-type", "text/xml; charset=ISO-8859-1"); //Define name-value pairs to set into the QueryString NameValuePair nvp1= new NameValuePair("firstName","fname"); NameValuePair nvp2= new NameValuePair("lastName","lname"); NameValuePair nvp3= new NameValuePair("email","[email protected]"); method.setQueryString(new NameValuePair[]{nvp1,nvp2,nvp3}); try{ int statusCode = client.executeMethod(method); System.out.println("Status Code = "+statusCode); System.out.println("QueryString>>> "+method.getQueryString()); System.out.println("Status Text>>>" +HttpStatus.getStatusText(statusCode)); //Get data as a String System.out.println(method.getResponseBodyAsString()); //OR as a byte array byte [] res = method.getResponseBody(); //write to file FileOutputStream fos= new FileOutputStream("donepage.html"); fos.write(res); //release connection method.releaseConnection(); } catch(IOException e) { e.printStackTrace(); } } }


Hay un gran enlace sobre el envío de una solicitud POST here por Example Depot ::

try { // Construct data String data = URLEncoder.encode("key1", "UTF-8") + "=" + URLEncoder.encode("value1", "UTF-8"); data += "&" + URLEncoder.encode("key2", "UTF-8") + "=" + URLEncoder.encode("value2", "UTF-8"); // Send data URL url = new URL("http://hostname:80/cgi"); URLConnection conn = url.openConnection(); conn.setDoOutput(true); OutputStreamWriter wr = new OutputStreamWriter(conn.getOutputStream()); wr.write(data); wr.flush(); // Get the response BufferedReader rd = new BufferedReader(new InputStreamReader(conn.getInputStream())); String line; while ((line = rd.readLine()) != null) { // Process line... } wr.close(); rd.close(); } catch (Exception e) { }

Si desea enviar una solicitud GET, puede modificar el código ligeramente para satisfacer sus necesidades. Específicamente tienes que agregar los parámetros dentro del constructor de la URL. Luego, comente también esta wr.write(data);

Una cosa que no está escrita y debes tener cuidado, es el tiempo de espera. Especialmente si desea usarlo en los servicios web, debe establecer tiempos de espera, de lo contrario, el código anterior esperará indefinidamente o al menos durante mucho tiempo y es algo que presumiblemente no desea.

Los tiempos de espera se establecen como conn.setReadTimeout(2000); El parámetro de entrada está en milisegundos.


Puede utilizar java.net.HttpUrlConnection .

Ejemplo ( desde aquí ), con mejoras. Incluido en caso de rotura de enlace:

public static String executePost(String targetURL, String urlParameters) { HttpURLConnection connection = null; try { //Create connection URL url = new URL(targetURL); connection = (HttpURLConnection) url.openConnection(); connection.setRequestMethod("POST"); connection.setRequestProperty("Content-Type", "application/x-www-form-urlencoded"); connection.setRequestProperty("Content-Length", Integer.toString(urlParameters.getBytes().length)); connection.setRequestProperty("Content-Language", "en-US"); connection.setUseCaches(false); connection.setDoOutput(true); //Send request DataOutputStream wr = new DataOutputStream ( connection.getOutputStream()); wr.writeBytes(urlParameters); wr.close(); //Get Response InputStream is = connection.getInputStream(); BufferedReader rd = new BufferedReader(new InputStreamReader(is)); StringBuilder response = new StringBuilder(); // or StringBuffer if Java version 5+ String line; while ((line = rd.readLine()) != null) { response.append(line); response.append(''/r''); } rd.close(); return response.toString(); } catch (Exception e) { e.printStackTrace(); return null; } finally { if (connection != null) { connection.disconnect(); } } }


Puedes usar Socket para esto como

String host = "www.yourhost.com"; Socket socket = new Socket(host, 80); String request = "GET / HTTP/1.0/r/n/r/n"; OutputStream os = socket.getOutputStream(); os.write(request.getBytes()); os.flush(); InputStream is = socket.getInputStream(); int ch; while( (ch=is.read())!= -1) System.out.print((char)ch); socket.close();


Sé que otros recomendarán el cliente http de Apache, pero agrega complejidad (es decir, más cosas que pueden salir mal) que rara vez se justifican. Para una tarea simple, java.net.URL hará.

URL url = new URL("http://www.y.com/url"); InputStream is = url.openStream(); try { /* Now read the retrieved document from the stream. */ ... } finally { is.close(); }


Apache HttpComponents . Los ejemplos para los dos módulos: HttpCore y HttpClient te ayudarán a comenzar de inmediato.

No es que HttpUrlConnection sea una mala elección, HttpComponents abstraerá una gran parte de la tediosa codificación. Recomendaría esto, si realmente quiere admitir muchos servidores / clientes HTTP con código mínimo. Por cierto, HttpCore podría usarse para aplicaciones (clientes o servidores) con funcionalidad mínima, mientras que HttpClient se usará para clientes que requieren soporte para múltiples esquemas de autenticación, compatibilidad con cookies, etc.