override fun intercept(@NonNull chain: Interceptor.Chain): Response {
val newRequest = addParams(chain.request())
val builder = addHeadParams(newRequest)
// val body = getRequestBody(newRequest.body)
// Log.d("errTag", "body:$body")
val build = builder.build()
Log.d("errTag", "url:" + build.url)
val proceed = chain.proceed(build)
Log.d("errTag", "code:" + proceed.code)
return proceed
}
private fun getRequestBody(requestBody: RequestBody?): String? {
var body: String? = null
if (requestBody != null) {
val buffer = Buffer()
requestBody.writeTo(buffer)
var charset: Charset? = utf8
val contentType = requestBody.contentType()
if (contentType != null) {
charset = contentType.charset(utf8)
}
if (charset != null)
body = buffer.readString(charset)
}
return body
}
//拿到数据重新组装
private fun addParams(request: Request): Request {
val method = request.method
Log.d("errTag", "method:$method")
val oldUrl = getHttpUrlNew(request)
val builder = oldUrl.newBuilder()
val body = request.body
val buffer = Buffer()
//method == "POST" && body != null && body is FormBody
return if (method == "POST" && body != null ) {
val bodyBuilder = FormBody.Builder()
var daa=bodyBuilder.build().writeTo(buffer);
val requestbuffer = Buffer()
var data=body.writeTo(requestbuffer)
Log.d("errTag", "body:$requestbuffer")
var charset = Charset.forName("UTF-8")
val contentType = body.contentType()
if (contentType != null) {
charset = contentType.charset(charset)
}
var json = requestbuffer.readString(charset)
val requestMap = mutableMapOf<Any?, Any?>()
Log.d("errTag", "body:$json")
val infoMap: Map<*, *> =
Gson().fromJson(json, object : TypeToken<Map<String?, String?>?>() {}.type)
// for ((key, value) in infoMap) {
// requestMap[key] = value
// }
// val stringBuilder = StringBuilder()
// for (entry in infoMap) {
// stringBuilder.append(entry)
// stringBuilder.append("&")
// }
var postUrl="";
val builder = FormBody.Builder()
builder.add("ContentType","application/json");
builder.add("url",request.url.toString());
builder.add("Param", json);
//builder.add("Param", URLEncoder.encode(json, "UTF-8"));
request.newBuilder().url(postUrl).post(builder.build()).build()
}else {
builder.addEncodedQueryParameter("appname", "") //app名称
builder.addEncodedQueryParameter("device", "AND") ////设备号 IOS 苹果 AND 安卓 Web 网页
var versionCode=SystemInfoUtil.getAppVersionCode();
builder.addEncodedQueryParameter("Version", ""+versionCode) //版本号 纯数字
builder.addEncodedQueryParameter("lag", "en") //语言 en英文 zh 中文
if (null != Util.getMemberInfo() && null!=Util.getMemberInfo().mappingUserId) {
builder.addEncodedQueryParameter("userId", Util.getMemberInfo().mappingUserId.toString())
builder.addEncodedQueryParameter("operator_id",Util.getMemberInfo().mappingUserId.toString()) //
builder.addEncodedQueryParameter("memberid", Util.getMemberInfo().mappingUserId.toString())
builder.addEncodedQueryParameter("token", Util.getMemberInfo().chineseToken.toString())
}else{
builder.addEncodedQueryParameter("userId", "")
builder.addEncodedQueryParameter("operator_id", "")
builder.addEncodedQueryParameter("memberid", "")
}
builder.addEncodedQueryParameter("mbname", SystemInfoUtil.getDeviceBrand()) //设备名称
var url="";
try {
url ="url?url="+URLEncoder.encode(builder.toString(), "UTF-8")
builder.setEncodedPathSegment(0,url);
} catch (e: UnsupportedEncodingException) {
e.printStackTrace()
}
// builder.addEncodedQueryParameter("appname",appName)
// builder.addEncodedQueryParameter("Token",Util.getMemberInfo().getChineseToken())
// builder.addEncodedQueryParameter("device",DEVICE)
// builder.addEncodedQueryParameter("version", BuildConfig.VERSION_CODE.toString())
// builder.addEncodedQueryParameter("operator_id", USERID.toString())
//// builder.addEncodedQueryParameter("mbname", Util.getPhoneModel())
// builder.addEncodedQueryParameter("ptime", System.currentTimeMillis().toString())
builder.build().toUri();
request.newBuilder()
.url(url)
.build()
}
}
private fun getHttpUrlNew(request: Request): HttpUrl {
val oldUrl: HttpUrl = request.url
val requestBuilder: Request.Builder = request.newBuilder()
val headers: List<String> = request.headers(Constants.HEADER)
if (!headers.isNullOrEmpty()) {
requestBuilder.removeHeader(Constants.HEADER)
when (headers[0]) {
}
}
return oldUrl
}
// private fun modifyBaseUrl(oldUrl: HttpUrl, url: String): HttpUrl {
// val toUrl = oldUrl.toString()
// Log.d("httpTag", "toUrl:$toUrl")
// if (toUrl.contains(Api.BASE_URL)) {
// val replace = toUrl.replace(Api.BASE_URL, url)
// Log.d("httpTag", "replace:$replace")
// return replace.toHttpUrl()
// }
// return oldUrl
// }
private fun addHeadParams(request: Request): Request.Builder {
val builder = request.newBuilder().url(request.url)
builder.addHeader("Authorization",Util.getCardToken())
val token = TOAKEN
Log.d("errTag", "token:$token")
return builder
}
Android 对拦截请求body重新组装记录
最新推荐文章于 2026-01-21 02:02:56 发布
本文介绍了一个使用OkHttp实现的拦截器案例,该拦截器能够根据请求类型进行参数的添加和修改,并对请求和响应进行日志记录。文章详细展示了如何处理POST请求中的JSON参数,同时为GET请求添加了必要的查询参数。

4324

被折叠的 条评论
为什么被折叠?



