easy-okhttp

简介

项目easy-okhttp是对okhttp网络框架(https://github.com/square/okhttp)上层封装,

支持文件上传和下载,表单(含文件)提交,链式调用,支持HTTPS和自定义签名证书等特性。

okhttp网络框架的流行始于Android,但是在Java后端仍然是Apache HttpClient网络框架,这个框架的缺点在于设计非常的复杂,而且Jar的比较大。

故此我封装okhttp主要目的希望弃用Apache HttpClient;其次也是为了帮助okhttp的推广^_^

PS:本人Java技术水平中等,还在不断的学习中,所以项目难免存在bug,所以当出现问题的时候,请大家把问题共享出来,我会尽快处理,抑或我们一起讨论也可以的。

共享自己碰到的问题,方便你我他,也使得这个项目就会更加的富有生命力,谢谢!

参考与依赖

依赖关系说明

okhttp,本项目核心所在,底层依赖了okio框架,框架的大小在500Kb之内

mzlion-core,项目依赖的工具类,底层依赖了slf4j-api和gson两个框架,框架的大小在400Kb之内

联系方式

用法

框架引入

项目基于Gradle管理,并且项目要已经上传到JCenter。

MAVEN

jcenter

bintray jcenter

http://jcenter.bintray.com/

true

com.mzlion

easy-okhttp

1.0.1-beta

Gradle

compile 'com.mzlion:easy-okhttp:1.0.1-beta'

下载

支持功能说明

GET和POST请求

基于POST的大文本数据、二进制文件上传,即通过Http Body提交

普通的表单提交

带有文件表单提交

表单提交支持参数名重复,在后台接收到的是数组或集合

支持session保持

支持链式调用

支持可信任证书和自定义签名证书的https访问

更多特性增加中

全局配置(可选)

框架会自动读取classpath下的easy-okhttp.properties配置文件,该配置文件包含如下配置信息

okhttp.connectionTimeout 连接超时时间,默认设置10秒

okhttp.readTimeout 内容读取超时时间,默认是30秒

如果需要更改这些默认配置,有两种方式

覆盖框架提供的配置easy-okhttp.properties,框架优先加载项目中的配置文件

通过代码设置全局配置,下面会讲解到

通过代码也可以设置全局参数,该配置操作只需要操作一次,因而可以放在项目启动时配置。

设置连接超时时间 HttpClient.INSTANCE.setConnectionTimeout(int)

设置读取超时时间 HttpClient.INSTANCE.setReadTimeout(int)

设置自定义签名证书 HttpClient.INSTANCE.setCertificates(?)

设置默认Header HttpClient.INSTANCE.setDefaultHeader(String,String)

示例

1.普通的GET请求无参数

String responseData = HttpClient

.get("http://localhost:8080/okhttp-server-test/userInfo/pageSelect") // 请求方式和请求url

.execute()

.asString();

2.普通的GET请求带参数

String responseData = HttpClient

.get("http://localhost:8080/okhttp-server-test/userInfo/pageSelect") // 请求方式和请求url

.queryString("username","mzlion") //设置请求参数

.execute()

.asString();

3.POST普通表单提交

String responseData = HttpClient

.post("http://localhost:8080/okhttp-server-test/userInfo/create") // 请求方式和请求url

.formParam("username","mzlion") // 表单参数

.formParam("userPwd", "123") // 表单参数

//queryString("queryTime","20160530") //url参数

.execute()

.asString();

//formParam()重载方法还支持`Map`

4.POST提交String

String responseData = HttpClient

.textBody("http://localhost:8080/okhttp-server-test/userInfo/create") // 请求方式和请求url

.json("{\"username\":\"mzlion\",\"userPwd\":\"123\"}")

// post提交json

//.xml("<?xml version=\"1.0\" encoding=\"utf-8\" ?>")

//post提交xml

//.html("function fun(){}")

//post提交html

//.charset("utf-8")

//设置编码

.execute()

.asString();

5.POST提交二进制文件

String responseData = HttpClient

.binaryBody("http://localhost:8080/okhttp-server-test/userInfo/avatar") // 请求方式和请求url

.stream(this.getClass().getClassLoader().getResourceAsStream("andy-bao.jpg"))

// post提交流

//.file(new File("d:/andy-bao.jpg")) //post提交文件

.contentType(ContentType.IMAGE_JPG)

//设置请求内容类型

.execute()

.asString();

//ContentType内置常见的MIME类型,基本上不用自己创建了

6.POST表单提交含文件上传

String responseData = HttpClient

.formDataPost("http://localhost:8080/okhttp-server-test/userInfo/createWithFile") // 请求方式和请求url

.formParam("userName", "test")

.formParam("userPwd", "123456")

.formParam("nickName", "Test")

.formParam("realName", "测试")

.formParam("hobby", "测试,就爱测试")

.formParam("avatarFile", this.getClass().getClassLoader().getResourceAsStream("andy-bao.jpg"), "andy-bao.jpg")

//.formParam("avatarFile", this.getClass().getClassLoader().getResourceAsStream("andy-bao.jpg"), "andy-bao.jpg")

.execute()

.asString();

//formParam()重载方法还支持`Map`

7.HttpResponse对象介绍

HttpResponse类是对请求服务端的结果封装,包含了3个属性

isSuccess 表示请求是否成功

errorMessage 请求失败时错误消息

rawResponse 原始的Response,当框架提供的功能无法满足时候,可以调用该属性处理。

当请求执行完成之后一定需要判断请求成功还是失败。

HttpResponse类提供对请求服务端的结果转换方法

默认的请求响应结果并不能直接参与编程,一般都需要经过一些转换,所以HttpResponse对象提供了几种常见的转换,下面直接通过示例解释各个方法的作用和应用。

注意:当使用转换方法之前,最好调用方法isSuccess()判断请求响应是否成功,否则直接调用转换方法的话,如果响应失败,则会抛出'HttpClientException'异常

//将响应结果转为字符串输出

String responseData = httpResponse.asString();

//将响应结果转为文件保存

File frc = new File("d:\\web\\save.txt");

httpResponse.asFile(frc);

//json转换器

List personList = httpResponse.asBean(new TypeToken>(){});

//重载方法

//Person person = httpResponse.asBean(Person.class);

//将响应结果转为输出流中

ByteArrayOutputStream baos = new ByteArrayOutputStream();

httpResponse.asStream(baos);

高级配置

为单个请求设置超时

当我们需要对单个请求设置连接超时时间、读取超时时间等属性时,可以在执行execute方法之前调用。主要有如下几个方法可以进行调用。

connectionTimeout(int) 连接超时时间

readTimeout(int) 读取超时时间

certificates([]) 自定义签名证书设置

以上这些方法的调用会使得框架创建一个新的OkHttpClient对象。下面给出一个snippet加以说明。

//字符串转换器

String responseData = HttpClient.get() //设置请求方式

.url("http://localhost:8080/okhttp-server-test/userInfo/avatar2") //设置请求地址

.queryString("id","2") //设置请求参数

.readTimeout(30000) //覆盖设置,读取超时时间

.execute() //执行

.asString();

自定义签名网站https访问

信任指定的自签名证书网站

自签名网站htts访问处理方式非常简单,首先拿到客户端的签名证书,一般通过浏览器就可以导出xxx.cer证书了。然后将拿到的证书文件拷贝到自己的项目中,然后按照如下方式调用或设置。

//字符串转换器

String responseData = HttpClient.get() //设置请求方式

.url("http://localhost:8080/okhttp-server-test/userInfo/avatar2") //设置请求地址

.queryString("id","2") //设置请求参数

.readTimeout(30000) //覆盖设置,读取超时时间

.certificates(this.getClass().getClassLoader().getResourceAsStream("SRCA.cer"))

.execute() //执行

.asString();

信任所有网站

该方法不推荐在生产环境使用,否则https的作用意义就失效了。信任所有网站的https访问设置非常简单,HttpClient.INSTANCE.setCertificates()即可。

关于demo

目前Demo还没完成,完成之后也会上传,方便大家直接把项目clone下来即可运行。

okhttp3测试框架_easy-okhttp: 这是一个对okhttp3进行封装的工具,提供了更为便捷的方法调用。目的是为了替换难用的apache HttpClient。...相关推荐

  1. okhttp3测试框架_OkHttp3系列(二)MockWebServer使用

    OkHttp3是由Square贡献的HTTP客户端框架,主要用在Andorid中,但是由于其易用的API.强大的功能.请求的快速等特点,也被大量采用在后端开发领域.本系列文章讲述OkHttp3的基本使 ...

  2. okhttp3测试框架_Okhttp3的使用详解

    Maxim if you don't go for a walk,you will think this is the world. 简介 HTTP是现代应用常用的一种交换数据和媒体的网络方式,高效地 ...

  3. 为什么有如此多的C++测试框架 - from Google Testing Blog

    Why Are There So Many C++ Testing Frameworks? by Zhanyong Wan (Software Engineer) 最近貌似有很多人正在开发他们自己的C ...

  4. 高效的企业测试–测试框架(5/6)

    本系列文章的这一部分将介绍测试框架以及我在何时以及是否应用它们方面的想法和经验. 关于测试框架的思考 我对大多数测试框架不太满意的原因是,按照我的观点,它们大多增加了一些语法上的便利性和便利性,但本质 ...

  5. 乐玩自动化测试模块_五大测试框架介绍,附带全套黑马自动化测试视频教程(完结)...

    这个框架需要开发数据表和关键字,这些数据表和关键字独立于执行它们的测试自动化工具,并可以用来"驱动"待测应用程序和数据的测试脚本代码,关键宇驱动测试看上去与手工测试用例很类似. 概述 在自动 ...

  6. Android之UiAutomator测试框架源码分析(第三篇:UiDevice功能介绍)

    (注意:本文基于UI Automator测试框架版本为2.2.0) UiDevice类位于androidx.test.uiautomator包中,作为UI Automator测试框架中最重要的类之一, ...

  7. 实现Google测试框架及输出彩色的文字

    1.使用 Google 测试框架 git clone https://gitee.com/maureen-liu/googletest.git cd googletest mkdir mybuild ...

  8. Android 系统(171)---OrmLite数据库框架,Picasso框架,Okio框架,OKHttp框架

    OrmLite数据库框架,Picasso框架,Okio框架,OKHttp框架 OrmLite基础知识 什么是OrmLite框架,在我没用这个框架时,不知道它有多好,用了才知道很方便哦,为了提供开发效率 ...

  9. 软件自动测试框架,软件自动化测试框架的研究和实现

    摘要: 软件自动化测试是软件工程领域的一项重要课题.随着软件工程理论的不断发展,软件自动化测试在理论上也不断达到新的高度.目前最为成熟的软件自动化测试技术是使用自动测试框架来指导自动化测试的实现.迄今 ...

最新文章

  1. 定制SPS实战记录 系列之一
  2. 劳力士格林尼治价格_劳力士行情暴跌后回涨,什么时候才是入手的最佳时机?...
  3. etcd 指定配置文件启动_5步完成 etcd 单机集群部署
  4. Delete Volume 操作 - 每天5分钟玩转 OpenStack(57)
  5. python求均方根误差_python之MSE、MAE、RMSE的使用
  6. css文字换行问题white-space:pre-line或者white-space:pre-wrap,解决word-wrap:break-word解决不了的...
  7. python画蜡烛致敬烈士_「」matplotlib 股票-用python绘制蜡烛线型k线图是用代码还是绘图工具-TOP金融网...
  8. 修改了xml要不要重新起服务器,关于设置:Eclipse每次运行项目时都会修改server.xml(运行-在服务器上运行)...
  9. 我与WCF有个约会之牵手篇-第一个WCF示例程序
  10. Cocos Creator 粒子编辑插件推荐
  11. 条件语句与循环语句:将数字一二三四五六七八九十转化成汉字大写的壹, 贰,叁,肆,伍,陆,柒,捌,玖,拾
  12. QQ空间的汉字转拼音代码
  13. 百度开源呼叫中心系统
  14. P1125 [NOIP2008 提高组] 笨小猴 java
  15. SpringDataJPA之Specification复杂查询
  16. CSDN Markdown 公式编号
  17. TSV文件、CSV文件
  18. 学习UI设计都需要会什么
  19. 自己动手写服务器-1
  20. nginx同一个地址端口代理多个页面

热门文章

  1. ArcGis 10+Oracle发布WFS-T服务,无法更新Feature的解决方法
  2. 2.3.2便捷的电子邮件
  3. 数据远程实时备份容灾方案
  4. 【MM模块】 Goods Receipt 收货 4
  5. ooalv自定义按钮、单击、双击、列编辑切换的事件用法
  6. VOFM例程开发实现定价增强
  7. SAP中过账码or记账码posting code
  8. SAP中差异的一些概念
  9. SUBMIT 的使用方法
  10. java arraylist 源代码_Java中ArrayList源码浅析