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

下载完登录后是这个界面

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

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

相关推荐
caimouse5 小时前
TDI (传输驱动接口 Transport Driver Interface) 详细分析
网络协议
weixin_446260856 小时前
从被动镜像到主动智能体:面向网络物理人工智能的整体论数字孪生(HDT-Net)
网络·人工智能
ZJH__GO6 小时前
网络编程v4pro--实现聊天室文件传输功能
java·服务器·网络·计算机网络
shengnan_wsn8 小时前
【协议】【TCP】
网络·网络协议·tcp/ip
烟雨江南7858 小时前
2026汽车制造与新能源整车柔性产线Agentic-Workflow白皮书:跨APS_MES_ERP多智能体动态排产与装配容错实战
大数据·网络·人工智能·自动化·ai客服·企业agent
小僧景贤9 小时前
CAN调试全套配件+详细实操使用方法(从零排查、步骤落地、现场通用)
网络·can通信·嵌入式通信
消失的旧时光-19439 小时前
第 3 篇:机器人 TCP 长连接如何稳定运行?心跳、掉线检测与自动重连
网络协议·tcp/ip·机器人
迪康Defender10 小时前
从静态存储到动态流转:终端透明加密两种模式实战解析
运维·服务器·网络·数据库·其他
振浩微433射频芯片10 小时前
用TU2303B双向无线模块打通标准化智能家居接入:433MHz方案的落地优势指南
服务器·网络·人工智能
不弃君10 小时前
在 Windows 上用 MinGW 搭建 lwIP 调试环境:方法与踩坑实录
windows·网络协议·tcp/ip·嵌入式·mingw·lwip