news 2026/7/21 7:14:34

JAVAEE初阶 --- 构造HTTP请求

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
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 就有,它在调用方法中可以指定实参和形参的名字,不要求顺序匹配

func(x = 10,y = 20)

我们可以通过这个链式调用添加请求中的各种参数,但是最后需要以 .build() 结尾

3)发送请求

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

这里的send提供了两个版本,分别是同步发送和异步发送

问题:什么是同步发送异步发送

注意,这里的同步并不是我们之前学加锁的 synchronize 的那个同步,虽然说单词一样,但场景不同,意义就不一样

这里的异步和同步指的是对结果的关注对象不同,同步是指发出请求后,发送方等待响应返回再离开;而异步是指发出请求后,离开,接收方等收到响应后再去通知发送方;这里的同步和异步与IO直接相关。

异步拥有更高的性能和更好的并发,同步则代码更简单,更好实现且更安全准确;在开发环境中,我们可以按需选择同步还是异步

我们这里用同步演示

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

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

代码示例:

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

下载完登录后是这个界面

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

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

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/7/21 7:12:15

计算机毕业设计之校园运动会管理系统

近年来&#xff0c;科技飞速发展&#xff0c;在经济全球化的背景之下&#xff0c;互联网技术将进一步提高社会综合发展的效率和速度&#xff0c;互联网技术也会涉及到各个领域&#xff0c;而校园运动会管理系统在网络背景下有着无法忽视的作用。信息管理系统的开发是一个不断优…

作者头像 李华
网站建设 2026/7/21 7:11:08

AI大模型学习路线:从入门到精通的系统化路径

1. AI大模型学习路线图概述2026年将成为AI大模型技术爆发式增长的关键年份。作为一名长期跟踪AI技术发展的从业者&#xff0c;我完整梳理了从入门到精通的系统化学习路径。这条路线不仅包含理论知识体系&#xff0c;更注重实际工程能力的培养&#xff0c;帮助学习者在未来三年内…

作者头像 李华
网站建设 2026/7/21 7:08:50

OpenClaw Token优化:5大配置节省50%成本

1. 项目背景&#xff1a;Token消耗问题的普遍性最近在部署OpenClaw时遇到一个棘手问题——Token消耗速度远超预期。作为一款基于大语言模型的开发工具&#xff0c;OpenClaw的API调用成本主要来自Token消耗。在实际使用中&#xff0c;我发现某些配置不当会导致Token被"烧&q…

作者头像 李华
网站建设 2026/7/21 7:08:31

C++编程入门:从环境配置到函数核心的实战指南

1. 项目概述&#xff1a;为什么从C开始&#xff1f;如果你正在考虑踏入编程世界&#xff0c;或者想从其他语言转向更底层的开发&#xff0c;C绝对是一个绕不开的选项。我从业十几年&#xff0c;接触过不少语言&#xff0c;但C始终占据着一个特殊的位置。它不像Python那样上手就…

作者头像 李华
网站建设 2026/7/21 7:07:57

Intel NPU C++ API编译实战:从环境配置到CMake排坑指南

1. 项目概述&#xff1a;当Intel NPU遇上C&#xff0c;编译为何成了拦路虎&#xff1f;最近在折腾Intel最新的神经处理单元&#xff08;NPU&#xff09;加速库&#xff0c;想用C API写点高性能的推理应用。本以为照着官方文档一路cmake、make就能轻松跑起来&#xff0c;结果现实…

作者头像 李华
网站建设 2026/7/21 7:07:22

C++实现计算机功能:从编译器到内存管理的核心原理与实践

1. 从零到一&#xff1a;理解计算机实现的本质 当我们谈论“计算机的实现”时&#xff0c;很多人会立刻想到复杂的电路、闪烁的指示灯和成堆的代码。但作为一个写了十几年C的老码农&#xff0c;我更愿意把它看作一个“翻译”和“抽象”的过程。计算机本身&#xff0c;那个由硅…

作者头像 李华