
- 适用平台
- 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,对于这个行为不做评价。为了更好的在应对网络访问,学习
-
Docker从入门到精通
-
对话丨BlockDreamFund:优质项目正在重夺一级市场话语权
-
物联网基础篇:快速玩转MQTT
-
项目经理成长之路
-
DHCP 动态主机配置服务(在Linux环境下,配置单网段或跨网段提)
-
基于Qt的LibVLC开发教程
-
注解与反射学习笔记
-
Java封装
-
物联网之mqtt实现(emqx+springboot+mqtt附源码)
-
程序员必修基础套餐课
-
硕尼姆sonim xp7700刷机包
-
一天学完MySQL数据库
-
自学demo — 仿美团app
-
MXMIR源码SKYM2
-
coreseek-4.1-win32.tar
-
25、华为 华三中小型企业网络架构搭建 【内网安全部署之STP的安全技术部署】
-
基于Flink+Hudi构建企业亿级云上实时数据湖教程(PC、移动、小
-
2017-2021年复旦大学961软件工程专业基础综合考研真题
-
Java面向对象
-
算法题目练习001:数列分段