从api接口获取数据-okhttp
首先先介绍下api接口:
API:应用程序接口(API:Application Program Interface)
通常用于数据连接,调用函数提供功能等等。。。
从api接口获取数据有四种方式:HttpClient、HttpURLConnection、OKHttp 和 Volley。
之前项目中用到了OKHttp3,项目做好了,但这方面知识还没完全掌握,写篇随笔争取理解多一些 = =
OkHttp 是一个现代、快速、高效的 Http client,支持 Http/2 以及 SPDY,扮演着传输层的角色,
OkHttp 使用 Okio 来打打简化数据的访问与存储,Okio是一个增强 java.io 和 java.nio 的库。。。。and so on
OkHttp 的基本用法(现在OkHttp3是比较新的版本,通常用这个多一些):
首先导入jar包,没有jar包的同学可以进入下面链接搜索下载
然后在pom.xml进行配置(version 要对上,和你引入的okhttp jar包版本一致)
下面是从网上偷的代码:https://www.jianshu.com/p/1873287eed87
如果是Get请求:
String url = "https://www.baidu.com";
OkHttpClient okHttpClient = new OkHttpClient();
Request request = new Request.Builder()
.url(url);
.build();
Call call = okHttpClient.newCall(request);
try{
Response reponse = call.excecute();
System.out.println(response。body().string());
}catch(IOExcption e){
e.printStackTrace();
}
如果需要在request的header添加参数,如cookie、User-Agent什么的 , 就写成这样:
Request request = new Request.Builder()
.url(url)
.header("key","value")
.header("key","value")
...
.build();
注意:
url 为 api 数据源,需要根据自身情况调用相应的api。
response的body有很多种输出方法,string() 只是其中之一,注意是string() 不是toString()。
如果是下载文件就是response.body().bytes(),
另外可以根据response.code() 获取返回的状态码。
-----------------------------------------------------------------------------------------------------------------------------------------
如果是Post请求:
String url = "https://baidu.com";
OkHttpClient okHttpClient = new OkHttpClient(); RequestBody body = new FormBody.Builder()
.add("key","value");
.add("key","value");
...
.build(); Request request = new Request.Builder()
.url(url)
.post(body)
.build(); Call call = okHttpClient.newCall(request);
try{
Response reponse = call.execute();
System.out.println(response.body().string());
}catch{
e.printStackTrace();
}
post 请求创建 request 和 get 是一样的,只是post请求需要提交一个表单——ResponseBody
表单格式有很多种,普通表单:
RequestBody body = new FormBody.Builder()
.add("键", "值")
.add("键", "值")
...
.build();
RequestBody 的数据格式都要指定 Content-Type ,常见有三种:
application/x-www-form-urlencoded 数据是个普通表单
multipart/form-data 数据里有文件
application/json 数据是个json
但是上面代码中的表单并没有指定Content-Type这是因为FormBody继承了RequestBody,它已经指定了数据类型为application/x-www-form-urlencoded。
private static final MediaType CONTENT_TYPE = MediaType.parse("application/x-www-form-urlencoded");
如果表单是 json:
MediaType JSON = MediaType.parse("application/json;charset = utf-8");
RequestBody body = RequestBody.create(JSON,"你的JSON");
如果表单包含文件:
RequestBody requestBody = new MultipartBody.Build()
.setType(MultipartBody.FORM)
.addFormDataPart("file",file.getName(),RequestBody.create(MediaType.parse("image/png"),file))
.build();
上面的 MultipartBody也是继承了RequestBody,看下源码可知它适用于这五种Content-Type:
public static final MediaType MIXED = MediaType.parse("multipart/mixed");
public static final MediaType ALTERNATIVE = MediaType.parse("multipart/alternative");
public static final MediaType DIGEST = MediaType.parse("multipart/digest");
public static final MediaType PARALLEL = MediaType.parse("multipart/parallel");
public static final MediaType FORM = MediaType.parse("multipart/form-data");
另外还可以参考这个链接中的内容,还写了其他三种api接收数据的方式,很具体很细节~
https://www.2cto.com/kf/201607/521798.html
创造接口:
https://blog.csdn.net/qq_35731570/article/details/69937457
restful
urlrewrite
https://blog.csdn.net/kkkkkjava/article/details/78296845
从api接口获取数据-okhttp的更多相关文章
- java从Swagger Api接口获取数据工具类
- java接口对接——别人调用我们接口获取数据
java接口对接——别人调用我们接口获取数据,我们需要在我们系统中开发几个接口,给对方接口规范文档,包括访问我们的接口地址,以及入参名称和格式,还有我们的返回的状态的情况, 接口代码: package ...
- json-lib-2.4-jdk15.jar所需全部JAR包.rar java jsoup解析开彩网api接口json数据实例
json-lib-2.4-jdk15.jar所需全部JAR包.rar java jsoup解析开彩网api接口json数据实例 json-lib-2.4-jdk15.jar所需全部JAR包.rar ...
- Java之通过接口获取数据并用JDBC存储到数据库中
最近做数据同步功能,从接口获取数据然后存到数据库中以便后续对数据进行相关操作,下面就贴一下相关代码. import com.alibaba.fastjson.JSON; import com.alib ...
- 豆瓣爬虫——通过json接口获取数据
最近在复习resqusts 爬虫模块,就重新写了一个豆瓣爬虫,这个网页从HTML 源码上来看是没有任何我想要的信息的,如下图所示: 这是网页视图,我在源码中查找影片信息,没有任何信息,如图: 由此我判 ...
- PHP访问接口获取数据
如:http://localhost/operate.php?act=get_user_list&type=json 在这里operate.php相当于一个接口,其中get_user_list ...
- requests从api中获取数据并存放到mysql中
python的requests库是一个非常强大的库,requests的安装方法十分简单,用: pip install requests 即可安装requests,安装成功后: import reque ...
- 调用REST接口获取数据
/// <summary> /// 根据机构代码本机构下报警用户列表: /// </summary> /// <param name="org_code&quo ...
- 通过zabbix的API接口获取服务器列表
Zabbix API说明 1) 基于Web的API,作为Web前端的一部分提供,使用JSON-RPC 2.0协议 2) 身份认证Token:在访问Zabbix中的任何数据之前,需要登录并获取身份验证令 ...
随机推荐
- FFMPEG的函数翻译文档
https://blog.csdn.net/explorer_day/article/category/6289310/2 https://www.cnblogs.com/tocy/p/ffmpeg- ...
- Java的GC
垃圾收集 在探究Jvm的过程中,有两个点特别需要关注,一是:内存的使用,分配策略,而这一点是在前一篇博客已经介绍过了. 二是:内存的回收.也就是这一篇博客所要探究的关键点. 内存回收需要关注的几个点: ...
- 2 new出的对象 prototype与__proto__
对象没有原型对象,函数才有 new出的对象,this的会重新创建,二prototype并不会重新创建,而是追溯原型链的方式进行继承 var Book=function(id,bookname,pric ...
- (转) centos 7.0 nginx 1.7.9成功安装过程
centos 7.0根目录 的目录构成 [root@localhost /]# lsbin dev home lib64 mnt proc run srv tmp varboot etc lib me ...
- SpringAOP-基于@AspectJ的简单入门
一.AOP的基本概念: 连接点(Jointpoint):表示需要在程序中插入横切关注点的扩展点,连接点可能是类初始化.方法执行.方法调用.字段调用或处理异常等等,Spring只支持方法执行连接点,在A ...
- javascript中的浅拷贝和深拷贝 分类: JavaScript 2015-05-07 15:29 831人阅读 评论(1) 收藏
1.js对象浅拷贝 简单的赋值就是浅拷贝.因为对象和数组在赋值的时候都是引用传递.赋值的时候只是传递一个指针. 看下面的实例代码: var a = [1,2,3]; var b =a ; var te ...
- git使用时的一下简单命令
一.简介 SVN集中式版本控制系统 分布式版本控制系统 二.使用git 1.git init 将这个命令变成git可管理的仓库 2.git add filename 将这个文件添加到仓库 3.git ...
- Eclipse打不开 提示an error has occurred.see the log file
有时由于Eclipse卡死,强制关闭之后会出现打不开的情况.弹窗提示: 查看log文件,发现有这样的信息: !MESSAGE The workspace exited with unsaved ch ...
- 分区助手里如何从临近盘(如D盘)抽取一定的空间给已经快满了的盘(如E盘)(博主推荐)(图文详解)
不多说,直接上干货! 分区助手是什么?(博主推荐)(图文详解) 分区助手各版本比较(图文详解) 分区助手官网使用教程(专业版.绿色版和WinPE版)(图文详解) 安装分区助手时出现“分区助手已安装到你 ...
- go语言的unsafe包(转)
The unsafe Package in Golang Golang的unsafe包是一个很特殊的包. 为什么这样说呢? 本文将详细解释. 来自go语言官方文档的警告 unsafe包的文档是这么说的 ...