
- 适用平台
- android
- 是否开源
- 是
- 作 用
- 应用广泛的Android网络框架
- 中文名
- okhttp
- 外文名
- okhttp
- 作 者
- Square公司
-
OkHttp
2016-07-04 20:50:10OkHttpOkHttp简介
http是现在主流应用使用的网络请求方式, 用来交换数据和内容, 有效的使用HTTP可以使你的APP 变的更快和减少流量的使用
OkHttp 是一个很棒HTTP客户端:
- 支持SPDY, 可以合并多个到同一个主机的请求
- 使用连接池技术减少请求的延迟(如果SPDY是可用的话)
- 使用GZIP压缩减少传输的数据量
- 缓存响应避免重复的网络请求
- 当你的网络出现拥挤的时候,就是OKHttp 大显身手的时候, 它可以避免常见的网络问题,如果你的服务是部署在不同的IP上面的,如果第一个连接失败, OkHTtp会尝试其他的连接. 这个对现在IPv4+IPv6 中常见的把服务冗余部署在不同的数据中心上. OkHttp 将使用现在TLS特性(SNI ALPN) 来初始化新的连接. 如果握手失败, 将切换到SLLv3
使用OkHttp很容易, 同时支持异步阻塞请求和回调.
如果你使用OkHttp ,你不用重写你的代码, okhttp-urlconnection模块实现了 java.net.HttpURLConnection 中的API, okhttp-apache模块实现了HttpClient中的API。
疑问,什么是SPDY?
SPDY(读作“SPeeDY”)是Google开发的基于TCP的应用层协议,用以最小化网络延迟,提升网络速度,优化用户的网络使用体验。SPDY并不是一种用于替代HTTP的协议,而是对HTTP协议的增强。新协议的功能包括数据流的多路复用、请求优先级以及HTTP报头压缩。
谷歌表示,引入SPDY协议后,在实验室测试中页面加载速度比原先快64%。在studio中使用原生OkHttp
1.在app 下的build.gradle中配置远程依赖
dependencies { compile fileTree(include: ['*.jar'], dir: 'libs') testCompile 'junit:junit:4.12' compile files('libs/gson-2.2.4.jar') compile files('libs/universal-image-loader-1.9.5.jar') compile 'com.android.support:appcompat-v7:23.4.0' compile 'com.android.support:design:23.4.0' compile files('libs/xUtils-2.4.7.jar') compile project(':library') compile 'com.squareup.okhttp:okhttp:2.4.0'//添加 compile 'com.squareup.okio:okio:1.5.0'//添加 }
2.在代码中使用
get请求
public void getColumnData() { OkHttpClient okHttpClient = new OkHttpClient(); final Request request = new Request.Builder() .url(JingBangApplication.HOST_ADDRESS + "/client/pms/programas.json") .build(); okHttpClient.newCall(request).enqueue(new Callback() { @Override public void onFailure(Request request, IOException e) { LogUtil.d("ssssss", "请求失败--->" + request.body()); } @Override public void onResponse(Response response) throws IOException { } });
post请求
public void getColumnData() { FormEncodingBuilder builder = new FormEncodingBuilder(); builder.add("username","哈哈"); OkHttpClient okHttpClient = new OkHttpClient(); final Request request = new Request.Builder() .url(JingBangApplication.HOST_ADDRESS + "/client/pms/programas.json") .post(builder.build()) .build(); okHttpClient.newCall(request).enqueue(new Callback() { @Override public void onFailure(Request request, IOException e) { } @Override public void onResponse(Response response) throws IOException { } }); }
- 注意:在回调的方法中response参数只能使用一次
-
okhttp
2020-04-03 14:41:38okhttp链接 OkHttp 作为一个简洁高效的 HTTP 客户端,可以在 Java 和 Android 程序中使用。相对于 Apache HttpClient 来说,OkHttp 的性能更好,其 API 设计也更加简单实用。本文对 OkHttp 进行了详细的介绍,包括...okhttp链接
OkHttp 作为一个简洁高效的 HTTP 客户端,可以在 Java 和 Android 程序中使用。相对于 Apache HttpClient 来说,OkHttp 的性能更好,其 API 设计也更加简单实用。本文对 OkHttp 进行了详细的介绍,包括同步和异步调用、HTTP GET 和 POST 请求处理、用户认证、响应缓存和拦截器等。对于新开发的 Java 应用,推荐使用 OkHttp 作为 HTTP 客户端。 -
OKHttp
2020-09-12 17:37:34当网络出现拥挤的时候,使用OKHttp可以避免常见的网络问题,如果服务器配端置了多个IP地址,当第一个IP连接失败的时候,OkHttp会自动尝试下一个IP。对现在IPv4+IPv6 中常见的把服务冗余部署在不同的数据中心上,简介
OkHttp是一个高效的HTTP库,它建立在HttpUrlConnection之上。OkHttp支持 SPDY ,共享同一个Socket来处理同一个服务器的所有请求,如果SPDY不可用,则通过连接池来减少请求延时;无缝的支持GZIP来减少数据流量;缓存响应数据来减少重复的网络请求;当网络出现拥挤的时候,使用OKHttp可以避免常见的网络问题,如果服务器配端置了多个IP地址,当第一个IP连接失败的时候,OkHttp会自动尝试下一个IP。对现在IPv4+IPv6 中常见的把服务冗余部署在不同的数据中心上,OkHttp 将使用现在TLS特性(SNI ALPN) 来初始化新的连接,如果连接失败,将切换到SLLv3;另外,OkHttp还处理了代理服务器问题和SSL连接失败的问题。
小知识 SPDY(读作“SPeeDY”)是Google开发的基于TCP的应用层协议,用以最小化网络延迟,提升网络速度,优化用户的网络使用体验。SPDY并不是一种用于替代HTTP的协议,而是对HTTP协议的增强。新协议的功能包括数据流的多路复用、请求优先级以及HTTP报头压缩。谷歌表示,引入SPDY协议后,在实验室测试中页面加载速度比原先快64%。 OkHttp直接架构于Java Socket本身而没有依赖于其他第三方类库(如下图所示),因此开发者可以直接用在JVM中,而不仅仅是Android。为了简化代码迁移速度,OkHttp实现了类似于HttpUrlConnection与Apache Client的接口,比如:okhttp-urlconnection模块实现了 java.net.HttpURLConnection 中的API、okhttp-apache模块实现了HttpClient中的API。因此使用OkHttp重构之前的代码,基本上不需要再做大量的工作。
目前OkHttp支持如下特性:- 支持基于HTTP/2以及SPDY的多路复用
- 支持连接池、会降低并发连接数
- 透明GZIP加密减少传输的数据量
- 响应缓存避免大量重复请求
- 同时支持同步的阻塞式调用与异步回调式调用
示例
创建SpringBoot项目,添加依赖
<dependency> <groupId>com.squareup.okhttp3</groupId> <artifactId>okhttp</artifactId> <version>4.8.1</version> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> <scope>test</scope> <exclusions> <exclusion> <groupId>org.junit.vintage</groupId> <artifactId>junit-vintage-engine</artifactId> </exclusion> </exclusions> </dependency>
服务器端代码
@RestController public class DispatchController { @GetMapping("/get") public String get() { return "get"; } @PostMapping("/post") public String post(String username,String password) { System.out.println(username+" : "+password); return "post"; } @RequestMapping("/header") public String header(HttpServletRequest request, HttpServletResponse response) { Enumeration<String> headerNames = request.getHeaderNames(); while (headerNames.hasMoreElements()) { String name = headerNames.nextElement(); String value = request.getHeader(name); System.out.println(name + " : " + value); } response.setHeader("xxx", "13579"); response.setHeader("yyy", "24680"); return "header"; } }
OkHttp测试代码
@SpringBootTest public class OkHttpTest { @Test public void get() throws IOException { OkHttpClient client = new OkHttpClient(); Request request = new Request.Builder() .url("http://localhost/od/get") .method("GET", null) .build(); Response response = client.newCall(request).execute(); if (response.isSuccessful()) { String res = response.body().string(); System.out.println(res); } else { throw new IOException("Unexpected code " + response); } } @Test public void post() throws IOException { OkHttpClient client = new OkHttpClient().newBuilder().build(); MediaType mediaType = MediaType.parse("text/plain"); RequestBody body = RequestBody.Companion.create("", mediaType); String username = "lisi"; String password = "123456"; Request request = new Request.Builder() .url("http://localhost/od/post?username=" + username + "&password=" + password) .method("POST", body) .build(); Response response = client.newCall(request).execute(); System.out.println(response.body().string()); Headers headers = response.headers(); } @Test public void header() throws IOException { OkHttpClient client = new OkHttpClient(); Request request = new Request.Builder() .url("http://localhost/od/header") .addHeader("Xaa", "application/json; q=0.5") .addHeader("Xbb", "application/vnd.github.v3+json") .build(); Response response = client.newCall(request).execute(); if (response.isSuccessful()) { String res = response.body().string(); System.out.println(res); Headers headers = response.headers(); System.out.println(headers.get("xxx")); System.out.println(headers.get("yyy")); } else { throw new IOException("Unexpected code " + response); } } }
-
OKHTTP
2019-08-04 20:14:03OKHTTP的下载和上传OKHTTP的简介OKHTTP的get请求的工具类OKHTTP的post请求的工具类 OKHTTP的简介 OKHTTP是一种第三方的网络下载工具,有get和post请求,一般get用来下载,post用来上传。一般是用来封装成工具类来...OKHTTP的下载和上传
OKHTTP的简介
OKHTTP是一种第三方的网络下载工具,有get和post请求,一般get用来下载,post用来上传。一般是用来封装成工具类来使用的。
OKHTTP的get请求的工具类
public void get(final Map<String,String> hashMap) { OkHttpClient client = new OkHttpClient.Builder().readTimeout(30, TimeUnit.SECONDS) .connectTimeout(20,TimeUnit.SECONDS).build(); final Request request = new Request.Builder().get().url(hashMap.get("data")).build(); okhttp3.Call call = client.newCall(request); call.enqueue(new Callback() { @Override public void onFailure(okhttp3.Call call, IOException e) { Log.i(TAG, "onFailure: "+"失败"); } @Override public void onResponse(okhttp3.Call call, Response response) throws IOException { Log.i(TAG, "onResponse: "+"开始下载"); String pase = "/sdcard/Music"; InputStream inputStream = response.body().byteStream(); int len = 0; byte[] bytes = new byte[19]; FileOutputStream fileOutputStream = new FileOutputStream(new File(pase + "/" + hashMap.get("name")+".mp3")); while ((len = inputStream.read(bytes)) != -1){ fileOutputStream.write(bytes); } Log.i(TAG, "onResponse: "+"下载完成!"); } }); }
OKHTTP的post请求的工具类
public void post(String urlStr, HashMap<String,String> hashMap){ OkHttpClient client = new OkHttpClient.Builder().build(); FormBody.Builder formBody = new FormBody.Builder(); for (String key:hashMap.keySet()){ formBody.add(key,hashMap.get(key)); } MultipartBody.Builder builder = new MultipartBody.Builder(); builder.setType(MultipartBody.FORM); builder.addFormDataPart("hh",hashMap.get("name")+".mp3", RequestBody.create(MediaType.parse("media/mp3"),"/sdcard/"+hashMap.get("name")+".mp3")); MultipartBody body1 = builder.build(); Request request = new Request.Builder().post(body1).url(urlStr).build(); okhttp3.Call call = client.newCall(request); call.enqueue(new Callback() { @Override public void onFailure(okhttp3.Call call, IOException e) { Log.i(TAG, "onFailure: "+"失败"); } @Override public void onResponse(okhttp3.Call call, Response response) throws IOException { String string = response.body().string(); Log.i(TAG, "onResponse: "+"成功"+string); } }); }
-
okHttp
2019-11-18 16:04:04gitHub地址: implementation("com.squareup.okhttp3:okhttp:4.2.2") -
Okhttp
2016-10-22 15:16:341.OkHttp 简介 1)OkHttp 是一个更先进的专注于连接效率的 HTTP 客户端。OkHttp 提供了对 HTTP/2 和 SPDY 的支持,并提供了连接池,GZIP 压缩和 HTTP 响应缓存功能。OkHttp 的 API 接口也更加的简单实用,是一种... -
Android OkHttp完全解析 是时候来了解OkHttp了
2015-08-24 15:36:45转载请标明出处: ...最近在群里听到各种讨论okhttp的话题,可见okhttp的口碑相当好了。再加上Google貌似在6.0版本里面删除了HttpClient相关API,对于这个行为不做评价。为了更好的在应对网络访问,学习 -
OKHttp使用简介
2015-07-22 11:16:12现在android网络方面的第三方库很多,volley,Retrofit,OKHttp等,各有各自的特点,这边博客就来简单介绍下如何使用OKHttp。梗概OKHttp是一款高效的HTTP客户端,支持连接同一地址的链接共享同一个socket,通过连接...
-
CCED2000的使用技巧.rar
-
Arrays分类算法-Spiral Traverse(待完成)
-
【数据分析-随到随学】Python数据获取
-
2021最新Kubernetes(k8s)集群实战精讲
-
阿里云云计算ACP考试必备教程
-
Java知识学习路线
-
一些提高开发效率的VSCode必备插件(分享)
-
新闻详细页的制作
-
Excel高级图表技巧
-
大数据Hive on MR/TEZ与hadoop的整合应用
-
瞎折腾——魔百和M301H(SM)
-
微服务系列第七十一季-Spring入门
-
【数据分析-随到随学】Python语法强化与数据处理
-
FPGA Verilog-1995 VS Verilog-2001
-
PHP7.2源码安装
-
Go语言GOPROXY设置
-
Selenium3分布式与虚拟化
-
北京市雨量监测信息管理(参考答案)
-
朱有鹏老师嵌入式linux核心课程2期介绍
-
EXCEL 2000操作读和写.e