Java'da bir URL için HTTP yanıt kodu nasıl alınır?


144

Belirli bir URL'nin yanıt kodunu almak için lütfen bana adımları veya kodu söyleyin.



2
Ben cevap kodunu istiyor çünkü yinelenen söyleyemem, ama @Ajit yine de kontrol etmelisiniz. Biraz deneme ekleyin ve hazırsınız.
slezica

2
Başkalarının sizin için işinizi yapmasını talep etmek yerine. Lütfen bu görevi en azından kendi başınıza yapmaya çalıştığınızı gösterin. Mevcut kodunuzu ve bu görevi nasıl gerçekleştirmeye çalıştığınızı gösterin. Eğer birisinin sizin için hiçbir çaba sarf etmeden işinizi yapmasını istiyorsanız, birini işe alabilir ve onlara ödeme yapabilirsiniz.
Patrick W. McMahon

Ne talep etti? Ne yapacağına dair bir fikri olmadığında tekerleklerini döndürmek yerine yardım istedi. Topluluğu amaçlandığı gibi kullanıyordu.
Danny Remington - OMS

Yanıtlar:


180

HttpURLConeksiyon :

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

int code = connection.getResponseCode();

Bu kesinlikle sağlam bir örnek değildir; IOExceptions ve neyi işlememeniz gerekir . Ama başlamanız lazım.

Daha fazla kapasiteye sahip bir şeye ihtiyacınız varsa, HttpClient'e bakın .


2
Benim özel durumumda ve yönteminizle, genellikle bir http hatası 407 olan bir IOException ("proxy ile kimlik doğrulaması başarısız oldu") alıyorum. Yükseltilmiş istisna hakkında bir kesinlik (http hata kodu) alabileceğim bir yol var mı getRespondeCode () yöntemiyle? Bu arada, hatamı nasıl ele alacağımı biliyorum ve sadece her istisnayı (veya en azından bu özel istisnayı) nasıl ayırt edeceğimizi bilmek istiyorum. Teşekkürler.
grattmandu03

2
@ grattmandu03 - Emin değilim. Görünüşe göre stackoverflow.com/questions/18900143/… (ne yazık ki bir cevabı yok) ile karşılaşıyorsunuz. HttpClient gibi daha yüksek düzeyli bir çerçeve kullanmayı deneyebilirsiniz, bu da muhtemelen böyle yanıtları nasıl ele alacağınız konusunda size biraz daha fazla kontrol sağlayacaktır.
Rob Hruska

Tamam, cevabınız için teşekkür ederim. Benim işim eski bir kodu bu proxy ile çalışacak şekilde uyarlamak ve müşterinin işimi daha iyi anlayacağı değişiklikler. Ama sanırım, istediğim şeyi yapmanın tek yolu benim için (şimdi). Yine de teşekkürler.
grattmandu03

Son olarak blokta disconnect () öğesini çağırmanız mı gerekiyor?
Andrew Swan

Muhtemelen bağlıdır, biraz araştırma yaparım. Dokümanlar demek çağrılması disconnect()kalıcı bağlantı o zaman başka türlü boşta olup olmadığını altta yatan soket kapatabilir yöntemi. garanti etmez. Dokümanlar ayrıca , sunucuya yapılacak diğer isteklerin yakın gelecekte gerçekleşmeyeceğini belirtir. Çağrı disconnect(), bu HttpURLConnectionörneğin diğer istekler için tekrar kullanılabileceği anlamına gelmemelidir . InputStreamVerileri okumak için a kullanıyorsanız , close()bu akışı bir finallyblokta yapmanız gerekir .
Rob Hruska

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

11
Daha özlü (ancak tamamen işlevsel) örnek için +1. Güzel örnek URL de ( arka plan ) :)
Jonik

iş parçacığı "ana" İstisna Başlarken java.net.ConnectException: Bağlantı reddedildi: bağlanmak Neden bu alıyorum bilmiyorum.
Ganesa Vijayakumar

Sadece konu dışı, bir bağlantı oluşturabilir tüm yanıt kodlarını bilmek çalışıyorum - bir doc var mı?
Skynet

Temel kimlik doğrulamalı URL'ler için bu nasıl kontrol edilir
Satheesh Kumar

artı bir URL google.com/humans.txt
PC

10

Aşağıdakileri deneyebilirsiniz:

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

"main" iş parçacığında özel durum alıyorum java.net.ConnectException: Bağlantı reddedildi: bağlanın. Rezonu bilmiyorum
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

Bu benim için çalıştı:

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

                          }


                   }

Mükemmel. URL'de bir yönlendirme olsa bile çalışır
Daniel

2

Benim için işe yarayan buydu:

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

Umarım bu birine yardımcı olur :)


2

400 hata mesajını kontrol eden bu kod parçasını deneyin

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

Tarayıcı ile veri almanın verimli yolu (Eşit olmayan yük ile).

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

Bu soruya hiç cevap vermiyor.
pringi

1

Bu, IOException gerçekleştiğinde bekleme süresini ve hata kodunu ayarlamak için uyarlayabileceğiniz tam statik yöntemdir:

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

Temel kimlik doğrulaması olan URL'ler için nasıl yapabiliriz?
Satheesh Kumar

0

web sitesinden yanıt kodunu almak için java http / https url bağlantısını ve diğer bilgileri de burada bir örnek kod kullanabilirsiniz.

 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

Bu eski bir soru, ama REST şekilde gösterelim (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...
}

(...)
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.