[英]Remote server availability check using OkHttp java
我正在寻找一些关于如何使用 OkHttp3 在 Java 中通过 Http/2 检查服务器可用性的示例。 找不到任何示例。
我正在寻找提供以下信息的来源
OkHttp3 有更好的替代品吗?
高度赞赏这方面的任何投入。
要检查服务器可用性,您需要首先建立到它的连接。
此连接还应该包含一个有效请求,以便您可以检查从服务器收到的答案,并确保您的请求到达它并且在此过程中没有被阻止或重定向。
要知道什么样的请求是有效的,以及它是否需要凭据,您需要确切地知道您正在测试的特定服务器期望什么。
由服务器决定您是否需要任何凭据,以及总体而言,您需要发送给它以获得良好响应的内容。
okhttp 被认为是与 http 服务器通信的好库,但您可能还想在进行测试的机器上检查互联网连接的有效性,以确保如果连接失败是由于服务器端的问题而不是客户端。
okhttp 没有特定的实用程序来执行此操作,但是,根据您使用的平台,有两种可能的方法:
使用平台特定的 API(如 Android 上的NetworkManager
)检查设备是否有互联网连接。
使用 okhttp 向可用性非常高的服务器发出请求,例如 google.com,看看是否可以访问它。
这是一个带有示例代码的链接,用于使用 okhttp 发出 HTTP 请求: https://www.vogella.com/tutorials/JavaLibrary-OkHttp/article.ZFC35FDC70D5FC69D7A533A822C
他们甚至展示了一种提供凭据的可能方式,但同样 - 这取决于您尝试测试的服务器!
一种典型的方法是执行对https://host.com/robots.txt的请求,甚至可能是头部请求。
说
fun main() {
val client = OkHttpClient.Builder()
.eventListener(object : EventListener() {
override fun connectStart(call: Call, inetSocketAddress: InetSocketAddress, proxy: Proxy) {
println("connectStart $inetSocketAddress $proxy")
}
override fun secureConnectStart(call: Call) {
println("secureConnectStart")
}
override fun secureConnectEnd(call: Call, handshake: Handshake?) {
println("secureConnectEnd ${handshake?.cipherSuite}")
handshake?.peerCertificates?.forEach {
println((it as X509Certificate).subjectDN)
}
}
override fun connectEnd(call: Call, inetSocketAddress: InetSocketAddress, proxy: Proxy, protocol: Protocol?) {
println("connectEnd")
}
override fun connectFailed(
call: Call,
inetSocketAddress: InetSocketAddress,
proxy: Proxy,
protocol: Protocol?,
ioe: IOException
) {
println("connectFailed $ioe")
}
})
.build()
val request = Request.Builder()
.url("https://github.com/robots.txt")
.head()
.build()
client.newCall(request).execute().use { response ->
if (!response.isSuccessful) throw IOException("Unexpected code $response")
}
}
哪个输出
connectStart github.com/140.82.121.3:443 DIRECT
secureConnectStart
secureConnectEnd TLS_AES_128_GCM_SHA256
CN=github.com, O="GitHub, Inc.", L=San Francisco, ST=California, C=US
CN=DigiCert High Assurance TLS Hybrid ECC SHA256 2020 CA1, O="DigiCert, Inc.", C=US
CN=DigiCert High Assurance EV Root CA, OU=www.digicert.com, O=DigiCert Inc, C=US
connectEnd
需要注意的是,可以有多个路线,如果第一个失败,可以尝试另一个。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.