¿Cómo obtener el código de respuesta HTTP para una URL en Java?


144

Dígame los pasos o el código para obtener el código de respuesta de una URL particular.



2
No diría duplicado, ya que quiere el código de respuesta, pero @Ajit deberías comprobarlo de todos modos. Agregue un poco de experimentación y estará listo para comenzar.
slezica

2
En lugar de exigir que otras personas hagan su trabajo por usted. Demuestre que al menos ha intentado realizar esta tarea por su cuenta. Muestre su código actual y cómo ha intentado realizar esta tarea. Si desea que alguien haga su trabajo por usted sin ningún esfuerzo de su parte, puede contratar a alguien y pagarle.
Patrick W. McMahon

¿Qué demanda hizo? Pidió ayuda, en lugar de girar sus ruedas cuando no tenía idea de qué hacer. Estaba usando la comunidad como se pretendía.
Danny Remington - OMS

Respuestas:


180

HttpURLConnection :

URL url = new URL("http://example.com");
HttpURLConnection connection = (HttpURLConnection)url.openConnection();
connection.setRequestMethod("GET");
connection.connect();

int code = connection.getResponseCode();

Este no es en absoluto un ejemplo robusto; necesitarás manejar IOExceptionsy todo lo demás. Pero debería ayudarte a comenzar.

Si necesita algo con más capacidad, consulte HttpClient .


2
En mi caso específico y con su método, obtengo una IOException ("Error al autenticar con proxy") que generalmente es un error http 407. ¿Hay alguna manera de obtener una precisión (el código de error http) sobre la excepción generada por el método getRespondeCode ()? Por cierto, sé cómo manejar mi error, y solo quiero saber cómo diferenciar cada excepción (o al menos esta excepción específica). Gracias.
grattmandu03

2
@ grattmandu03 - No estoy seguro. Parece que se está ejecutando en stackoverflow.com/questions/18900143/… (que desafortunadamente no tiene una respuesta). Podría intentar usar un marco de nivel superior como HttpClient, que probablemente le daría un poco más de control sobre cómo maneja respuestas como esa.
Rob Hruska

Ok, gracias por tu respuesta. Mi trabajo es adaptar un código antiguo para trabajar con este proxy, y con menos modificaciones, el cliente comprenderá mejor mi trabajo. Pero supongo que es para mí (en este momento) la única forma de hacer lo que quiero. Gracias de cualquier manera.
grattmandu03

¿Necesita llamar a desconectar () en un bloque finalmente?
Andrew Swan

Probablemente depende, haría una investigación. Los documentos dicen que llamar al disconnect()método puede cerrar el socket subyacente si una conexión persistente está inactiva en ese momento. , lo que no garantiza. Los documentos también dicen que indica que otras solicitudes al servidor son poco probables en el futuro cercano. Llamar disconnect()no debe implicar que esta HttpURLConnectioninstancia se pueda reutilizar para otras solicitudes. Si está utilizando un InputStreampara leer datos, debe close()esa secuencia en un finallybloque.
Rob Hruska

38
URL url = new URL("http://www.google.com/humans.txt");
HttpURLConnection http = (HttpURLConnection)url.openConnection();
int statusCode = http.getResponseCode();

11
+1 para un ejemplo más conciso (pero completamente funcional). Bonito ejemplo de URL también ( fondo ) :)
Jonik

obteniendo Excepción en el hilo "principal" java.net.ConnectException: Conexión rechazada: conectar No sé por qué estoy obteniendo esto.
Ganesa Vijayakumar

Justo fuera del tema, estoy tratando de conocer todos los códigos de respuesta que puede generar una conexión: ¿hay un documento?
Skynet

Cómo verificar esto para urls con autenticación básica
Satheesh Kumar

más uno para sugerir la URL google.com/humans.txt
PC.

10

Puedes probar lo siguiente:

class ResponseCodeCheck 
{

    public static void main (String args[]) throws Exception
    {

        URL url = new URL("http://google.com");
        HttpURLConnection connection = (HttpURLConnection)url.openConnection();
        connection.setRequestMethod("GET");
        connection.connect();

        int code = connection.getResponseCode();
        System.out.println("Response code of the object is "+code);
        if (code==200)
        {
            System.out.println("OK");
        }
    }
}

obteniendo Excepción en el hilo "principal" java.net.ConnectException: Conexión rechazada: conectar. No sé la resonancia
Ganesa Vijayakumar

5
import java.io.IOException;
import java.net.URL;
import java.net.HttpURLConnection;

public class API{
    public static void main(String args[]) throws IOException
    {
        URL url = new URL("http://www.google.com");
        HttpURLConnection http = (HttpURLConnection)url.openConnection();
        int statusCode = http.getResponseCode();
        System.out.println(statusCode);
    }
}

4

Esto me ha funcionado:

            import org.apache.http.client.HttpClient;
            import org.apache.http.client.methods.HttpGet;  
            import org.apache.http.impl.client.DefaultHttpClient;
            import org.apache.http.HttpResponse;
            import java.io.BufferedReader;
            import java.io.InputStreamReader;



            public static void main(String[] args) throws Exception {   
                        HttpClient client = new DefaultHttpClient();
                        //args[0] ="http://hostname:port/xyz/zbc";
                        HttpGet request1 = new HttpGet(args[0]);
                        HttpResponse response1 = client.execute(request1);
                        int code = response1.getStatusLine().getStatusCode();

                         try(BufferedReader br = new BufferedReader(new InputStreamReader((response1.getEntity().getContent())));){
                            // Read in all of the post results into a String.
                            String output = "";
                            Boolean keepGoing = true;
                            while (keepGoing) {
                                String currentLine = br.readLine();          
                                if (currentLine == null) {
                                    keepGoing = false;
                                } else {
                                    output += currentLine;
                                }
                            }
                            System.out.println("Response-->"+output);   
                         }

                         catch(Exception e){
                              System.out.println("Exception"+e);  

                          }


                   }

Perfecto. Funciona incluso si hay una redirección en la URL
Daniel

2

Esto es lo que funcionó para mí:

import java.io.IOException;
import java.net.HttpURLConnection;
import java.net.URL;

public class UrlHelpers {

    public static int getHTTPResponseStatusCode(String u) throws IOException {

        URL url = new URL(u);
        HttpURLConnection http = (HttpURLConnection)url.openConnection();
        return http.getResponseCode();
    }
}

Espero que esto ayude a alguien :)


2

Pruebe este código que verifica los 400 mensajes de error

huc = (HttpURLConnection)(new URL(url).openConnection());

huc.setRequestMethod("HEAD");

huc.connect();

respCode = huc.getResponseCode();

if(respCode >= 400) {
    System.out.println(url+" is a broken link");
} else {
    System.out.println(url+" is a valid link");
}

1

Manera eficiente de obtener datos (con carga útil desigual) por escáner.

public static String getResponseFromHttpUrl(URL url) throws IOException {
    HttpURLConnection urlConnection = (HttpURLConnection) url.openConnection();
    try {
        InputStream in = urlConnection.getInputStream();

        Scanner scanner = new Scanner(in);
        scanner.useDelimiter("\\A");  // Put entire content to next token string, Converts utf8 to 16, Handles buffering for different width packets

        boolean hasInput = scanner.hasNext();
        if (hasInput) {
            return scanner.next();
        } else {
            return null;
        }
    } finally {
        urlConnection.disconnect();
    }
}

Esto no responde a la pregunta en absoluto.
pringi

1

Este es el método estático completo, que puede adaptar para establecer el tiempo de espera y el código de error cuando ocurre IOException:

  public static int getResponseCode(String address) {
    return getResponseCode(address, 404);
  }

  public static int getResponseCode(String address, int defaultValue) {
    try {
      //Logger.getLogger(WebOperations.class.getName()).info("Fetching response code at " + address);
      URL url = new URL(address);
      HttpURLConnection connection = (HttpURLConnection) url.openConnection();
      connection.setConnectTimeout(1000 * 5); //wait 5 seconds the most
      connection.setReadTimeout(1000 * 5);
      connection.setRequestProperty("User-Agent", "Your Robot Name");
      int responseCode = connection.getResponseCode();
      connection.disconnect();
      return responseCode;
    } catch (IOException ex) {
      Logger.getLogger(WebOperations.class.getName()).log(Level.INFO, "Exception at {0} {1}", new Object[]{address, ex.toString()});
      return defaultValue;
    }
  }

0
HttpURLConnection connection = (HttpURLConnection) url.openConnection();
            connection.setDoOutput(true);
            connection.setDoInput(true);
            connection.setRequestMethod("POST");

. . . . . . .

System.out.println("Value" + connection.getResponseCode());
             System.out.println(connection.getResponseMessage());
             System.out.println("content"+connection.getContent());

¿Cómo podemos hacer para las URL con autenticación básica?
Satheesh Kumar

0

puede usar la conexión de URL http / https de Java para obtener el código de respuesta del sitio web y otra información. Aquí también hay un código de muestra.

 try {

            url = new URL("https://www.google.com"); // create url object for the given string  
            HttpURLConnection connection = (HttpURLConnection) url.openConnection();
            if(https_url.startsWith("https")){
                 connection = (HttpsURLConnection) url.openConnection();
            }

            ((HttpURLConnection) connection).setRequestMethod("HEAD");
            connection.setConnectTimeout(50000); //set the timeout
            connection.connect(); //connect
            String responseMessage = connection.getResponseMessage(); //here you get the response message
             responseCode = connection.getResponseCode(); //this is http response code
            System.out.println(obj.getUrl()+" is up. Response Code : " + responseMessage);
            connection.disconnect();`
}catch(Exception e){
e.printStackTrace();
}

0

Es una pregunta antigua, pero permite mostrar en la forma REST (JAX-RS):

import java.util.Arrays;
import javax.ws.rs.*

(...)

Response response = client
    .target( url )
    .request()
    .get();

// Looking if response is "200", "201" or "202", for example:
if( Arrays.asList( Status.OK, Status.CREATED, Status.ACCEPTED ).contains( response.getStatusInfo() ) ) {
    // lets something...
}

(...)
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.