在项目开发中,需要和后台定义一些规则,比如一些请求头信息,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拦截器中查看。