Get请求 - 无参数
上一章我们学习了网络的基本概念,我们知道 URL
能输入到浏览器地址栏中被打开,
那么能不能在程序中发送请求,获取结果呢?
例如“中国科学技术大学”的网站(https://www.ustc.edu.cn/
):
Java
功能非常强大,用来实现抓取网站内容也非常简便。那么是如何实现它的呢?
安装依赖库
首先,我们需要安装一个库: Okhttp3
,这是一个非常流行的 HTTP
库,可以简单、快速的实现 HTTP
调用。
安装 Okhttp3
的方式是在 pom.xml
文件中增加依赖:
<!-- https://mvnrepository.com/artifact/com.squareup.okhttp3/okhttp -->
<dependency>
<groupId>com.squareup.okhttp3</groupId>
<artifactId>okhttp</artifactId>
<version>4.1.0</version>
</dependency>
唯一的 <dependencies>
标签中,包含多个 <dependency>
标签,每一个 <dependency>
标签表示一个依赖库。书写时注意嵌套顺序哦。
pom.xml
文件的作用就是定义Java
项目需要用到(或者说依赖到)哪些库。
不必纠结
pom.xml
的含义及原理,在以后的高阶课程里会详细讲。当前会写依赖标签即可。
使用详解
使用 Okhttp3
完成页面请求,需要三大步骤:
- 实例化
OkHttpClient
。使用OkHttpClient okHttpClient = new OkHttpClient();
代码。 - 执行调用。
- 在执行调用之前,需要实例化一个
Request
对象,作用是定义请求的各种参数,Request request = new Request.Builder().url(url).build();
- 然后构建调用对象
Call call = okHttpClient.newCall(request);
- 最后执行调用,如果调用失败可能抛异常,所以必须抓取异常。
call.execute()
就是执行调用的代码。
- 在执行调用之前,需要实例化一个
call.execute()
返回的其实是一个执行的结果对象,调用对象的方法即可获取返回的字符串内容:call.execute().body().string();
这个过程你可以类比打电话:
- 拿出手机,相当于实例化Request对象,
- 拨号,相当于newCall()方法,这些都是前置操作,
- 每说一句话,相当于执行 execute() 方法,
- 听到对方说的话,就相当于获取返回结果 body().string()
演示的代码基本上都属于固定写法。
任何时候都不要忘记
pom.xml
文件添加依赖,以及代码中使用import
语句引入使用的类哦。
由于 Java
一切皆对象的理念,所以实际上代码量可能比大家想象的要大。
但是没关系,我们把调用的步骤封装在一个 getContent()
方法中,比较容易理解,也方便复用。大家不用太纠结,主要目标是熟练写出完整的代码。
关于输出结果
call.execute().body().string();
可以取得服务器返回的具体内容。在下一章我们会详细学习,这里大家知道用法即可。
我们在 console
中看到的大量的文本内容,这是给浏览器识别的内容,包含了很多无效的内容。所以很多时候,我们使用程序调用 API
,获取到需要的数据。
什么是 API
API 全称 Application Programming Interface,应用程序接口,API 一般是指一些预先定义的函数,目的是可以为开发人员快速访问某一程序,而无需了解和访问源码,或理解它内部工作机制的细节。
简单的讲,API 可以快速调用某个程序。
这在计算机里叫做接口,我们生活中也有很多接口,比如 U 盘可以储存信息,我们访问 U 盘,只需要把 U 盘插到电脑上就可以访问,插入的 USB 接口就是一个接口,我们不需要关心它是如何实现的。
又比如电视机上有很多接口,有的连话筒,有的连视频,我们只需要直接插上对应的线就可以实现相应的功能,并不关心它的具体机制。
如果大家想要了解关于更多 API
的知识,可以点击查看这个文档
调用 API
我们看一个查询 杭州市 天气的 API
:
https://api.seniverse.com/v3/weather/daily.json?key=SCYrvkytJze9qyzOh&location=杭州
把这个 URL 贴到浏览器,可以看到查询返回结果为:
{
"results":[{
"location":{
"id"