2013-04-24 10 views
5

मैं जावा के साथ एक वेबसाइट-डाउन यूटिलिटी बनाने की कोशिश कर रहा हूं, लेकिन मुझे कुछ समस्याएं हैं।जांचें कि वेबसाइट मौजूद है

क्या कोई वेबसाइट मौजूद है या नहीं, यह जांचने का कोई तरीका है? मैं इस की कोशिश की है, तो एक वेबसाइट नीचे है देखने के लिए:

URL url = new URL("http://localhost"); 
HttpURLConnection httpConnection = (HttpURLConnection) (url.openConnection()); 
int code = httpConnection.getResponseCode(); 
System.out.println("code: " + code); 

यह Connection refused: connect के लिए IOException माध्यम से चला जाता है जब अर्थात मैं कोई सक्रिय http सर्वर सुन (साइट नीचे है) है, जबकि स्थानीय होस्ट से कनेक्ट करने का प्रयास करें।

मैंने सोचा कि यह कुछ साइट के साथ एक ही बात है कि वास्तव में मौजूद नहीं है यानी

URL url = new URL("http://www.sdfasfjkhaslfjkhaslkdjfhasldkjf.it"); 

होगा लेकिन क्योंकि मेरे आईएसपी स्वचालित रूप से अगर एक यादृच्छिक विज्ञापन पृष्ठ पर मुझे पुनर्निर्देश मैं एक HTTP स्थिति कोड 200 प्राप्त जिस साइट पर मैं खोज रहा हूं वह मौजूद नहीं है।

इसलिए, यदि कोई साइट डाउन है, तो मेरा प्रोग्राम कहता है "ठीक है, आपकी वेबसाइट डाउन है", लेकिन यदि साइट मौजूद नहीं है तो मेरा प्रोग्राम कहता है "ओह, आपकी वेबसाइट ऊपर है और चल रही है!", और यह नहीं है वास्तव में अच्छा।

क्या कोई वेबसाइट मौजूद है या नहीं, यह जांचने का कोई तरीका है?

+6

वाह, क्या एक बुरा आईएसपी। – eboix

+0

@eboix हाँ। दुर्भाग्य से, मुझे लगता है कि प्रत्येक इतालवी आईएसपी इस – BackSlash

+0

की तरह काम करता है यदि आपका आईएसपी आपको इस तरह रीडायरेक्ट करता है, तो आप यह भी मान सकते हैं कि यह उपलब्ध नहीं है। –

उत्तर

1

आईएसपी DNS विषाक्तता के बारे में अपनी टिप्पणियां पढ़ना। आपका आईएसपी आपको एक DNS सर्वर दे रहा है/पट्टे पर दे रहा है, जो उस पर नियंत्रण में है, जो सभी NXDOMAIN प्रतिक्रियाओं को पकड़ता है और एक जहर परिणाम देता है जो वे नियंत्रित करते हैं।

मैं HTTP रिकॉर्ड करने से पहले Google Public DNS या कुछ अन्य सार्वजनिक रूप से ज्ञात वैध DNS सर्वर जैसे किसी रिकॉर्ड के लिए DNS जांच करता हूं। जब डोमेन अमान्य है तो Google सार्वजनिक DNS NXDOMAIN लौटाता है। जावा में, आपको आवश्यक DNS रिकॉर्ड्स तक सीधे पहुंच प्राप्त करने के लिए dnsjava जैसे कुछ का उपयोग करने की आवश्यकता हो सकती है।

अंत में, ज्ञात अच्छे स्रोत के विरुद्ध एक वैध DNS रिकॉर्ड के लिए दो चेक करें, फिर दूसरा यह देखने के लिए कि HTTP जीवित है या नहीं।

+1

मैं उन्हें सेट किए बिना Google DNSes कैसे देख सकता हूं? मैं एप्लिकेशन उपयोगकर्ता को अपनी डीएनएस सेटिंग्स बदलने के लिए नहीं कह सकता, क्या कोई वेबसाइट उन्हें "पूछने" का तरीका है यदि कोई वेबसाइट डिफ़ॉल्ट DNS के रूप में सेट किए बिना हल हो जाती है? – BackSlash

+0

आप अंतिम उपयोगकर्ता के DNS सर्वर नहीं बदलेंगे। आप लुकअप करने के लिए अपने आवेदन में DNS सर्वर सेट करेंगे। यदि आप कमांड प्रॉम्प्ट/टर्मिनल सत्र प्रकार 'nslookup kjfksadljfksl.com' खोलते हैं तो' nslookup kjfksadljfksl.com 8.8.8.8' टाइप करें। आप Google के खिलाफ लुकअप करने के लिए 'nslookup' बता रहे हैं, न कि आपके आईएसपी के DNS सर्वर के खिलाफ। आप अपने कोड में एक ही काम करेंगे। –

+0

'nslookup kjfksadljfksl.com 8.8.8.8' का मतलब है कि मुझे अपने जावा एप्लिकेशन से टर्मिनल कमांड निष्पादित करना होगा, अगर मैं नहीं करता तो यह बेहतर होगा ... मैं dnsjava कोशिश करूंगा, शायद यह मेरी सभी समस्याओं को हल करेगा! – BackSlash

1

बस Java - How to find the redirected url of a url? मिला जो httpConnection.setFollowRedirects (false) को सेट करने का सुझाव देता है - जो वास्तविक रीडायरेक्ट कर रहे हैं तो इससे मदद मिल सकती है। अगर वे रीडायरेक्ट नहीं कर रहे हैं, लेकिन सिर्फ अपनी सामग्री की सेवा कर रहे हैं, तो यह सुनिश्चित न करें कि सामग्री को वही किया गया है या यदि यह विज्ञापन है तो यह पता लगाने के अलावा बहुत कुछ किया जाना चाहिए।

0

आप जोड़ना चाहते हो सकता है:

HttpURLConnection.setFollowRedirects(false); 
// note : or 
//  httpConnection.setInstanceFollowRedirects(false); 

और नियंत्रण:

(httpConnection.getResponseCode() == HttpURLConnection.HTTP_OK) 
संबंधित मुद्दे