okhttp3学习与使用

okhttp3学习与使用

介绍

HTTP是现代应用常用的一种交换数据和媒体的网络方式,高效地使用HTTP能让资源加载更快,节省带宽,OkHttp是一个高效且十分火热的HTTP客户端。

简单使用

在postman里测试好请求后,直接可以选择复制,新版的postman语法就是okhttp3(老版的是okhttp2)
在这里插入图片描述

功能

OkHttpClient类: OkHttp客户端类,用来构建请求发起类Call,设置超时,设置缓存,设置拦截器等

OkHttpClient,是OkHttp的客户端类,该类使用的是构建者模式,所以通常情况下,我们使用new OkHttpClient.Builder()…build()方式来创建OkHttpClient的实例,OkHttpClient的属性以及相关方法,大部分体现在OkHttpClient.Builde中,所以我们学习OkHttpClient,就先学习OkHttpClient.Builder构建者,为了方便文章阅读,我们只挑选重点需要关注的代码进行分析。

//跳过HTTPS验证
OkHttpClient.Builder OBuilder = new OkHttpClient().newBuilder()
		.connectTimeout(10000L, TimeUnit.SECONDS)  // 最大连接时间
		.readTimeout(10000L, TimeUnit.SECONDS)     // 最大读取时间
		.writeTimeout(10000L, TimeUnit.SECONDS);   // 最大写入时间
if (targetUrl.startsWith("https")) {
	// 添加SSL证书信任     【SSLSocketClient】
	builder = builder.sslSocketFactory(SSLSocketClient.getSSLSocketFactory(), SSLSocketClient.getX509TrustManager());
}
OkHttpClient client = builder.build();

Request类: OkHttp请求包装类,用来封装网络请求信息及请求体。
比如请求方式(GET、POST、DELETE、PUT等),url,headers,请求参数等,服务器端最终接受并解析的请求消息,就是由该类提供。OkHttpClient获取Call对象时,需要传入Request作为参数;
RequestBody Request中,当请求需要传入请求体,比如向服务器端发送表单,发送json数据,上传图片,提交数据流等,就需要用到RequestBody(请求体)了
Headers 作为Http请求最重要的两个部分。Headers使用的也是构建者模式,所以Headers是完全可以通过Headers.Builder来创建,添加请求头部信息的。既然他叫做Headers,那他应该有一个专门存储头部信息的容器,用来存储我们常见的诸如:Content-Type、Cookie、Accept等键值对

targetUrl = "https://XXX" + uri;
// POST
MediaType mediaType = MediaType.parse("application/json");
RequestBody body = RequestBody.create(mediaType, data);
Request.Builder rBudlder= new Request.Builder().url(targetUrl).post(body);
// GET
String urlParameter = request.getQueryString();
Request.Builder rBudlder= new Request.Builder().url(targetUrl + "?" + urlParameter).method("GET", null);
// 其他
MediaType mediaType = MediaType.parse("application/json");
RequestBody body = RequestBody.create(mediaType, data);
Request.Builder rBudlder= new Request.Builder().url(targetUrl).method(request.getMethod(), body);

//Header
Map<String, String> headers = new HashMap<String, String>();
Enumeration headerNames = request.getHeaderNames();
while (headerNames.hasMoreElements()) {
	String key = (String) headerNames.nextElement();
	String value = request.getHeader(key);
	headers.put(key, value);
	rBudlder = method.addHeader(key, value);
}	
// 设置来源
rBudlder.addHeader("Origin", "https://XXX");
rBudlder.addHeader("Referer", "https://XXX/XX");	

Request req = rBudlder.build();

Call
每次发起请求的时候,都是通过Call对象调用他的同步请求execute()方法或者异步请求enqueue()方法,发起了请求。我们可以把Call当成OkHttp提供给我们的一个面对开发者的网络请求发起者,通过OkHttpClient对象和Request对象,创建了Call,然后由Call对象发出同步或者异步请求
Response Response与Request的结构非常相似,也使用了构建者模式,拿到请求结果,意味着任务完成。

// 代码衔接上面
Response resp = client.newCall(req).execute();
String res = resp.body().string();
System.out.println("返回数据:" + res);

参考: OkHttp3.0(二)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值