public class LoggerInterceptor implements Interceptor {
privateBooleanencrypt=false;//是否加密
publicLoggerInterceptorencrypt(Boolean encrypt) {
this.encrypt= encrypt;
return this;
}
@Override
publicResponseintercept(Chain chain)throwsIOException {
//請(qǐng)求
Request request = chain.request();
RequestBody requestBody = request.body();
Connection connection = chain.connection();
Protocol protocol = connection !=null? connection.protocol() : Protocol.HTTP_1_1;
String requestStartMessage ="--> "+ request.method() +' '+ request.url() +' '+ protocol;
if(requestBody !=null) {
Buffer buffer =newBuffer();
requestBody.writeTo(buffer);
String sBody = buffer.readString(Charset.forName("UTF-8"));
requestStartMessage +=" "+ sBody +" ";
requestStartMessage +=" ("+ requestBody.contentLength() +"-byte body)";
}
LogUtil.net("request:? "+ requestStartMessage);
request.header("Content-Type:application/x-www-form-urlencoded; charset=utf-8");
//重新包裝
Request newRequest = request;
if(requestBody !=null&& requestBodyinstanceofFormBody) {
newRequest = formatRequest(request);
}
//? ? ? ? /*
//? ? ? ? *解決okhttp報(bào)java.lang.IllegalStateException: closed,java.lang.IllegalStateException: closed,
//? ? ? ? *原因?yàn)镺kHttp請(qǐng)求回調(diào)中response.body().string()只能有效調(diào)用一次
//? ? ? ? * */
//響應(yīng)
Response response = chain.proceed(newRequest);
//方法一
BufferedSource source = response.body().source();
source.request(Long.MAX_VALUE);// Buffer the entire body.
Buffer buffer = source.buffer();
String responseContent = buffer.clone().readString(Charset.forName("UTF-8"));
LogUtil.net("response-clone: "+ responseContent);
returnresponse;
//方法二
//? ? ? ? MediaType mediaType = response.body().contentType();
//? ? ? ? responseContent = response.body().string();
//? ? ? ? LogUtil.d(TAG, "response-newBuilder: " + responseContent);
//? ? ? ? return response.newBuilder()
//? ? ? ? ? ? ? ? .body(ResponseBody.create(mediaType, responseContent))
//? ? ? ? ? ? ? ? .build();
}
/**
*重新包裝request
* json &加密
*
*@paramrequest
*@return
*/
privateRequestformatRequest(Request request) {
FormBody formBody = (FormBody) request.body();
//LogUtil.net("formBody-size: " + formBody.size());
//手動(dòng)格式化字符串
JSONObject json =newJSONObject();
try{
for(inti =0;i < formBody.size();i++) {
json.put(formBody.name(i),formBody.value(i));
}
}catch(JSONException e) {
e.printStackTrace();
}
String jsonValue = json.toString();
//LogUtil.net("new request formBody: " + jsonValue);
if(encrypt) {
try{
jsonValue = EncryptUtil.encrypt(jsonValue.getBytes("utf-8"));
}catch(Exception e) {
e.printStackTrace();
}
}
RequestBody newFormBody =newFormBody.Builder()
.add("json",jsonValue)
.build();
Request newRequest =newRequest.Builder()
.url(request.url())
.headers(request.headers())
.post(newFormBody)
.tag(request.tag())
.build();
returnnewRequest;
}
}