000 okhttp3的Get使用
一:概述
1.说明
java与android都可以使用。
是网络请求的开源框架。
square公司开发,用于替代HttpUrlConnection和Apache HttpClient
2.优点
- 支持HTTP2/SPDY(SPDY是Google开发的基于TCP的传输层协议,用以最小化网络延迟,提升网络速度,优化用户的网络使用体验。)
- socket自动选择最好路线,并支持自动重连,拥有自动维护的socket连接池,减少握手次数,减少了请求延迟,共享Socket,减少对服务器的请求次数。
- 基于Headers的缓存策略减少重复的网络请求。
- 拥有Interceptors轻松处理请求与响应(自动处理GZip压缩)。
3.功能
- PUT,DELETE,POST,GET等请求
- 文件的上传下载
- 加载图片(内部会图片大小自动压缩)
- 支持请求回调,直接返回对象、对象集合
- 支持session的保持
4.准备项目
在这里需要使用两个项目进行实验。
调用的项目:
需要添加使用okhttp包,使用端口8090.

被调用的项目:
使用端口8080
是一个普通的项目即可。
二:程序GET
1.get的普通使用
被调用程序
package com.jun.web2forokhttp.okhttp; import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController; import java.util.HashMap;
import java.util.Map; @RestController
public class GetReq {
@GetMapping("/ok/getInfo")
public Map getInfo(@RequestParam("type") String type){
Map map =new HashMap();
if("1".equals(type)){
map.put("1","aa");
map.put("2","bb");
}else {
map.put("3","cc");
map.put("4","dd");
}
return map;
}
}
2.调用程序
package com.jun.web.okhttp; import okhttp3.Call;
import okhttp3.OkHttpClient;
import okhttp3.Request;
import okhttp3.Response; import java.io.IOException; public class GetHttp {
public static void main(String[] args) {
withoutHeader();
} public static void withoutHeader(){
String url="http://localhost:8080/ok/getInfo?type=18";
OkHttpClient client = new OkHttpClient();
Request request = new Request.Builder()
.url(url)
.build();
Call call = client.newCall(request);
try{
Response response = call.execute();
System.out.println("get="+response.body().string());
} catch (IOException e) {
e.printStackTrace();
}
}
}
效果:

3.request的请求头中添加参数
被调用程序
package com.jun.web2forokhttp.okhttp; import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestHeader;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController; import java.util.HashMap;
import java.util.Map; @RestController
public class GetReq {
/**
* 普通的get请求
* @param type
* @return
*/
@GetMapping("/ok/getInfo")
public Map getInfo(@RequestParam("type") String type){
Map map =new HashMap();
if("1".equals(type)){
map.put("1","aa");
map.put("2","bb");
}else {
map.put("3","cc");
map.put("4","dd");
}
return map;
} /**
* 参数从请求头中获取
* @param type
* @return
*/
@GetMapping("/ok/getMoreInfo")
public Map getMoreInfo(@RequestParam("type") String type, @RequestHeader("cjtoken") String cjToken){
Map map =new HashMap();
if("1".equals(type)){
map.put("1","aa");
map.put("2","bb");
map.put("cjtoken",cjToken);
}else {
map.put("3","cc");
map.put("4","dd");
map.put("cjtoken",cjToken);
} return map;
}
}
4.调用程序
package com.jun.web.okhttp; import okhttp3.Call;
import okhttp3.OkHttpClient;
import okhttp3.Request;
import okhttp3.Response; import java.io.IOException; public class GetHttp {
public static void main(String[] args) {
// withoutHeader();
withHeader();
} /**
* 没有请求头的请求
*/
public static void withoutHeader(){
String url="http://localhost:8080/ok/getInfo?type=18";
OkHttpClient client = new OkHttpClient();
Request request = new Request.Builder()
.url(url)
.header("cjtoken","8765095321")
.build();
Call call = client.newCall(request);
try{
Response response = call.execute();
System.out.println("get="+response.body().string());
} catch (IOException e) {
e.printStackTrace();
}
} /**
* 有请求头的请求
*/
public static void withHeader(){
String url="http://localhost:8080/ok/getMoreInfo?type=18";
OkHttpClient client = new OkHttpClient();
Request request = new Request.Builder()
.url(url)
.header("cjtoken","8765095321")
.build();
Call call = client.newCall(request);
try{
Response response = call.execute();
System.out.println("get="+response.body().string());
} catch (IOException e) {
e.printStackTrace();
}
}
}
效果:

三:注意点
1.返回值
string()只是其中之一。
- onResponse回调有一个参数是response
如果想获得返回的是字符串,可以通过response.body().string()
如果获得返回的二进制字节数组,则调用response.body().bytes()
如果想拿到返回的inputStream,则调response.body().byteStream()
有inputStream我们就可以通过IO的方式写文件
使用response.code()获取返回的状态码。如果成功,则是200.
2.header
可以写多个header,添加多个值与健。
000 okhttp3的Get使用的更多相关文章
- 常用HTTP状态码和CURL 000问题
最近在测试CDN服务质量问题,测试过程中返回了一些不同的状态码,当然有一些常用的,也有一些不常用的.最奇葩的是在使用curl命令的时候出现000状态码,问了很多同事,对这个000的反应跟新事物是的 ...
- Okhttp3的简单使用
1.get请求: /** * *okhttp get请求 * */ public class MainActivity extends AppCompatActivity { private stat ...
- okhttp3 post 数据打包方法
import okhttp3.OkHttpClient; import okhttp3.FormBody; import okhttp3.Request; import okhttp3.Request ...
- 60,000毫秒内对Linux的性能诊断效的方法
转载于:http://www.itxuexiwang.com/a/liunxjishu/2016/0225/168.html?1456484140 60,000 毫秒内对 Linux 的性能诊断 当你 ...
- Retrofit2 + OkHttp3设置Http请求头(Headers)方法汇总
在构建网络层时会遇到一个问题就是要手动配置Http请求的Headers,写入缓存Cookie,自定义的User-Agent等参数,但是对于有几十个接口的网络层,我才不想用注解配置Headers,目前网 ...
- [C#]循环输出 000 - 999999
循环输出 000 - 999999 ; i < ; i++) { , i.ToString().Length); j < 7; j++) { Debug.WriteLine(i.ToStr ...
- okhttp3 get post 简单封装
最近打算在新项目中使用 okhttp3, 简单封装了一下异步 get post 因为 CallBack 也是在子线程中执行,所以用到了 Handler public class MyOkHttpCli ...
- c++ string 结束符‘\000’
昨天输出string类型时总是出错,发现输出到文件的一行里多了^@,输出到console却看不到,debug发现,string类型中多了\000,这主要由于我想要用\0截掉字符串最后一位,所以把字符串 ...
- okhttp3教程(1)如何引入库
官网: https://github.com/square/okhttp https://github.com/square/okio 1,使用okhttp3需要两个库 在build.gradle c ...
随机推荐
- day 04作业
目录 简述Python的五大数据类型的作用.定义方式.使用方法: 数字类型 字符串类型(str) 列表(list) 字典(dict) 布尔型(bool) 一行代码实现下述代码实现的功能: 写出两种交换 ...
- docker 安装prometheus
使用到的命令: [root@lgswork ~]# docker search prometheus NAME DESCRIPTION STARS OFFICIAL AUTOMATED prom/pr ...
- Python并发编程-GIL全局解释器锁
Python并发编程-GIL全局解释器锁 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.GIL全局解释器锁概述 CPython 在解释器进程级别有一把锁,叫做GIL,即全局解释 ...
- 安装lamp服务器
1.安装http: $ yum install httpd 2.启动http: $ systemctl start httpd 3.访问:http://192.168.1.100 4.Installi ...
- 洛谷 P1443 马的遍历题解
题目链接:https://www.luogu.org/problem/P1443 题目描述 有一个n*m的棋盘(1<n,m<=400),在某个点上有一个马,要求你计算出马到达棋盘上任意一个 ...
- 1220 Vue与Django前后端的结合
目录 vue的安装 Vue前端的设置 页面的分布 后台数据的替换 css样式 Django的配置 国际化配置 axios插件安装 CORS跨域问题(同源策略) 处理跨域问题: cors插件 axios ...
- Python爬虫爬企查查数据
因为制作B2b网站需要,需要入库企业信息数据.所以目光锁定企查查数据,废话不多说,开干! #-*- coding-8 -*- import requests import lxml import sy ...
- apscheduler 执行报错No handlers could be found for logger "apscheduler.executors.default
执行报错如下: No handlers could be found for logger "apscheduler.executors.default 解决: 加入日志,查看具体报错,载根 ...
- Non-boring sequences(启发式分治)
题意:一个序列被称作是不无聊的,当且仅当,任意一个连续子区间,存在一个数字只出现了一次,问给定序列是否是不无聊的. 思路:每次找到一个只出现了一次的点,其位置的pos,那么继续分治[L,pos-1], ...
- 002-官网安装openstack之-安装基础服务
安装openstack基础服务 1.控制节点安装时间同步服务(chrony) (1)时间同步大体来说有两种方式: 一种是自己搭建时间同步服务器,各个需要同步时间的节点,与其同步时间 另一种则是使用nt ...