OKHttp是一款高效的HTTP客户端,支持连接同一地址的链接共享同一个socket,通过连接池来减小响应延迟,还有透明的GZIP压缩,请求缓存等优势 。今天就记录以下使用Okhttp的心得和体会。
首先先列出我的参考资料:
* 慕课大神hyman视屏资料
* OkHttp官方github地址
* 官方教程2016版
* 诸葛小布博客
* 清屏网
下面正式开始来入门。
配置环境
客户端配置
下载最新的jar包或者通过Maven仓库构建。
<dependency>
<groupId>com.squareup.okhttp3</groupId>
<artifactId>okhttp</artifactId>
<version>3.7.0</version>
</dependency>
或者,Gradle添加如下依赖
···
compile ‘com.squareup.okhttp3:okhttp:3.7.0’
···
最好去官网上查看当前的最新版本。写这篇博客的最新版本为3.7.0。
服务端配置
这里我们采用eclipse搭配Tomcat作为我们的测试服务器,使用structs2的框架以节省代码的编写。具体的配置参考这篇博客。
开始使用
get请求
okHttp的是非常非常简单的,如果我们要发送一个get请求,四步就可以解决了。
- 构建一个
OkHttpClient
,简单的示例代码如下
OkHttpClient client=new OkHttpClient();
- 构建一个
Request
,简单的示例代码如下
Request request = new Request.Builder().url("http://baidu.com") .build();
- 获得
Call
对象,简单的实例代码如下:
okhttp3.Call call = okHttpClient.newCall(request);
- 执行get请求,两种执行方式,同步和异步执行
//同步执行
call.execute();
//异步执行
call.enqueue(new Callback() {
@Override
public void onFailure(okhttp3.Call call, IOException e) {
//发生错误时执行的回调
}
@Override
public void onResponse(okhttp3.Call call, Response response) throws IOException {
//正确执行,获取返回数据的回调
}
});
一个简单的异步Get请求,我们完全就可以这么写。
OkHttpClient client=new OkHttpClient();
Request request = new Request.Builder().url("http://baidu.com").build();
client.newCall(request).enqueue(new Callback() {
@Override
public void onFailure(Request request, IOException e) {
}
@Override
public void onResponse(Response response) throws IOException {
}
});
上面我们还是用了用git访问了baidu的首页,现在我们实现用get请求我们搭建的测试服务器。
在eclipse中新建一个UserAction
类,继承自ActionSupport
,添加一个方法,login()
用来模拟登录过程。在UserAction中添加username和Passwd属性。
整个UserAction的代码如下:
public class UserAction extends ActionSupport{
private static final long serialVersionUID = 1L;
private String username;
private String passwd;
public String login() throws IOException{
System.out.println(" ---:"+username+" "+pas