JAVAEE初阶 --- 构造HTTP请求

本文将重点介绍如何构造 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 就有,它在调用方法中可以指定实参和形参的名字,不要求顺序匹配

python 复制代码
func(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 Freehttps://www.postman.com/downloads/

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

可以先选择一个方法

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

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

它的对象就是 Postwoman

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

不知道大家对这个程序有没有印象,我们之前在搜索Postman的时侯,首先跳出来的不是 Postman 而是这个 Apifox

点击主页就可以直接下载了

Apifox - API 文档、调试、Mock、测试一体化协作平台。拥有接口文档管理、接口调试、Mock、自动化测试等功能,接口开发、测试、联调效率,提升 10 倍。最好用的接口文档管理工具,接口自动化测试工具。https://apifox.com/?utm_source=bing&utm_medium=sem&utm_campaign=%E9%AB%98%E8%BD%AC%E5%8C%96%E8%AF%8D-%E4%BA%A7%E5%93%81&utm_content=Postman&utm_term=postman&msclkid=66d06055720b1ce2eee70a08b90641c3

下载完登录后是这个界面

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

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

相关推荐
砚凝霜7 小时前
软考网络工程师|第 1 章 计算机网络基础 完整备考笔记
网络·笔记·计算机网络
rcms152702692187 小时前
NIKON 4S019-394 接口模块
网络
某不知名網友7 小时前
Linux Socket 编程完整讲解
网络
ICT系统集成阿祥7 小时前
不用复杂命令,快速定位二层 / 三层网络故障
网络·网络排查·二层故障·三层故障
wuqingshun3141598 小时前
说说TCP的3次握手?为什么需要三次握手?
服务器·网络协议·tcp/ip
CHANG_THE_WORLD8 小时前
1.简单的服务端和客户端(仅作为内容补充)
linux·服务器·网络
学术小白人8 小时前
【倒计时4个月】-AI赋能图像处理与计算机视觉技术国际学术研讨会
网络·人工智能·神经网络·数据分析·光学
无锡耐特森8 小时前
解决网关数据异常EtherNetIP 转Modbus TCP专用动态监测
网络·网络协议·tcp/ip
盟接之桥9 小时前
为制造而生:制造业EDI如何重塑全球连接力
网络·安全·低代码·汽车·制造