এটি কি আদৌ কোনও ভাল (আমি যা চাই তা কি তা করবে?)
আপনি এটি করতে পারেন। আর একটি সম্ভাব্য উপায় ব্যবহার করা হচ্ছে java.net.Socket
।
public static boolean pingHost(String host, int port, int timeout) {
try (Socket socket = new Socket()) {
socket.connect(new InetSocketAddress(host, port), timeout);
return true;
} catch (IOException e) {
return false; // Either timeout or unreachable or failed DNS lookup.
}
}
এছাড়াও আছে InetAddress#isReachable()
:
boolean reachable = InetAddress.getByName(hostname).isReachable();
তবে এটি সুস্পষ্টভাবে পোর্ট ৮০ পরীক্ষা করে না Fire
আমার কি কোনওভাবে সংযোগটি বন্ধ করতে হবে?
না, আপনার স্পষ্টভাবে দরকার নেই। এটি হুডগুলির নীচে পরিচালনা এবং পুল করা হয়।
আমি মনে করি এটি জিইটি অনুরোধ is পরিবর্তে কি হেড পাঠানোর কোনও উপায় আছে?
আপনি প্রাপ্ত কাস্ট করতে পারেন URLConnection
থেকে HttpURLConnection
এবং তারপর ব্যবহার setRequestMethod()
অনুরোধ পদ্ধতি সেট করতে। যাইহোক, আপনার অ্যাকাউন্টে নেওয়া দরকার যে কিছু জিইটি পুরোপুরি সূক্ষ্মভাবে কাজ করার সময় কিছু দুর্বল ওয়েব অ্যাপস বা হোমগ্রাউন সার্ভারগুলি একটি হেডের জন্য HTTP 405 ত্রুটি ফিরিয়ে দিতে পারে (যেমন উপলব্ধ নয়, কার্যকর নয়, অনুমোদিত নয়)। আপনি ডোমেন / হোস্ট নয় লিঙ্কগুলি / সংস্থানগুলি যাচাই করতে চান এমন ক্ষেত্রে জিইটি ব্যবহার করা আরও নির্ভরযোগ্য।
প্রাপ্যতার জন্য সার্ভারটি পরীক্ষা করা আমার ক্ষেত্রে পর্যাপ্ত নয়, আমার ইউআরএল পরীক্ষা করতে হবে (ওয়েবপ্যাপটি স্থাপন করা হতে পারে না)
প্রকৃতপক্ষে, হোস্টের সংযোগ কেবল হোস্টটি উপলব্ধ থাকলে তা জানায়, সামগ্রীটি উপলভ্য নয়। এটি যতটা ভাল ঘটতে পারে যে কোনও সমস্যা ছাড়াই একটি ওয়েবসার্ভার শুরু হয়েছে, তবে সার্ভারের শুরুর সময় ওয়েব অ্যাপটি মোতায়েন করতে ব্যর্থ হয়েছিল। এটি সাধারণত পুরো সার্ভারটি নীচে নামার কারণ হবে না। আপনি HTTP প্রতিক্রিয়া কোডটি 200 কিনা তা পরীক্ষা করে নির্ধারণ করতে পারেন।
HttpURLConnection connection = (HttpURLConnection) new URL(url).openConnection();
connection.setRequestMethod("HEAD");
int responseCode = connection.getResponseCode();
if (responseCode != 200) {
// Not OK.
}
// < 100 is undetermined.
// 1nn is informal (shouldn't happen on a GET/HEAD)
// 2nn is success
// 3nn is redirect
// 4nn is client error
// 5nn is server error
প্রতিক্রিয়া স্থিতি কোড সম্পর্কে আরও তথ্যের জন্য দেখুন আরএফসি 2616 বিভাগ 10 । connect()
আপনি প্রতিক্রিয়া ডেটা নির্ধারণ করলে কলিংয়ের প্রয়োজন হয় না। এটি সুস্পষ্টভাবে সংযুক্ত হবে।
ভবিষ্যতের রেফারেন্সের জন্য, টাইমআউটগুলির সাথে অ্যাকাউন্ট গ্রহণ করে কোনও ইউটিলিটি পদ্ধতির স্বাদে এখানে একটি সম্পূর্ণ উদাহরণ:
/**
* Pings a HTTP URL. This effectively sends a HEAD request and returns <code>true</code> if the response code is in
* the 200-399 range.
* @param url The HTTP URL to be pinged.
* @param timeout The timeout in millis for both the connection timeout and the response read timeout. Note that
* the total timeout is effectively two times the given timeout.
* @return <code>true</code> if the given HTTP URL has returned response code 200-399 on a HEAD request within the
* given timeout, otherwise <code>false</code>.
*/
public static boolean pingURL(String url, int timeout) {
url = url.replaceFirst("^https", "http"); // Otherwise an exception may be thrown on invalid SSL certificates.
try {
HttpURLConnection connection = (HttpURLConnection) new URL(url).openConnection();
connection.setConnectTimeout(timeout);
connection.setReadTimeout(timeout);
connection.setRequestMethod("HEAD");
int responseCode = connection.getResponseCode();
return (200 <= responseCode && responseCode <= 399);
} catch (IOException exception) {
return false;
}
}