我使用Android推荐的Cronet库来发出HTTP请求,但是我找不到关于如何实现某些特性的信息。例如,我需要为所有HTTP请求设置最大等待时间。换句话说,如果HTTP请求花费的时间超过'X‘秒,那么它应该被视为失败的请求。我如何在Cronet中配置这个?
我的代码:
fun initCronet() { // this is called only once
executor = Executors.newSingleThreadExecutor()
engine = CronetEngine.Builder(context)
.enableHttp2(true)
.build()
}
suspend fun myFunction() {
suspendCoroutine<HttpResponseContainer> {
val callback = CoroutinesNetworkCallback(it)
val url = "http://myhost.com/my-endpoint"
engine.newUrlRequestBuilder(url, callback, executor)
.addHeader("Content-Type", "application/json; charset=UTF-8")
.build().start()
}
}回调看起来大约如下所示:
class CoroutinesNetworkCallback (
private val continuation: Continuation<HttpResponseContainer>,
) : UrlRequest.Callback() {
override fun onRedirectReceived(request: UrlRequest, info: UrlResponseInfo, newUrl: String) {
request.cancel()
}
override fun onResponseStarted(request: UrlRequest, info: UrlResponseInfo) {
// init buffer
}
override fun onReadCompleted(request: UrlRequest, info: UrlResponseInfo, buffer: ByteBuffer) {
// retrieve response
}
override fun onFailed(request: UrlRequest, info: UrlResponseInfo, error: CronetException) {
continuation.resumeWithException(RuntimeException("request failed"))
}
override fun onSucceeded(request: UrlRequest, info: UrlResponseInfo) {
continuation.resume(HttpResponseContainer(httpStatusCode))
}
}发布于 2022-09-24 09:52:07
您可以在构建器中添加connectTimeout、writeTimeout和readTimeout
connectTimeout :尝试连接主机地址writeTimeout和readTimeout的最大时间:发送请求和接收响应的最大时间
https://stackoverflow.com/questions/73836145
复制相似问题