从OkHttp Response获取原始请求

时间:2017-01-17 01:32:38

标签: java retrofit retrofit2 okhttp okhttp3

我有一个OkHttp 3响应,但我需要为此响应做出的原始请求。

我也在使用Retrofit 2,所以我在回调中有Retrofit的呼叫和响应:

@Override public void onResponse(Call<R> call, Response<R> response) {
  okhttp3.Response raw = response.raw();
}

如何获取由我的应用程序创建的原始okhttp3.Request?

1 个答案:

答案 0 :(得分:0)

请注意,Response.request()是“发起此HTTP响应的线路级请求”。它不一定是原始请求。

以下内容将备份至第一个响应并获取其请求:

static Request originalRequest(okhttp3.Response response) {
  while (true) {
    okhttp3.Response prior = response.priorResponse();
    if (prior == null) {
      break;
    }
    response = prior;
  }
  return response.request();
}

但是,请注意,您在应用程序层创建的请求可能已在添加的Interceptor中重新创建,并且您不一定知道该更改。但是,上述内容适用于大多数用例。