# HttpExample
**Repository Path**: liuxing900327/OkHttpExample
## Basic Information
- **Project Name**: HttpExample
- **Description**: Http工具的一些用法和测试
- **Primary Language**: Java
- **License**: GPL-2.0
- **Default Branch**: master
- **Homepage**: None
- **GVP Project**: No
## Statistics
- **Stars**: 1
- **Forks**: 0
- **Created**: 2017-12-03
- **Last Updated**: 2020-12-19
## Categories & Tags
**Categories**: Uncategorized
**Tags**: None
## README
# OkHttp vs Httpclient 配置优化和实践
## 1. 最佳实践的一些准备
> 你应该听了很多次“最佳实践”这个词,它的意思是你应该“正确地做事”,不要走捷径。
毫无疑问,你一定听过那句工程格言:面对“快速”“低廉”“优质”三个选项,你总是只能任选其中两个。这个模型总会困扰我,因为它没考虑正确做事的累计价值。
你第一次正确做事所用的时间可能是你马马虎虎迅速做事所需时间的5倍。然而第二次将只需要3倍的时间。等你做过很多次后,正确做事的速度几乎能与马马虎虎迅速做事一样了。
> 熟并不能生巧:熟练的能变成永久不变的。也就是说,如果你一次又一次地做同一件事,最终它将变成下意识的、机械式的。
确实如此,但它没考虑你不断练习做某件事情时的品质。如果你按照坏习惯练习,坏习惯就变成机械式的了。所以你应该遵循完美的规则去练习,这样才能成就完美。
### 1.1 引入日志
引入日志便于打印流程中状态数据的输出
我这里使用logback,关于logback的相关信息,请自行谷歌了解
logback.xml的配置就使用官网文档中的标准配置即可
```xml
org.slf4j
slf4j-api
1.7.25
ch.qos.logback
logback-core
1.2.3
ch.qos.logback
logback-classic
1.2.3
org.slf4j
jcl-over-slf4j
1.7.25
```
httpclient输出日志需要在logback.xml中添加下面的配置
```xml
```
pom中引入jar包需要忽略commons-logging
```xml
org.apache.httpcomponents
httpclient
4.5.3
commons-logging
commons-logging
```
### 1.2 引入版本控制
我不必再跟你解释版本控制的价值了吧(它可能需要一整本书)!大体而言,版本控制有以下益处:
- 文档
能够回溯项目的历史,回顾所做的决策及组件的开发顺序,可形成宝贵的文档。记录项目的历史是十分有价值的。
- 归属
如果你在一个团队中工作,归属极其重要。当你发现代码模糊不清或有问题时,知道是谁做的修改可以节省你很多时间。也许,与这个修改相关的评论就足以解决你的疑问了,但如果不能,你也知道应该和谁沟通。
- 试验
一个好的版本控制系统能让你做试验。你可以引出一个分支,尝试做一些新的东西,不用担心会影响项目的稳定性。如果试验成功,你可以把它纳入到项目中;如果不成功,你可以放弃它。
## 2.常用的Http客户端工具比较
### 2.1 介绍
尽管java.net包提供了通过HTTP访问资源的基本功能,但它并不能提供许多应用程序所需的全部灵活性或功能。
Httpclient和OkHttp都是常用的第三方HTTP客户端工具
#### 2.1.1 Httpclient
HttpClient 是Apache Jakarta Common 下的子项目,
可以用来提供高效的、最新的、功能丰富的支持 HTTP 协议的客户端编程工具包,并且它支持 HTTP 协议最新的版本和建议。
以上摘自百科
服务端开发比较常见,ResetTemplate底层就是用的Httpclient
#### 2.1.2 OkHttp
OkHttp是移动支付Square开源的一个现代,快速,高效的Httpclient,支持HTTP/2以及SPDY协议。
是安卓端最火热的轻量级Http框架
PS:有听安卓开发说Httpclient过时了,还是原生的HttpURLconnection好用
其实自安卓4.4开始,HttpURLconnection底层已经改用OkHttp实现了
OkHttp得到了官方的认可,并在不断优化。
服务端同样可以使用
### 2.2 功能对比
| |缓存|重试|http/1|https/2|SPDY |https|稳定性|cookie|session|代理|超时设置|
-----|-----|-----|-----|-----|-----|-----|-----|-----|-----|-----|-----
Httpclient|✔|✔|✔|5.0支持|✘|✔|✔|✔|✔|✔|✔
OkHttp|✔|✔|✔|✔|✔|✔|✔|✔|✔|✔|✔
两大工具功能差异基本不大,都能满足http客户端工具的常用功能开发。
OkHttp因为安卓的发展反倒后来居上。