जावा में URL के लिए HTTP प्रतिक्रिया कोड कैसे प्राप्त करें?


144

कृपया मुझे पार्टलर URL का प्रतिक्रिया कोड प्राप्त करने के लिए चरण या कोड बताएं।



2
मैं डुप्लिकेट नहीं कहूंगा, क्योंकि वह प्रतिक्रिया कोड चाहता है, लेकिन @ अज़ित आपको वैसे भी जांचना चाहिए। थोड़ा प्रयोग जोड़ें और आप जाने के लिए अच्छे हैं।
स्लीज़िका

2
दूसरे लोगों से आपके लिए अपना काम करने की माँग करने के बजाय। कृपया प्रदर्शित करें कि आपने कम से कम इस कार्य को अपने दम पर पूरा करने का प्रयास किया है। अपना वर्तमान कोड दिखाएं और आपने इस कार्य को कैसे पूरा करने का प्रयास किया है। यदि आप चाहते हैं कि कोई आपके लिए आपके काम को न करे तो आपकी ओर से कोई प्रयास नहीं किया जा सकता है और आप उन्हें भुगतान कर सकते हैं।
पैट्रिक डब्ल्यू मैकमोहन

उसने क्या मांग की? उन्होंने अपने पहियों को कताई करने के बजाय मदद मांगी, जब उन्हें पता नहीं था कि क्या करना है। वह समुदाय का उपयोग कर रहा था जैसा कि यह इरादा था।
डैनी रेमिंगटन - OMS

जवाबों:


180

HttpURLConnection :

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

int code = connection.getResponseCode();

यह किसी भी तरह से एक मजबूत उदाहरण नहीं है; आपको IOExceptions और whatnot को संभालने की आवश्यकता होगी । लेकिन यह आपको शुरू करना चाहिए।

यदि आपको अधिक क्षमता के साथ कुछ चाहिए, तो HttpClient की जांच करें ।


2
मेरे विशिष्ट मामले में और आपकी विधि के साथ, मुझे एक IOException ("प्रॉक्सी के साथ प्रमाणित करने में विफल") मिलता है, जो आमतौर पर एक http त्रुटि 407 है। क्या कोई ऐसा तरीका है जहां मुझे उठाए गए अपवाद के बारे में एक सटीक (http त्रुटि कोड) मिल सकती है GetRespondeCode () विधि द्वारा? वैसे, मुझे पता है कि मुझे अपनी त्रुटि को कैसे संभालना है, और मैं सिर्फ यह जानना चाहता हूं कि प्रत्येक अपवाद को कैसे अलग किया जाए (या कम से कम इस विशिष्ट अपवाद को)। धन्यवाद।
grattmandu03

2
@ grattmandu03 - मुझे यकीन नहीं है। ऐसा लगता है कि आप stackoverflow.com/questions/18900143/… (जो दुर्भाग्य से एक जवाब नहीं है) में चल रहे हैं । आप HttpClient जैसे उच्च-स्तरीय ढांचे का उपयोग करने की कोशिश कर सकते हैं, जो संभवतः आपको इस तरह की प्रतिक्रियाओं को संभालने के तरीके पर थोड़ा और नियंत्रण देगा।
रॉब ह्रस्का

ठीक है, आपके उत्तर के लिए धन्यवाद। मेरा काम इस प्रॉक्सी के साथ काम करने के लिए एक पुराने कोड को अनुकूलित करना है, और कम संशोधनों से ग्राहक मेरे काम को समझेंगे। लेकिन मुझे लगता है, यह मेरे लिए है (अभी) केवल वही करना है जो मुझे चाहिए। फिर भी धन्यवाद।
grattmandu03

क्या आपको अंततः ब्लॉक में डिस्कनेक्ट () कॉल करने की आवश्यकता है?
एंड्रयू स्वैन

यह शायद निर्भर करता है, मैं कुछ शोध करूंगा। डॉक्स का कहना है कि कॉलिंग disconnect()विधि अंतर्निहित सॉकेट बंद हो सकता है अगर एक लगातार कनेक्शन अन्यथा उस समय बेकार है। , जो गारंटी नहीं देता है। डॉक्स यह भी बताता है कि निकट भविष्य में सर्वर के अन्य अनुरोधों की संभावना नहीं है। कॉलिंग का disconnect()अर्थ यह नहीं होना चाहिए कि इस HttpURLConnectionअनुरोध को अन्य अनुरोधों के लिए पुन: उपयोग किया जा सकता है। यदि आप InputStreamडेटा पढ़ने के लिए किसी का उपयोग कर रहे हैं, तो आपको close()उस finallyखंड को ब्लॉक में करना चाहिए ।
रोब Hruska

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

11
अधिक रसीला (लेकिन पूरी तरह कार्यात्मक) उदाहरण के लिए +1। अच्छा उदाहरण URL भी ( पृष्ठभूमि ) :)
जोनीक

थ्रेड में अपवाद "मुख्य" java.net.ConnectException: कनेक्शन मना कर दिया: कनेक्ट करें मुझे नहीं पता कि मुझे यह क्यों मिल रहा है।
गनेसा विजयकुमार

विषय से दूर, मैं सभी प्रतिक्रिया कोड जानने की कोशिश कर रहा हूं जो एक कनेक्शन उत्पन्न कर सकता है - क्या कोई डॉक्टर है?
स्काईनेट

बुनियादी प्रमाणीकरण के साथ यूआरएल के लिए इसे कैसे जांचें
सतीश कुमार


10

आप निम्नलिखित की कोशिश कर सकते हैं:

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

थ्रेड में अपवाद "मुख्य" java.net.ConnectException: कनेक्शन मना कर दिया: कनेक्ट करें। मुझे पता नहीं है
गणेश विजयकुमार

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

यह मेरे लिए काम किया है:

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

                          }


                   }

उत्तम। काम करता है, भले ही URL में एक पुनर्निर्देशन है
डैनियल

2

इसी से मेरा काम बना है:

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

आशा है कि यह किसी की मदद करता है :)


2

इस कोड को आज़माएं जो 400 त्रुटि संदेशों की जाँच कर रहा है

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

स्कैनर द्वारा डेटा (असमान पेलोड के साथ) प्राप्त करने का कुशल तरीका।

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

इस सवाल का जवाब बिल्कुल नहीं है।
प्रिंगी

1

यह पूर्ण स्थैतिक विधि है, जिसे आप 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());

हम बेसिक ऑटैटिशन वाले URL के लिए कैसे कर सकते हैं?
सत्येश कुमार

0

आप वेबसाइट से प्रतिक्रिया कोड और अन्य जानकारी प्राप्त करने के लिए जावा http / https url कनेक्शन का उपयोग कर सकते हैं और यहां एक नमूना कोड भी है।

 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

यह एक पुराना सवाल है, लेकिन 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...
}

(...)
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.