Comment obtenir le code de réponse HTTP pour une URL en Java?


144

Veuillez me dire les étapes ou le code pour obtenir le code de réponse d'une URL particulière.



2
Je ne dirais pas en double, car il veut le code de réponse, mais @Ajit vous devriez quand même le vérifier. Ajoutez un peu d'expérimentation et vous êtes prêt à partir.
slezica

2
Plutôt que de demander à d'autres personnes de faire votre travail à votre place. Veuillez démontrer que vous avez au moins tenté d'accomplir cette tâche par vous-même. Montrez votre code actuel et comment vous avez tenté d'accomplir cette tâche. Si vous voulez que quelqu'un fasse votre travail pour vous sans effort de votre part, vous pouvez embaucher quelqu'un et le payer.
Patrick W. McMahon

Quelle demande a-t-il fait? Il a demandé de l'aide, au lieu de faire tourner ses roues alors qu'il ne savait pas quoi faire. Il utilisait la communauté comme prévu.
Danny Remington - OMS

Réponses:


180

HttpURLConnection :

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

int code = connection.getResponseCode();

Ceci n'est en aucun cas un exemple robuste; vous aurez besoin de gérer les IOExceptions et autres. Mais cela devrait vous aider à démarrer.

Si vous avez besoin de quelque chose avec plus de capacités, consultez HttpClient .


2
Dans mon cas spécifique et avec votre méthode, j'obtiens une IOException ("Failed to authenticate with proxy") qui est généralement une erreur http 407. Existe-t-il un moyen d'obtenir une précision (le code d'erreur http) sur l'exception soulevée par la méthode getRespondeCode ()? Au fait, je sais comment gérer mon erreur, et je veux juste savoir comment différencier chaque exception (ou du moins cette exception spécifique). Merci.
grattmandu03

2
@ grattmandu03 - Je ne suis pas sûr. On dirait que vous rencontrez stackoverflow.com/questions/18900143/… (qui n'a malheureusement pas de réponse). Vous pouvez essayer d'utiliser un cadre de plus haut niveau comme HttpClient, ce qui vous donnerait probablement un peu plus de contrôle sur la façon dont vous gérez les réponses de ce genre.
Rob Hruska

Ok merci pour ta réponse. Mon travail consiste à adapter un ancien code pour qu'il fonctionne avec ce proxy, et moins de modifications plus le client comprendra mon travail. Mais je suppose que c'est pour moi (en ce moment) la seule façon de faire ce que je veux. Merci quand même.
grattmandu03

Avez-vous besoin d'appeler disconnect () dans un bloc finally?
Andrew Swan

Cela dépend probablement, je ferais des recherches. La documentation indique que l' appel de la disconnect()méthode peut fermer le socket sous-jacent si une connexion persistante est par ailleurs inactive à ce moment-là. , ce qui ne garantit pas. Les documents indiquent également Indique que d'autres demandes au serveur sont peu probables dans un avenir proche. L'appel disconnect()ne doit pas impliquer que cette HttpURLConnectioninstance peut être réutilisée pour d'autres requêtes. Si vous utilisez un InputStreampour lire des données, vous devriez close()ce flux dans un finallybloc.
Rob Hruska

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

11
+1 pour un exemple plus succinct (mais entièrement fonctionnel). Bel exemple d'URL aussi ( arrière-plan ) :)
Jonik

obtenir une exception dans le fil "principal" java.net.ConnectException: connexion refusée: connexion Je ne sais pas pourquoi je reçois cela.
Ganesa Vijayakumar

Juste hors sujet, j'essaie de connaître tous les codes de réponse qu'une connexion peut générer - y a-t-il un document?
Skynet

Comment vérifier cela pour les URL avec authentification de base
Satheesh Kumar

plus un pour suggérer l'URL google.com/humans.txt
PC.

10

Vous pouvez essayer ce qui suit:

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

obtention d'exception dans le thread "main" java.net.ConnectException: connexion refusée: connexion. Je ne connais pas la résonance
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

Cela a fonctionné pour moi:

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

                          }


                   }

Parfait. Fonctionne même s'il y a une redirection dans l'URL
Daniel

2

C'est ce qui a fonctionné pour moi:

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

J'espère que cela aide quelqu'un :)


2

Essayez ce morceau de code qui vérifie les 400 messages d'erreur

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

Moyen efficace d'obtenir des données (avec une charge utile inégale) par scanner.

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

Cela ne répond pas du tout à la question.
pringi

1

Il s'agit de la méthode statique complète, que vous pouvez adapter pour définir le temps d'attente et le code d'erreur lorsque IOException se produit:

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

Comment pouvons-nous faire pour les URL avec l'authentification de base?
Satheesh Kumar

0

vous pouvez utiliser la connexion java http / https url pour obtenir le code de réponse du site Web et d'autres informations.Voici un exemple de code.

 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

C'est une vieille question, mais permet de montrer de la manière 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...
}

(...)
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.