本文将重点介绍如何构造 HTTP 请求和构造 HTTP 请求的几种方法。
方法一:通过 form 表单构造 HTTP 请求(纯 HTML 文案)
方法二:通过 ajax 构造 HTTP 请求(通过 javascript 构造 HTTP 请求)
方法三:通过 Java socket 构造 HTTP请求
以上三种方法在后续学习中会介绍,这里先暂且不谈,我们专注于下面两种方法
方法四:使用 Java 标准库的方案
Java标准库提供了一种方案,让我们可以直接访问 HTTP 服务器或者 HTTPS 的服务器
我们直接编写代码构造 HTTP 请求
1)先创建一个 HttpClient 对象

创建对象的时侯需要导入 Java标准库,记得认准库名,同样的类名的库有很多
我们可以直接 通过new出这个对象,只不过我们发现new完后变成了一种类似于匿名内部类重写,我们需要去重写很多方法,比较麻烦

这个标准库中的类给我们提供了工厂方法,我们可以直接使用这个工厂方法,相较于直接new会简单许多

2)创建一个请求对象
我们上述创建的是一个客户端对象,我们还需要再创建一个请求对象,我们后续需要通过这个客户端把我们的请求对象发送出去


这里的 newBuilder 方法可以让我们用链式调用的方式构造出我们的请求
提问:什么是链式调用?
我们先创造一个对象,然后在借助这个对象,不断的调用它的方法
这个写法说来话长,它源于C#,C# 是一种很像 Java 的一种语言,但它又有自己的创新,这个就是其中的一个,链式调用可以根据我们自己的需求去调用它的方法,调用后返回一个相同的对象,我们就可以继续调用
这个方法出现的背景或者说存在的价值,本质上是 Java/C# 没有 " 关键字参数 " 这样的语法, " 关键字参数 " 的语法 Python 就有,它在调用方法中可以指定实参和形参的名字,不要求顺序匹配
pythonfunc(x = 10,y = 20)
我们可以通过这个链式调用添加请求中的各种参数,但是最后需要以 .build() 结尾


3)发送请求
构造完请求后,我们就需要通过 send 发送请求

这里的send提供了两个版本,分别是同步发送和异步发送
问题:什么是同步发送和异步发送?
注意,这里的同步并不是我们之前学加锁的 synchronize 的那个同步,虽然说单词一样,但场景不同,意义就不一样
这里的异步和同步指的是对结果的关注对象不同,同步是指发出请求后,发送方等待响应返回再离开;而异步是指发出请求后,离开,接收方等收到响应后再去通知发送方;这里的同步和异步与IO直接相关。
异步拥有更高的性能和更好的并发,同步则代码更简单,更好实现且更安全准确;在开发环境中,我们可以按需选择同步还是异步
我们这里用同步演示

此时在这个方法中,send一旦执行,就会阻塞等待,直到响应返回来,我们还可以打印一下响应中的内容

我们当前响应的内容都包含在这个response对象中了,我们可以借助这个对象的属性拿到我们想要看到的内容,可以执行程序,看一下效果

代码示例:
java
import java.time.Duration;
import java.util.Optional;
import java.util.concurrent.CompletableFuture;
import java.util.concurrent.Executor;
public class MyHttpClient {
public static void main(String[] args) throws IOException, InterruptedException {
//创建一个 HttpClient 对象
//创建实例的时侯,使用工厂方法
HttpClient client = HttpClient.newHttpClient();
//创建请求对象 HttpRequest ,表示一个 HTTP 请求
HttpRequest request = HttpRequest.newBuilder()
.uri(URI.create("https://www.sogou.com"))
.GET()
.headers("User-Agent","xxxx")
.build();
//发送请求,获取响应
HttpResponse<String> response = client.send(request,HttpResponse.BodyHandlers.ofString());
//打印一下响应中的内容
System.out.println(response.statusCode());
System.out.println(response.headers());
System.out.println(response.body());
}
}
这样我们就成功构建了一个 HTTP 请求,这个HTTP请求不仅可以帮我们测试服务器,也可以用来实现其他功能。
例如:我们可以设计一个程序实现,自动回关功能,就是自动关注给我们博客留言的人
其实这样的操作,本质是一种 " 爬虫 "(crawler)
真正要实现上述这样的操作,还是有一定难度的,基本大型的服务器都会有 " 反爬虫 " 机制
大部分的爬虫程序都是违法的!!!爬虫可能会对对方的网站服务器造成影响和损失,我们还是要明确:我们要做一个遵纪守法的好公民!!!
上述的请求是需要我们编写代码完成的,那有没有什么工具不用编写代码就可以生成一个请求呢?有的有的
方法五:不写代码的方案 -> Postman
Postman 是一个专门的构造 HTTP 请求的工具软件
下面介绍下载和使用方法:
进入官网,点击下载安装即可Download Postman | Get Started for Free
https://www.postman.com/downloads/

我不知道为什么一直登不进去,就先点了跳过,我们先看看界面吧(登录界面底下的那行字可以跳过)

可以先选择一个方法



点击 send 就可以生成一个 HTTP 请求了

不过不知道你们有没有发现,Postmen 与多数程序不一样的一点,它是一个有对象的程序hhh
它的对象就是 Postwoman

除了常用的 Postmen 还有一款 " 更适合中国宝宝体质 " 的程序 --- Apifox

不知道大家对这个程序有没有印象,我们之前在搜索Postman的时侯,首先跳出来的不是 Postman 而是这个 Apifox
点击主页就可以直接下载了
下载完登录后是这个界面

我们以这个体验示例项目(宠物商店)为例





方法四和方法五都需要大家多去尝试,才能更熟练的掌握~


