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.

Ajit
sumber
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 .

Rob Hruska
sumber
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();
kwo
sumber
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");
        }
    }
}
Ashish Sharda
sumber
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);
    }
}
Raja Singh
sumber
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);  

                          }


                   }
Subhasish Sahu
sumber
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 :)

Jeverick
sumber
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");
}
lokesh sharma
sumber
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();
    }
}
pengguna8024555
sumber
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;
    }
  }
Mladen Adamovic
sumber
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());
neoeahit
sumber
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();
}
kaptenchala
sumber
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...
}

(...)
Thiago Sperandio
sumber