我可以看到每当我进行一次web svc调用时,我都会在日志中得到响应。但我发现在我的代码中实际访问该信息很困难。例如,我如何找到我可以从以下日志中看到的服务器请求时间和响应时间。
HTTP/1.1 200 OK
Connection: keep-alive
Content-Type: application/json;charset=UTF-8
Date: Tue, 21 Oct 2014 12:35:26 GMT
OkHttp-Received-Millis: 1413894922514
OkHttp-Response-Source: NETWORK 200
OkHttp-Selected-Protocol: http/1.1
OkHttp-Sent-Millis: 1413894921354
Server: Apache-Coyote/1.1
transfer-encoding: chunked
答案 0 :(得分:3)
In Retrofit< 2.0,使用RestAdapter.setProfiler()获取请求的指标。
警告 - this will been removed in Retrofit 2.0并将被广义的拦截系统取代。
例如:
new RestAdapter.Builder()
.setEndpoint("http://www.google.com")
.setProfiler(new Profiler() {
@Override
public Object beforeCall() {
return null;
}
@Override
public void afterCall(RequestInformation requestInfo, long elapsedTime, int statusCode, Object beforeCallData) {
Log.d("Retrofit Profiler", String.format("HTTP %d %s %s (%dms)",
statusCode, requestInfo.getMethod(), requestInfo.getRelativePath(), elapsedTime));
}
})
.create(MyService.class);
以下是一些示例输出:
D/Retrofit Profiler﹕ HTTP 200 GET /users/me (200ms)
答案 1 :(得分:2)
在您的回调中,您可以访问具有getHeaders()
方法的Response
对象,为您提供一堆Headers
。
正如您所看到的,Header
只是一个名称 - 值对,所以我认为处理它们不会有任何问题。
答案 2 :(得分:2)
我正在使用的库和版本:
Retrofit
版本:2.1.0
okhttp
版本:3.3.1
logging-interceptor
版本:3.3.1
此方法仅在
onResponse()
中有效。
如果调试onResponse()
,将在sentRequestAtMillis
部分看到receivedResponseAtMillis
和rawResponse
,如下图所示。
这些参数分别保存发出请求和接收响应的时间(以毫秒为单位)。
以下示例说明了如何在收到响应后以编程方式获取这些参数中的值。
retrofitRequest.enqueue(new Callback<ResponseBody>() {
@Override
public void onResponse(Call<ResponseBody> call, Response<ResponseBody>
// time when the request was made to server, which you get from ```sentRequestAtMillis```
long requestTime = response.raw().sentRequestAtMillis();
// time when the response was received, which you get from ```receivedResponseAtMillis```
long responseTime = response.raw().receivedResponseAtMillis();
//time taken to receive the response after the request was sent
long apiTime = responseTime - requestTime;
}
@Override public void onFailure(Call<ResponseBody> call, Throwable t) {
}
});
请注意,对于可能发生的任何异常,您可能需要处理代码。