Bagaimana cara mendapatkan kode respons HTTP untuk URL di Jawa?


144

Tolong beritahu saya langkah-langkah atau kode untuk mendapatkan kode respons dari URL partikel.



2
Saya tidak akan mengatakan duplikat, karena dia menginginkan kode respons, tetapi @ Ajit Anda harus tetap memeriksanya. Tambahkan sedikit eksperimen dan Anda siap melakukannya.
slezica

2
Daripada menuntut orang lain untuk melakukan pekerjaan Anda untuk Anda. Tolong tunjukkan bahwa Anda setidaknya telah berusaha menyelesaikan tugas ini sendiri. Tunjukkan kode Anda saat ini dan bagaimana Anda telah berusaha menyelesaikan tugas ini. Jika Anda ingin seseorang melakukan pekerjaan Anda untuk Anda tanpa usaha dari pihak Anda, Anda dapat mempekerjakan seseorang dan membayar mereka.
Patrick W. McMahon

Permintaan apa yang dia buat? Dia meminta bantuan, alih-alih memutar roda ketika dia tidak tahu harus berbuat apa. Dia menggunakan komunitas seperti yang dimaksudkan.
Danny Remington - OMS

Jawaban:


180

HttpURLConnection :

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

int code = connection.getResponseCode();

Ini sama sekali bukan contoh yang kuat; Anda harus menangani IOExceptiondan yang lainnya. Tapi itu harus Anda mulai.

Jika Anda membutuhkan sesuatu dengan kemampuan lebih, periksa HttpClient .


2
Dalam kasus khusus saya dan dengan metode Anda, saya mendapatkan IOException ("Gagal mengotentikasi dengan proxy") yang biasanya merupakan kesalahan http 407. Apakah ada cara di mana saya bisa mendapatkan presisi (kode kesalahan http) tentang pengecualian yang diajukan dengan metode getRespondeCode ()? Ngomong-ngomong, saya tahu cara menangani kesalahan saya, dan saya hanya ingin tahu cara membedakan setiap pengecualian (atau setidaknya pengecualian khusus ini). Terima kasih.
grattmandu03

2
@ grattmandu03 - Saya tidak yakin. Sepertinya Anda mengalami stackoverflow.com/questions/18900143/… (yang sayangnya tidak memiliki jawaban). Anda bisa mencoba menggunakan kerangka kerja tingkat tinggi seperti HttpClient, yang mungkin akan memberi Anda sedikit lebih banyak kontrol atas bagaimana Anda menangani respons seperti itu.
Rob Hruska

Ok terima kasih atas jawabannya. Pekerjaan saya adalah mengadaptasi kode lama untuk bekerja dengan proksi ini, dan semakin sedikit modifikasi, semakin banyak klien yang akan memahami pekerjaan saya. Tapi saya kira, itu untuk saya (sekarang) satu-satunya cara untuk melakukan apa yang saya inginkan. Bagaimanapun, terima kasih.
grattmandu03

Apakah Anda perlu memanggil disconnect () di blok terakhir?
Andrew Swan

Mungkin tergantung, saya akan melakukan riset. The docs mengatakan Memanggil disconnect()metode dapat menutup socket yang mendasari jika koneksi persisten dinyatakan menganggur pada waktu itu. , yang tidak menjamin. Documents juga mengatakan Menunjukkan bahwa permintaan lain ke server tidak mungkin dalam waktu dekat. Panggilan disconnect()seharusnya tidak menyiratkan bahwa HttpURLConnectioninstance ini dapat digunakan kembali untuk permintaan lainnya. Jika Anda menggunakan InputStreamuntuk membaca data, Anda harus close()mengalirkan itu dalam finallyblok.
Rob Hruska

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

11
+1 untuk lebih banyak contoh ringkas (tapi berfungsi penuh). URL contoh yang bagus juga ( latar belakang ) :)
Jonik

mendapatkan Pengecualian di utas "utama" java.net.ConnectException: Sambungan ditolak: sambung Saya tidak tahu mengapa saya mendapatkan ini.
Ganesa Vijayakumar

Di luar topik, saya mencoba mengetahui semua kode respons yang dapat dihasilkan koneksi - apakah ada dokumen?
Skynet

Cara memeriksa ini untuk url dengan otentikasi dasar
Satheesh Kumar

ditambah satu untuk menyarankan URL google.com/humans.txt
PC.

10

Anda dapat mencoba yang berikut ini:

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

mendapatkan Exception di thread "main" java.net.ConnectException: Koneksi ditolak: terhubung. Saya tidak tahu jawabannya
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

Ini berhasil bagi saya:

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

                          }


                   }

Sempurna. Bekerja bahkan jika ada pengalihan di URL
Daniel

2

Inilah yang bekerja untuk saya:

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

Semoga ini bisa membantu seseorang :)


2

Coba sepotong kode ini yang memeriksa 400 pesan kesalahan

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

Cara efisien untuk mendapatkan data (dengan muatan tidak merata) dengan pemindai.

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

Ini sama sekali tidak menjawab pertanyaan.
pringi

1

Ini adalah metode statis penuh, yang dapat Anda adaptasi untuk mengatur waktu tunggu dan kode kesalahan ketika IOException terjadi:

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

Bagaimana kami dapat melakukannya untuk URL dengan authetication Dasar?
Satheesh Kumar

0

Anda dapat menggunakan koneksi java http / https url untuk mendapatkan kode respons dari situs web dan informasi lainnya juga di sini adalah contoh kode.

 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

Ini pertanyaan lama, tetapi mari kita tunjukkan dengan cara 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...
}

(...)
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.