一种典型的方法是对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
需要注意的事情,可以有多个路线,如果第一个失败,可以尝试另一个。