OkHttp初探:如何使用OkHttp进行Get或Post请求?Kotlin版本。
Posted pumpkin的玄学
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了OkHttp初探:如何使用OkHttp进行Get或Post请求?Kotlin版本。相关的知识,希望对你有一定的参考价值。
前言
OkHttp 是一个高效的 HTTP 客户端:
以下引用官网介绍
HTTP/2 support allows all requests to the same host to share a socket.
Connection pooling reduces request latency (if HTTP/2 isn’t available).
Transparent GZIP shrinks download sizes.
Response caching avoids the network completely for repeat requests.
HTTP/2 支持允许对同一主机的所有请求共享一个套接字。
连接池减少了请求延迟(如果 HTTP/2 不可用)。
透明 GZIP 缩小下载大小。
响应缓存完全避免网络重复请求。
本博客引用的okhttp版本:com.squareup.okhttp3:okhttp:4.9.0
基础使用
GET请求
下面代码将请求博主GitHub账户公开信息,并且打印。🙆♀️
simpleGetUse("https://api.github.com/users/zhangnangua")
fun simpleGetUse(url: String)
//创建OkHttpClient
val okHttpClient = OkHttpClient()
//构建request
val requestBuilder = Request.Builder().url(url)
//调用newCall 返回call对象,此后调用enqueue进行异步请求
okHttpClient.newCall(requestBuilder.build()).enqueue(object : Callback
override fun onFailure(call: Call, e: IOException)
log("go failure $e.message")
override fun onResponse(call: Call, response: Response)
val msg = if (response.isSuccessful)
simpleDealData(response)
else
"failure $response.message"
log(msg)
)
//该函数用于简单处理返回的信息,这里放一次,下面就不放了。
private fun simpleDealData(response: Response): String = StringBuilder().apply
append("\\n\\t")
append("header")
append("\\n\\t")
append(response.headers.joinToString("\\n\\t"))
append("\\n\\t")
append("body")
append("\\n\\t")
append("responseCode: $response.code")
append("\\n\\t")
append(
"content: $
(response.body?.string() ?: "").let s: String ->
//对获取到的数据 简单做一下格式化
s.split(",").joinToString("\\n\\t")
"
)
.toString()
结果。😎
...
(X-RateLimit-Resource, core)
(X-RateLimit-Used, 1)
(Accept-Ranges, bytes)
(X-GitHub-Request-Id, 3781:8EFC:1754277:1870E61:61C85330)
body
responseCode: 200
content: "login":"zhangnangua"
"name":"pumpkin"
"bio":"pumpkin偶尔相信玄学🎈🎈🎈"
...
如果要进行get请求,只需要三步。👀
- 创建OkHttpClient
- 创建request 传入url
- 调用OkHttpClient 的newCall()返回call对象,此后调用enqueue进行异步请求,当然也可以使用execute进行同步请求,博主这里就不进行测试了。
POST请求
post传递会存在两种格式,表格和JSON形式,代码在下面放出来。
另:博主没有搭建接口,就不放测试结果了,大家可以自行复制代码测试。🤦♀️
post 表格格式
fun simplePostUseFrom(url: String, params: Map<String, String>? = null)
//创建 formBody
val formBody = FormBody.Builder()
.also builder ->
params?.forEach (name, value) ->
//参数需要 add 进入FormBody.Builder
builder.add(name, value)
.build()
val okHttpClient = OkHttpClient()
val request = Request.Builder()
.url(url)
.post(formBody) //注意:此时formBody以post的形式传入
.build()
okHttpClient.newCall(request).enqueue(object : Callback
override fun onFailure(call: Call, e: IOException)
log("go failure $e.message")
override fun onResponse(call: Call, response: Response)
val msg = if (response.isSuccessful)
simpleDealData(response)
else
"failure code:$response.code message:$response.message"
log(msg)
)
注意:👀
- 需要新增一个FromBody对象,参数保存在FromBody中
- 将FromBody以post的形式传递到Request中
- 其他的和get保持一致即可
post json格式
fun simplePostUseJson(url: String, jsonStr: String? = null)
val requestBody = jsonStr?.let
//创建requestBody 以json的形式
val contentType: MediaType = "application/json; charset=utf-8".toMediaType()
jsonStr.toRequestBody(contentType)
?: run
//如果参数为null直接返回null
FormBody.Builder().build()
val okHttpClient = OkHttpClient.build()
val request = Request.Builder()
.url(url)
.post(requestBody) //以post的形似 添加requestBody
.build()
okHttpClient.newCall(request).enqueue(object : Callback
override fun onFailure(call: Call, e: IOException)
log("go failure $e.message")
override fun onResponse(call: Call, response: Response)
val msg = if (response.isSuccessful)
simpleDealData(response)
else
"failure code:$response.code message:$response.message"
log(msg)
)
注意:👀
- RequestBody对象创建方式和表格的不一样,其他的一样即可
后面会陆续推出OkHttp高阶使用,以及OkHttp源码分析博客。觉得不错关注博主哈~😎
创作不易,如有帮助一键三连咯🙆♀️。
以上是关于OkHttp初探:如何使用OkHttp进行Get或Post请求?Kotlin版本。的主要内容,如果未能解决你的问题,请参考以下文章
如何指定 Get-Request 编码(Retrofit + OkHttp)
[技术博客]OKhttp3使用get,post,delete,patch四种请求
[技术博客]OKhttp3使用get,post,delete,patch四种请求