在项目开发中,需要和后台定义一些规则,比如一些请求头信息,Content-Type,User-Agent。不能使用默认的,那么就得我们自己配置全局的。
基于okhttp4.0以上版本修改步骤:
创建我们自己的MediaType, create已经被废弃
val mediaType= "application/xxxxx-xxxxx".toMediaTypeOrNull()
创建完成后,将我们的requestbody转换成byteString 或者String或者byteArray都可以,在这里强调下如果是转换成string ,Content-Type对应的value会加上utf-8,这里需要注意下。
//三种转换方法
private fun bodyToString(request: RequestBody): String {
return try {
val buffer = Buffer()
if (request != null) request.writeTo(buffer) else return ""
buffer.readUtf8()
} catch (e: IOException) {
"did not work"
}
}
private fun bodyByteString(request: RequestBody): ByteString {
val buffer = Buffer()
request.writeTo(buffer)
return buffer.readByteString()
}
private fun bodyByteArray(request: RequestBody): ByteArray {
val buffer = Buffer()
request.writeTo(buffer)
val readUtf8 = buffer.readUtf8()
return readUtf8.toByteArray()
}
接下来就简单了
// 示例代码
// newFormbodyData 我们自己的body
val newBody= bodyByteString(newFormbodyData).toRequestBody(mediaType)
最后一步就是将得到的请求体放入到我们的request中post方法中
这样我们就完成了content-type的替换,
User-Agent这些信息我们可以直接在request使用addHeader添加即可,这些信息可以在BridgeInterceptor拦截器中查看。