强烈推荐使用最新版,下面是升级到最新版的一些指导。
** 升级指导**
前面我刚刚也说了下,新版和老板不完全兼容,所以升级到新版可能你的项目会报错,可以按照下面列的几个点参考修正。
HttpClient.INSTANCE
为HttpClient.Instance
HttpClient.formDataPost()
更名为HttpClient.post()
方法CommonPostRequest
更名为PostRequest
formParam
更名为param
setCertificates
更名为https
HttpResponse.getRawResponse()
的改为HttpResponse.custom()
HttpResponse.transferToFile()
的改为HttpResponse.asFile()
项目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
<dependency>
<groupId>com.mzlion</groupId>
<artifactId>easy-okhttp</artifactId>
<version>1.0.4-beta</version>
</dependency>
Gradle
compile 'com.mzlion:easy-okhttp:1.0.4-beta'
下载
easy-okhttp.properties
配置文件,该配置文件包含如下配置信息
easy-okhttp.properties
,框架优先加载项目中的配置文件HttpClient.INSTANCE.setConnectionTimeout(int)
HttpClient.INSTANCE.setReadTimeout(int)
HttpClient.INSTANCE.setCertificates(?)
HttpClient.INSTANCE.setDefaultHeader(String,String)
String responseData = HttpClient
.get("http://localhost:8080/okhttp-server-test/userInfo/pageSelect") // 请求方式和请求url
.execute()
.asString();
String responseData = HttpClient
.get("http://localhost:8080/okhttp-server-test/userInfo/pageSelect") // 请求方式和请求url
.queryString("username","mzlion") //设置请求参数
.execute()
.asString();
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<String,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();
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类型,基本上不用自己创建了
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<String,String>`
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<Person> personList = httpResponse.asBean(new TypeToken<List<Person>>(){});
//重载方法
//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();
信任指定的自签名证书网站 自签名网站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还没完成,完成之后也会上传,方便大家直接把项目clone下来即可运行。
Вы можете оставить комментарий после Вход в систему
Неприемлемый контент может быть отображен здесь и не будет показан на странице. Вы можете проверить и изменить его с помощью соответствующей функции редактирования.
Если вы подтверждаете, что содержание не содержит непристойной лексики/перенаправления на рекламу/насилия/вульгарной порнографии/нарушений/пиратства/ложного/незначительного или незаконного контента, связанного с национальными законами и предписаниями, вы можете нажать «Отправить» для подачи апелляции, и мы обработаем ее как можно скорее.
Опубликовать ( 0 )