okhttp3测试框架_easy-okhttp: 这是一个对okhttp3进行封装的工具,提供了更为便捷的方法调用。目的是为了替换难用的apache HttpClient。...
easy-okhttp
簡介
項目easy-okhttp是對okhttp網(wǎng)絡框架(https://github.com/square/okhttp)上層封裝,
支持文件上傳和下載,表單(含文件)提交,鏈式調用,支持HTTPS和自定義簽名證書等特性。
okhttp網(wǎng)絡框架的流行始于Android,但是在Java后端仍然是Apache HttpClient網(wǎng)絡框架,這個框架的缺點在于設計非常的復雜,而且Jar的比較大。
故此我封裝okhttp主要目的希望棄用Apache HttpClient;其次也是為了幫助okhttp的推廣^_^
PS:本人Java技術水平中等,還在不斷的學習中,所以項目難免存在bug,所以當出現(xiàn)問題的時候,請大家把問題共享出來,我會盡快處理,抑或我們一起討論也可以的。
共享自己碰到的問題,方便你我他,也使得這個項目就會更加的富有生命力,謝謝!
參考與依賴
依賴關系說明
okhttp,本項目核心所在,底層依賴了okio框架,框架的大小在500Kb之內
mzlion-core,項目依賴的工具類,底層依賴了slf4j-api和gson兩個框架,框架的大小在400Kb之內
聯(lián)系方式
用法
框架引入
項目基于Gradle管理,并且項目要已經(jīng)上傳到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的大文本數(shù)據(jù)、二進制文件上傳,即通過Http Body提交
普通的表單提交
帶有文件表單提交
表單提交支持參數(shù)名重復,在后臺接收到的是數(shù)組或集合
支持session保持
支持鏈式調用
支持可信任證書和自定義簽名證書的https訪問
更多特性增加中
全局配置(可選)
框架會自動讀取classpath下的easy-okhttp.properties配置文件,該配置文件包含如下配置信息
okhttp.connectionTimeout 連接超時時間,默認設置10秒
okhttp.readTimeout 內容讀取超時時間,默認是30秒
如果需要更改這些默認配置,有兩種方式
覆蓋框架提供的配置easy-okhttp.properties,框架優(yōu)先加載項目中的配置文件
通過代碼設置全局配置,下面會講解到
通過代碼也可以設置全局參數(shù),該配置操作只需要操作一次,因而可以放在項目啟動時配置。
設置連接超時時間 HttpClient.INSTANCE.setConnectionTimeout(int)
設置讀取超時時間 HttpClient.INSTANCE.setReadTimeout(int)
設置自定義簽名證書 HttpClient.INSTANCE.setCertificates(?)
設置默認Header HttpClient.INSTANCE.setDefaultHeader(String,String)
示例
1.普通的GET請求無參數(shù)
String responseData = HttpClient
.get("http://localhost:8080/okhttp-server-test/userInfo/pageSelect") // 請求方式和請求url
.execute()
.asString();
2.普通的GET請求帶參數(shù)
String responseData = HttpClient
.get("http://localhost:8080/okhttp-server-test/userInfo/pageSelect") // 請求方式和請求url
.queryString("username","mzlion") //設置請求參數(shù)
.execute()
.asString();
3.POST普通表單提交
String responseData = HttpClient
.post("http://localhost:8080/okhttp-server-test/userInfo/create") // 請求方式和請求url
.formParam("username","mzlion") // 表單參數(shù)
.formParam("userPwd", "123") // 表單參數(shù)
//queryString("queryTime","20160530") //url參數(shù)
.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類型,基本上不用自己創(chuàng)建了
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,當框架提供的功能無法滿足時候,可以調用該屬性處理。
當請求執(zhí)行完成之后一定需要判斷請求成功還是失敗。
HttpResponse類提供對請求服務端的結果轉換方法
默認的請求響應結果并不能直接參與編程,一般都需要經(jīng)過一些轉換,所以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);
高級配置
為單個請求設置超時
當我們需要對單個請求設置連接超時時間、讀取超時時間等屬性時,可以在執(zhí)行execute方法之前調用。主要有如下幾個方法可以進行調用。
connectionTimeout(int) 連接超時時間
readTimeout(int) 讀取超時時間
certificates([]) 自定義簽名證書設置
以上這些方法的調用會使得框架創(chuàng)建一個新的OkHttpClient對象。下面給出一個snippet加以說明。
//字符串轉換器
String responseData = HttpClient.get() //設置請求方式
.url("http://localhost:8080/okhttp-server-test/userInfo/avatar2") //設置請求地址
.queryString("id","2") //設置請求參數(shù)
.readTimeout(30000) //覆蓋設置,讀取超時時間
.execute() //執(zhí)行
.asString();
自定義簽名網(wǎng)站https訪問
信任指定的自簽名證書網(wǎng)站
自簽名網(wǎng)站htts訪問處理方式非常簡單,首先拿到客戶端的簽名證書,一般通過瀏覽器就可以導出xxx.cer證書了。然后將拿到的證書文件拷貝到自己的項目中,然后按照如下方式調用或設置。
//字符串轉換器
String responseData = HttpClient.get() //設置請求方式
.url("http://localhost:8080/okhttp-server-test/userInfo/avatar2") //設置請求地址
.queryString("id","2") //設置請求參數(shù)
.readTimeout(30000) //覆蓋設置,讀取超時時間
.certificates(this.getClass().getClassLoader().getResourceAsStream("SRCA.cer"))
.execute() //執(zhí)行
.asString();
信任所有網(wǎng)站
該方法不推薦在生產(chǎn)環(huán)境使用,否則https的作用意義就失效了。信任所有網(wǎng)站的https訪問設置非常簡單,HttpClient.INSTANCE.setCertificates()即可。
關于demo
目前Demo還沒完成,完成之后也會上傳,方便大家直接把項目clone下來即可運行。
總結
以上是生活随笔為你收集整理的okhttp3测试框架_easy-okhttp: 这是一个对okhttp3进行封装的工具,提供了更为便捷的方法调用。目的是为了替换难用的apache HttpClient。...的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: gdiplus 水印_Delphi程序的
- 下一篇: pthread 立即停止线程_线程取消(