Kullanılabilirlik için bir HTTP Url ping Java yolu tercih
Düzenli olarak belirli bir HTTP URL olup olmadığını kontrol eden bir monitör sınıfı ihtiyacım var. Bakım" Bahar kullanarak bu konuyu burada değil yani soyutlama TaskExecutor, parçası. "düzenli olarak alabilirim Soru:Java bir URL ping için tercih edilen yolu nedir?
Burada başlangıç noktası olarak benim geçerli kod:
try{
final URLConnection connection = new URL(url).openConnection();
connection.connect();
LOG.info("Service " url " available, yeah!");
available = true;
} catch(final MalformedURLException e){
throw new IllegalStateException("Bad URL: " url, e);
} catch(final IOException e){
LOG.info("Service " url " unavailable, oh no!", e);
available = false;
}
- Bu hiç de iyi (ben ne istiyorum?)
- Bir şekilde bağlantısı var mı?
- Bu istek bir ALMAK sanırım. Bir şekilde yerine KAFA göndermek için var mı?
CEVAP
Bu hiç de iyi (ben ne istiyorum?)
Bunu yapabilirsiniz. Başka bir uygun şekilde java.net.Socket
kullanıyor.
Socket socket = null;
boolean reachable = false;
try {
socket = new Socket(hostnameOrIP, 80);
reachable = true;
} finally {
if (socket != null) try { socket.close(); } catch(IOException e) {}
}
Ayrıca InetAddress#isReachable()
var:
boolean reachable = InetAddress.getByName(hostname).isReachable();
Bu ancak açıkça port 80 test yok. Yanlış negatif bir güvenlik Duvarı diğer bağlantı noktalarını engelleme nedeniyle risk.
Bir şekilde bağlantısı var mı?
Hayır, açıkça gerek yok. Ve bu başlıklar altında ele alınan.
Bu istek bir ALMAK sanırım. Bir şekilde yerine KAFA göndermek için var mı?
HttpURLConnection
URLConnection
elde edilen dökme ve setRequestMethod()
istek yöntemini ayarlamak için kullanabilirsiniz. Ancak, hesaba o zavallı bir Web uygulamasını veya homegrown sunucuları döndürebilir HTTP 405 error aklı (yani mevcut olmayan, tamamlanmamış, izin yok) iken ELDE çalıştığını gayet iyi. Ama bu oldukça nadir görülen durumlardır.
Güncellemebir ana bilgisayara bağlanırken, eğer ana varsa bilgilendirir, eğer içerik varsa. yorumlara göre: Bir Web sunucusu sorunsuz başladı o kadar iyi olur çünkü içerik daha fazla ilgi gibi görünüyor, ama Web server başlangıç sırasında dağıtmak için başarısız oldu. Bu ancak genellikle değil tüm sunucu aşağı gitmek neden olur. HTTP yanıt kodu belirlemek istiyorum.
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
Yanıt durumu ile ilgili daha fazla detay için kodları RFC 2616 section 10 bkz. connect()
Arama Eğer yanıt verileri belirleyici şekilde gerekli değil. Örtülü olarak bağlanır.
İleride, işte yarar bir yöntem lezzet tam bir örnek, aynı zamanda zaman aşımı ile dikkate alarak:
/**
* 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 ping(String url, int timeout) {
// Otherwise an exception may be thrown on invalid SSL certificates:
url = url.replaceFirst("^https", "http");
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;
}
}
Neden char[] şifreler için Dize Java t...
Java kullanarak.net.Ateş ve işlemek iç...
Ne'un yazdırmak için en kolay yol...
İyi bir metin okumak için Java dosya y...
Java bir Toplama filtresi için en iyi ...