try (Response response = client.newCall(request).execute()) {
assertThat(response.code(), is(200))
// do nothing with the response body
}
但是,当与HTTP1建立连接时,ResponseBody::Close
最后调用http1ExchangeCodec.FixedLengthSource::Close
。
http1ExchangeCodeC.FixedLengthSource::Close
override fun close() {
if (closed) return
if (bytesRemaining != 0L &&
!discard(ExchangeCodec.DISCARD_STREAM_TIMEOUT_MILLIS, MILLISECONDS)) {
connection.noNewExchanges() // Unread bytes remain on the stream.
responseBodyComplete()
}
closed = true
}
然后,discard
方法读取所有响应体源,如下所示。
fun Source.discard(timeout: Int, timeUnit: TimeUnit): Boolean = try {
this.skipAll(timeout, timeUnit)
} catch (_: IOException) {
false
}
@Throws(IOException::class)
fun Source.skipAll(duration: Int, timeUnit: TimeUnit): Boolean {
val nowNs = System.nanoTime()
val originalDurationNs = if (timeout().hasDeadline()) {
timeout().deadlineNanoTime() - nowNs
} else {
Long.MAX_VALUE
}
timeout().deadlineNanoTime(nowNs + minOf(originalDurationNs, timeUnit.toNanos(duration.toLong())))
return try {
val skipBuffer = Buffer()
while (read(skipBuffer, 8192) != -1L) {
skipBuffer.clear()
}
true // Success! The source has been exhausted.
} catch (_: InterruptedIOException) {
false // We ran out of time before exhausting the source.
} finally {
if (originalDurationNs == Long.MAX_VALUE) {
timeout().clearDeadline()
} else {
timeout().deadlineNanoTime(nowNs + originalDurationNs)
}
}
}
java prettyprint-override">try (Response response = client.newCall(request).execute()) {
assertThat(response.code(), is(200))
response.body()
.source()
.timeout()
.deadlineNanoTime(0);
// close without reading remaining bytes
}
为了记录请求和响应,我添加了一个LoggingRequestInterceptor,它实现了ClientHTTPPrequestinterceptor。。。 响应主体是一个流,如果我将其读取到我的拦截器中,TestRestTemplate将无法将其反序列化到我的对象模型中。换句话说,当我调用testRestTemplate时。获取…我将始终获取空对象(即使我看到对象我的响应)。 要解决RestTe
我正在使用reverfit2调用一个微服务,它在PUT方法上返回一个200和一个空的响应体。但是,reverfit 2似乎无法处理这一点,并且在“enqueue”中转到onFailure分支 @override public void onFailure(Call Call,Throwable t){ 以下是日志: 有人知道这是什么原因造成的吗?因为请求被成功地提供了(见上文)。
问题内容: 在Java中,当HTTP结果为404范围时,此代码将引发异常: 就我而言,我碰巧知道内容是404,但无论如何我还是想阅读响应的内容。 (在我的实际情况下,响应代码为403,但是响应的主体说明了拒绝的原因,我希望向用户显示该原因。) 如何访问响应正文? 问题答案: 这是错误报告(关闭,无法修复,不是错误)。 他们的建议是这样编码:
我正在基于Tomcat servlet和NIO创建服务。输入时有大的XML请求(约100 MB),通过HTML POST方法发送。我只想流前8千磅,然后立即发送响应到客户端。 当我尝试发送小请求(内容中只有几行)时,套接字工作正常。 2016-02-01 10:44:52 Http11NioProtocol[DEBUG]套接字:[org.apache.tomcat.util.net.NioEndp
问题内容: 我已经在go中编写了http客户端包装,我需要对其进行彻底的测试。我正在使用包装器中的ioutil.ReadAll阅读响应正文。我在弄清楚如何才能借助httptest强制从响应正文读取失败时遇到了一些麻烦。 我假设我可以像这样设置一个假服务器: 我假设我需要修改ResposeWriter。现在,有什么办法让我修改responseWriter,从而迫使包装器中的ioutil.ReadAl
我有一个使用gRPC的服务器,在反应客户端上,我正在使用grpcwebagent的grpc网络,我一直在尝试将我的客户端连接到服务器,但不断得到错误代码2,消息为:响应关闭,没有标头。其他人遇到过这个问题吗?我目前正在使用grpc-web的不可能-eng实现。