Java Language
HttpURLConnection
खोज…
टिप्पणियों
Android पर HttpUrlConnection का उपयोग करने के लिए आवश्यक है कि आप अपने ऐप में (
AndroidManifest.xml
) इंटरनेट की अनुमति जोड़ें।स्क्वायर के OkHttp जैसे अन्य जावा HTTP क्लाइंट और लाइब्रेरी भी हैं, जिनका उपयोग करना आसान है, और बेहतर प्रदर्शन या अधिक सुविधाएँ प्रदान कर सकते हैं।
स्ट्रिंग के रूप में एक URL से प्रतिक्रिया निकाय प्राप्त करें
String getText(String url) throws IOException {
HttpURLConnection connection = (HttpURLConnection) new URL(url).openConnection();
//add headers to the connection, or check the status if desired..
// handle error response code it occurs
int responseCode = conn.getResponseCode();
InputStream inputStream;
if (200 <= responseCode && responseCode <= 299) {
inputStream = connection.getInputStream();
} else {
inputStream = connection.getErrorStream();
}
BufferedReader in = new BufferedReader(
new InputStreamReader(
inputStream));
StringBuilder response = new StringBuilder();
String currentLine;
while ((currentLine = in.readLine()) != null)
response.append(currentLine);
in.close();
return response.toString();
}
यह निर्दिष्ट URL से पाठ डेटा डाउनलोड करेगा, और इसे स्ट्रिंग के रूप में लौटाएगा।
यह कैसे काम करता है:
सबसे पहले, हम
new URL(url).openConnection()
साथ अपने URL सेHttpUrlConnection
बनाते हैं। हमनेUrlConnection
को एकHttpUrlConnection
वापस करHttpUrlConnection
, इसलिए हमारे पास हेडर जोड़ने (जैसे उपयोगकर्ता एजेंट), या प्रतिक्रिया कोड की जाँच करने जैसी चीजों तक पहुंच है। (यह उदाहरण ऐसा नहीं करता है, लेकिन इसे जोड़ना आसान है।)फिर, प्रतिक्रिया कोड (त्रुटि से निपटने के लिए) पर
InputStream
बेसिंग बनाएंफिर, एक
BufferedReader
बनाएँ जो हमेंInputStream
से पाठ पढ़ने की अनुमति देता है जो हम कनेक्शन से प्राप्त करते हैं।अब, हम टेक्स्ट को
StringBuilder
से जोड़ते हैं, लाइन द्वारा लाइन।InputStream
बंद करें, और हमारे पास अब जो स्ट्रिंग है उसे वापस करें।
टिप्पणियाँ:
यह विधि विफलता के मामले में एक
IoException
को फेंकIoException
(जैसे कि नेटवर्क त्रुटि, या कोई इंटरनेट कनेक्शन नहीं), और यह एक अनियंत्रितMalformedUrlException
भी फेंक देगा यदि दिया गया URL मान्य नहीं है।इसका उपयोग किसी भी URL से पढ़ने के लिए किया जा सकता है, जो पाठ लौटाता है, जैसे कि वेबपेज (HTML), REST एपीआई जो JSON या XML, आदि लौटाते हैं।
इसे भी देखें: जावा कोड की कुछ पंक्तियों में स्ट्रिंग को URL पढ़ें
उपयोग:
बहुत सरल है:
String text = getText(”http://example.com");
//Do something with the text from example.com, in this case the HTML.
डाटा डालो
public static void post(String url, byte [] data, String contentType) throws IOException {
HttpURLConnection connection = null;
OutputStream out = null;
InputStream in = null;
try {
connection = (HttpURLConnection) new URL(url).openConnection();
connection.setRequestProperty("Content-Type", contentType);
connection.setDoOutput(true);
out = connection.getOutputStream();
out.write(data);
out.close();
in = connection.getInputStream();
BufferedReader reader = new BufferedReader(new InputStreamReader(in));
String line = null;
while ((line = reader.readLine()) != null) {
System.out.println(line);
}
in.close();
} finally {
if (connection != null) connection.disconnect();
if (out != null) out.close();
if (in != null) in.close();
}
}
यह निर्दिष्ट URL पर डेटा पोस्ट करेगा, फिर प्रतिक्रिया पंक्ति-दर-पंक्ति पढ़ें।
यह काम किस प्रकार करता है
- हमेशा की तरह हम एक
URL
सेHttpURLConnection
प्राप्त करते हैं। - डिफ़ॉल्ट रूप से
application/x-www-form-urlencoded
द्वाराsetRequestProperty
का उपयोग करके सामग्री प्रकार सेट करें -
setDoOutput(true)
कनेक्शन को बताता है कि हम डेटा भेजेंगे। - फिर हम प्राप्त
OutputStream
फोन करकेgetOutputStream()
इसे करने के लिए और लिखने डेटा। आपके द्वारा किए जाने के बाद इसे बंद करना न भूलें। - अंत में हम सर्वर प्रतिक्रिया पढ़ते हैं।
संसाधन हटाएं
public static void delete (String urlString, String contentType) throws IOException {
HttpURLConnection connection = null;
try {
URL url = new URL(urlString);
connection = (HttpURLConnection) url.openConnection();
connection.setDoInput(true);
connection.setRequestMethod("DELETE");
connection.setRequestProperty("Content-Type", contentType);
Map<String, List<String>> map = connection.getHeaderFields();
StringBuilder sb = new StringBuilder();
Iterator<Map.Entry<String, String>> iterator = responseHeader.entrySet().iterator();
while(iterator.hasNext())
{
Map.Entry<String, String> entry = iterator.next();
sb.append(entry.getKey());
sb.append('=').append('"');
sb.append(entry.getValue());
sb.append('"');
if(iterator.hasNext())
{
sb.append(',').append(' ');
}
}
System.out.println(sb.toString());
} catch (Exception e) {
e.printStackTrace();
} finally {
if (connection != null) connection.disconnect();
}
}
यह निर्दिष्ट URL में संसाधन को हटा देगा, फिर प्रतिक्रिया शीर्ष लेख मुद्रित करेगा।
यह काम किस प्रकार करता है
- हम एक
URL
सेHttpURLConnection
प्राप्त करते हैं। - डिफ़ॉल्ट रूप से
application/x-www-form-urlencoded
द्वाराsetRequestProperty
का उपयोग करके सामग्री प्रकार सेट करें -
setDoInput(true)
उस कनेक्शन को बताता है जिसे हम इनपुट के लिए URL कनेक्शन का उपयोग करने का इरादा रखते हैं। - HTTP DELETE करने के लिए
setRequestMethod("DELETE")
अंत में हम सर्वर प्रतिक्रिया हेडर प्रिंट करते हैं।
जाँच करें कि क्या संसाधन मौजूद है
/**
* Checks if a resource exists by sending a HEAD-Request.
* @param url The url of a resource which has to be checked.
* @return true if the response code is 200 OK.
*/
public static final boolean checkIfResourceExists(URL url) throws IOException {
HttpURLConnection conn = (HttpURLConnection) url.openConnection();
conn.setRequestMethod("HEAD");
int code = conn.getResponseCode();
conn.disconnect();
return code == 200;
}
स्पष्टीकरण:
यदि आप केवल जाँच कर रहे हैं कि कोई संसाधन मौजूद है, तो GET की तुलना में HEAD अनुरोध का उपयोग करना बेहतर है। यह संसाधन को स्थानांतरित करने के ओवरहेड से बचा जाता है।
ध्यान दें कि प्रतिक्रिया कोड 200
पर विधि केवल तभी वापस आती true
। यदि आप रिडायरेक्ट (यानी 3XX) प्रतिक्रियाओं का अनुमान लगाते हैं, तो उन्हें सम्मानित करने के लिए विधि को बढ़ाने की आवश्यकता हो सकती है।
उदाहरण:
checkIfResourceExists(new URL("http://images.google.com/")); // true
checkIfResourceExists(new URL("http://pictures.google.com/")); // false