构造http请求的几种方式(附源码)

这篇具有很好参考价值的文章主要介绍了构造http请求的几种方式(附源码)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。


前言

博主个人社区:开发与算法学习社区

博主个人主页:Killing Vibe的博客

欢迎大家加入,一起交流学习~~

一、form表单构造http请求

form (表单) 是 HTML 中的一个常用标签. 可以用于给服务器发送 GET 或者 POST 请求.

form 的重要参数:

  • action: 构造的 HTTP 请求的 URL 是什么.
  • method: 构造的 HTTP 请求的 方法 是 GET 还是 POST (form 只支持 GET 和 POST).

input 的重要参数:

  • type: 表示输入框的类型. text 表示文本, password 表示密码, submit 表示提交按钮.
  • name: 表示构造出的 HTTP 请求的 query string 的 key. query string 的 value 就是输入框的用户
    输入的内容.
  • value: input 标签的值. 对于 type 为 submit 类型来说, value 就对应了按钮上显示的文本.
 <form method="get" action="/collect">
     <input type="text" name="today">
     <input type="text" name="result">
     <button>提交</button>
</form>
 <form method="post" action="/collect">
    <input type="text" name="today">
    <input type="text" name="result">
    <button>提交</button>
</form>

以下是/collect资源,支持get和post请求:

构造http请求的几种方式(附源码)

打开所在的页面,输入,并点击提交(以post为例子):

构造http请求的几种方式(附源码)

打开开发者工具的网络面板可以观察到:

请求头和响应头为:

构造http请求的几种方式(附源码)

请求体为:构造http请求的几种方式(附源码)
get方法同理,只是请求体中的数据去到了请求头中变成查询字符串了。

二、ajax构造http请求

从前端角度, 除了浏览器地址栏能构造 GET 请求, form 表单能构造 GET 和 POST 之外, 还可以通过 ajax的方式来构造 HTTP 请求. 并且功能更强大.

ajax 全称 Asynchronous Javascript And XML, 是 2005 年提出的一种 JavaScript 给服务器发送
HTTP 请求的方式.
特点是可以不需要 刷新页面/页面跳转 就能进行数据传输.

在 JavaScript 中可以通过 ajax 的方式构造 HTTP 请求.

<!DOCTYPE html>
<html lang="zh-hans">
<head>
    <meta charset="UTF-8">
    <title>发送有请求体的 ajax 请求</title>
</head>
<body>
    <script src="/js/ajax-send-request-body.js"></script>
</body>
</html>

以下是js代码:

// 1. 创建 XMLHttpRequest 对象
var xhr = new XMLHttpRequest()
// 2. 调用 open 方法设置要访问的 url
xhr.open('post', '/collect')
// 3. 默认异步处理响应. 需要挂在处理响应的回调函数.
xhr.onload = function() {
    console.log(xhr)
    console.log(this)
    console.log(this.status)
   console.log(this.getResponseHeader('location')) // header 中的 name 不区分大小写
   console.log(this.responseText)
}

// 区别在这里, 调用 setRequestHeader 设置请求头。设置类型是text类型, 也可以是application/x-www-form-urlencoded 类型
xhr.setRequestHeader('Content-Type', 'text/killingvibe')
// 4. 调用 send 方法发送 http 请求
xhr.send('我随便写,按照 content-type 的格式去写就行')

地址栏输入http://127.0.0.1:8080/ajax-send-request-body.html 后,打开网络面板,我们可以看到三个请求包,

构造http请求的几种方式(附源码)

拓展:

发送 application/json 数据,只需要将上述代码下面改成如下:

// 调用 setRequestHeader 设置请求头
httpRequest.setRequestHeader('Content-Type', 'application/json');
// 4. 调用 send 方法发送 http 请求
httpRequest.send(JSON.stringify({
name: 'zhangsan',
age: 18
}));

三、Java socket构造http请求

所谓的 “发送 HTTP 请求”, 本质上就是按照 HTTP 的格式往 TCP Socket 中写入一个字符串.
所谓的 “接受 HTTP 响应”, 本质上就是从 TCP Socket 中读取一个字符串, 再按照 HTTP 的格式来解析.
我们基于 Socket 的知识, 完全可以构造出一个简单的 HTTP 客户端程序, 用来发送各种类型的 HTTP 请求.

客户端代码:

public class MyHttpClient {
    public static void main(String[] args) throws Exception {
        // 只能进行一次请求-响应的 HTTP 客户端
        // 主机                  127.0.0.1
        // 端口(进程)           8080
        // 资源路径              /hello.html
        try (Socket socket = new Socket("127.0.0.1", 8080)) {
            // 准备 HTTP 请求内容
            // 文本   String

            // 格式:请求行
            String requestLine = "GET /hello.html HTTP/1.0\r\n";
            // 请求头:完全可以没有,但必须一个空行结尾
            String requestHeader1 = "Name: killingvibe\r\n\r\n";  // 请求头中共有 1对 key-value
            String requestHeader2 = "Name: killingvibe\r\nAge: 1999\r\n\r\n";    // 请求头中共有 2对 key-value
            String requestHeader3 = "\r\n"; // 请求头中共有 0 对 key-value
            // 请求体,GET 是没有请求体

            // 最终的请求 —— 要发送给服务器的东西
            String request = requestLine + requestHeader3;

            // 发送服务器的过程
            byte[] requestBytes = request.getBytes("ISO-8859-1");   // 字符集编码

            // 发送(数据会经由 TCP、IP、以太网发送给服务器)
            OutputStream os = socket.getOutputStream();
            os.write(requestBytes);
            os.flush();

            // 请求既然已经发送,我们要做的就是等待响应
            InputStream is = socket.getInputStream();
            Scanner scanner = new Scanner(is, "UTF-8"); // 响应的前面字符集应该是 ISO-8859-1,后边是 UTF-8
            while (scanner.hasNextLine()) {
                String line = scanner.nextLine();
                System.out.println(line);
            }
        }
    }
}

服务端代码:

public class MyHttpServer {
    public static void main(String[] args) throws Exception {
        // 我们也监听在 8080 端口上
        try (ServerSocket serverSocket = new ServerSocket(8080)) {
            while (true) {
                Socket socket = serverSocket.accept();  // 三次握手完成

                // 读取用户的请求 :咱这里就不管用户的请求是啥了,一律采用相同的方式返回响应

                // 发送响应
                // Content-Type: 浏览器应该按照什么格式来看到我们响应的资源内容的(资源内容放在响应体中)
                // 响应体(资源的内容)
                String responseBody = "<h1>Welcome MyHttpServer</h1>";
                byte[] responseBodyBytes = responseBody.getBytes("UTF-8");
                int contentLength = responseBodyBytes.length;

                System.out.println("发送响应");
                String response = "HTTP/1.0 200 OK\r\n"
                        + "Server: killingvibeServer\r\n"
                        + "Content-Type: text/plain; charset=utf-8\r\n"       // 响应体的类型
                        + "Content-Length: " + contentLength + "\r\n"        // 响应体的长度
                        + "\r\n";

                byte[] responseBytes = response.getBytes("ISO-8859-1");
                OutputStream os = socket.getOutputStream();
                // TCP 是面向字节流的一种协议,所以只要按顺序发即可,不要管分几次发送
                os.write(responseBytes);    // 先发送前面部分(响应行 和 响应头)
                os.write(responseBodyBytes);    // 再发送响应体
                os.flush();

                // 发送完成之后,直接关闭 TCP 连接(短连接的处理模式)
                socket.close();
            }
        }
    }
}

控制台打印如下:

构造http请求的几种方式(附源码)

总结

以上就是构造http请求的三种方式,总结应该还算到位,相关步骤都写在了代码注释里面,觉得有帮助可以点赞收藏,有什么不足之处欢迎私信博主。文章来源地址https://www.toymoban.com/news/detail-406436.html

到了这里,关于构造http请求的几种方式(附源码)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包赞助服务器费用

相关文章

  • Java实现HTTP请求的几种方式-CloseableHttpClient(三)

    Java实现HTTP请求的几种方式-CloseableHttpClient(三)

    CloseableHttpClient是在HttpClient的基础上修改更新而来的,这里还涉及到请求头token的设置(请求验证),利用fastjson转换请求或返回结果字符串为json格式,当然上面两种方式也是可以设置请求头token、json的,这里只在下面说明。 基于第一章的测试接口,建立以下程序 创建客户端

    2023年04月20日
    浏览(83)
  • Java实现HTTP请求的几种方式-HttpURLConnection(一)

    在实际开发过程中,我们经常需要调用对方提供的接口或测试自己写的接口是否合适。很多项目都会封装规定好本身项目的接口规范,所以大多数需要去调用对方提供的接口或第三方接口(短信、天气等)。 准备两个项目: 项目A: 服务提供者 项目B:服务消费者 在项目A中

    2024年02月16日
    浏览(13)
  • hutool Http 工具发送POST请求的几种方式。

    Hutool是一个Java工具库,提供了丰富的功能模块,包括HTTP请求发送。以下是使用Hutool发送POST请求的几种方式: 使用HttpUtil.post方法: 使用HttpUtil.post方法可以发送简单的POST请求,示例如下: 使用HttpUtil.createPost方法: 使用HttpUtil.createPost方法可以创建一个HttpPost对象,然后设置

    2024年02月13日
    浏览(13)
  • http请求和响应格式说明,http的get和post请求方式说明,http的请求体body的几种数据格式

    http请求和响应格式说明,http的get和post请求方式说明,http的请求体body的几种数据格式

    一个HTTP请求报文由 请求行(request line)、请求头部(header)、空行和请求数据 4个部分组成, 请求报文的一般格式 1、第一行必须是一个请求行(request-line),用来说明请求类型,要访问的资源以及所使用的HTTP版本 2、紧接着是一个请求头(header),用来说明服务器要使用的附加信息

    2024年02月02日
    浏览(14)
  • java发送http请求的几种方式,调用第三方接口的方法:HttpUtil、HttpURLConnection等

    参考:https://blog.csdn.net/yubin1285570923/article/details/126225347 put请求 post带请求头 get、delete类似… 使用JDK原生提供的net,无需其他jar包,代码如下: 需要用到commons-httpclient-3.1.jar,maven依赖如下: 看一下我实际应用的例子 需要用到httpclient-4.5.6.jar,maven依赖如下: RestTemplate 是由

    2024年01月18日
    浏览(18)
  • http的请求体body的几种数据格式

    http的请求体body的几种数据格式

    http的请求体body的几种数据格式:multipart/form-data;application/x-www-from-urlencoded;raw;binary key - value 格式,主要用来上传文件,它会将表单的数据处理成一条消息,以标签为单元,用分隔符分开。当上传的字段是文件时,会有Content-Type来说明文件类型;content-disposition,用来说明

    2024年02月08日
    浏览(11)
  • js fetch请求中断的几种方式

    js fetch请求中断的几种方式

    这是官方标准手段,真正意义的阻止请求(不支持ie) 后端接口设置的两秒返回数据 默认结果: 解开定时器后: 通过promise,成功用resolve返回,失败用reject返回(浏览器上,请求依然会发出,并得到响应) 第一种方法: 运行结果: 第二种方法:

    2024年02月12日
    浏览(14)
  • 接口测试-关于postman的几种参数请求方式

    接口测试-关于postman的几种参数请求方式

    (1)POST的数据类型 对于post请求方式,一般都是要对请求发送相应的一些参数的,而参数的注入一般填写在Body中。  如上图所示,在Body中,有多种类型选择: none:一般都不使用 form-data:  对于form-data,是采用键值对的方式进行存储,即将该表单的数据组织成Key-Value形式,

    2024年02月12日
    浏览(15)
  • 使用OkHttp发送POST请求的几种方式

    本文将介绍 OkHttp 客户端的基本用法。 主要介绍 OkHttp 3.x 版本中发送Post请求的几种方式。 使用 FormBody.Builder 构造基本的 RequestBody , 包含两个参数:用户名、密码,发送 POST请求。 如果要对请求进行身份验证,可以使用 Credentials.basic 构建器向请求头中添加凭据。 下面代码给

    2024年02月13日
    浏览(14)
  • Web:前端常用的几种Http请求GET和POST样例

    Web:前端常用的几种Http请求GET和POST样例

    1、简述 在Web开发过程中,少不了发起Http请求服务端的接口数据,在不同的框架中使用了不同的Http请求方式,常用的请求有fetch、 ajax、 axios、XMLHttpRequest、request,以下样例仅供参考。 2、Fetch Fetch API 是一种 JavaScript API,是一种基于 Promise 的现代API,用于在网络中发送和接收

    2024年02月07日
    浏览(10)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包