首先先介绍下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包的同学可以进入下面链接搜索下载

https://mvnrepository.com/

然后在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的更多相关文章

  1. java从Swagger Api接口获取数据工具类

  2. java接口对接——别人调用我们接口获取数据

    java接口对接——别人调用我们接口获取数据,我们需要在我们系统中开发几个接口,给对方接口规范文档,包括访问我们的接口地址,以及入参名称和格式,还有我们的返回的状态的情况, 接口代码: package ...

  3. 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  ...

  4. Java之通过接口获取数据并用JDBC存储到数据库中

    最近做数据同步功能,从接口获取数据然后存到数据库中以便后续对数据进行相关操作,下面就贴一下相关代码. import com.alibaba.fastjson.JSON; import com.alib ...

  5. 豆瓣爬虫——通过json接口获取数据

    最近在复习resqusts 爬虫模块,就重新写了一个豆瓣爬虫,这个网页从HTML 源码上来看是没有任何我想要的信息的,如下图所示: 这是网页视图,我在源码中查找影片信息,没有任何信息,如图: 由此我判 ...

  6. PHP访问接口获取数据

    如:http://localhost/operate.php?act=get_user_list&type=json 在这里operate.php相当于一个接口,其中get_user_list ...

  7. requests从api中获取数据并存放到mysql中

    python的requests库是一个非常强大的库,requests的安装方法十分简单,用: pip install requests 即可安装requests,安装成功后: import reque ...

  8. 调用REST接口获取数据

    /// <summary> /// 根据机构代码本机构下报警用户列表: /// </summary> /// <param name="org_code&quo ...

  9. 通过zabbix的API接口获取服务器列表

    Zabbix API说明 1) 基于Web的API,作为Web前端的一部分提供,使用JSON-RPC 2.0协议 2) 身份认证Token:在访问Zabbix中的任何数据之前,需要登录并获取身份验证令 ...

随机推荐

  1. s11 day105

  2. Kafka网络模型分析

    Kafka基于高吞吐率和效率考虑,并没有使用第三方网络框架,而且自己基于java nio封装的,总体网络模型如下: Broker的内部按照SEDA模型处理网络请求,处理过程如下: Accept Thr ...

  3. Java MVC和三层架构

    一.设计模式 Model 1 和Model 2 Model 1 前面学习了Servlet和Jsp,对这两个有个大概的认识,Servlet就是为了解决静态页面的问题,能够实现动态的页面,使维护,开发更加 ...

  4. Python面试题整理-更新中

    几个链接: 编程零基础应当如何开始学习 Python ? - 路人甲的回答 网易云课堂上有哪些值得推荐的 Python 教程? - 路人甲的回答 怎么用最短时间高效而踏实地学习 Python? - 路 ...

  5. day 47 Django 4的简单应用 创建简单的图书管理 (单表的增删改查)

    前情提要  Django  已经学了大半.. 很多东西已经能够使用在生产环境当中 一:模糊查询 二:单表删除 三:单表修改 四:图书管理 图书管理操作 视图结构 A:路由层 A :配置路由文件 参数解 ...

  6. c++类定义和类实现

    预备知识: c++中我们cpp文件和.h文件的区别是,cpp文件是需要编译的文件,成为一个独立的编译单元,而h文件从来是不需要编译,只是用于预处理. 通常我们在cpp文件中,完成函数的实现,然后在h中 ...

  7. POJ 1147

    #include <iostream> #include <algorithm> #define MAXN 3005 using namespace std; int _m[M ...

  8. GDAL VS2010 win7(64位)安装、使用说明(图文解析)

    一.电脑配置及安装版本 Win 7(64位机) Visual Studio 2010 GDAL 1.9.2(我也尝试了最新版GDAL1.11.0,应该同样可以用的,只是在重新配置时又选用了老一点的版本 ...

  9. (转)CentOS 7 单用户模式+救援模式

    原文:http://blog.51cto.com/asd9577/1931442 https://www.cnblogs.com/zhangzeyu/p/6379754.html-------Cent ...

  10. 利用Windows资源监视器解决文件夹无法改名无法删除问题

    在win7等Windows系统操作文件夹更名.删除时经常会报错,操作无法完成,balabala 这个时候仅凭在用的软件去一个一个找是很难的,即便软件全关了,还有后台进程,,,奔溃吧 好了,现在我们有了 ...