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 ...
随机推荐
- Maven项目命名规范
Guide to naming conventions on groupId, artifactId and versiongroupId will identify your project uni ...
- MyBatis 中如何调用 Java 的 enum (枚举) 字段
事先作成一 enum,如下: public enum CityCode { ALL("000"), BEIJING("010"), SHANGHAI(" ...
- element ui axios使用formdata提交数据
axios({ //formdata提交 headers: { 'Content-Type': 'application/x-www-form-urlencoded' }, transformRequ ...
- 部署GitLab时, 问题
1. 开启防火墙可能会对 nginx 造成影响. 2. 安装 gitlab 会自带一个 nginx, 启动后会对 现有的nginx 造成影响, 解决方案 参考 连接 1
- CentOS安装MySQL8.x
MySQL的安装 (4,5,6可省略) 声明:CentOS版本为7.6,安装的MySQL版本为8.0.17 1. 首先要卸载掉本机自带的mysql相关,包括MariaDB. rpm -pa | gre ...
- HTML常用全部代码--第一部分--HTML/CSS( 小伙伴要牢记😁😁😁😁 )
<一>html代码大全:结构性定义 (1) 文件类型<HTML></HTML> (放在档案的开头与结尾) (2) 文件主题<TITLE></TIT ...
- 基于JFinal中搭建wopi协议支撑办法
1.添加maven依赖 <dependency> <groupId>com.github.icecooly</groupId> <artifactId> ...
- 手写二叉树-先序构造(泛型)-层序遍历(Java版)
如题 先序构造 数据类型使用了泛型,在后续的更改中,更换数据类型只需要少许的变更代码 层序遍历 利用Node类的level属性 所有属性的权限全为public ,为了方便先这么写吧,建议还是用priv ...
- python练习题(四)
题目: 根据一个字符串返回一个ip数组,按照ip最后一位排序, 字符串: str = 'ss192.0.0.12?!289.0.0.1!0.0.0.0!192.163.10.28?192.0.0.5' ...
- render函数之jsx应用
一.模板缺陷(模板的最大特点是扩展难度大,不易扩展.可能会造成逻辑冗余) <level :type="1">哈哈</level> <level :ty ...