HTTP请求与响应&curl命令

HTTP

什么是HTTP协议?

在我们进行网页的浏览过程中,我们不断地通过浏览器向对应的服务器发送请求,并且将服务器响应回来的内容下载并渲染到页面上,最终形成所看到的页面。而指导浏览器和服务器进行请求与响应的就是HTTP协议。

HTTP的请求

在Git Bash环境下 运行以下代码

curl -X POST -d "1234567890" -s -v -H "Frank: xxx" -- "https://www.baidu.com"

最终出现了如下图的代码,这就是HTTP的请求内容

 POST / HTTP/1.1  --请求行
 Host: www.baidu.com   请求头--{
 User-Agent: curl/7.63.0
 Accept: */*
 Frank: xxx
 Content-Length: 10
 Content-Type: application/x-www-form-urlencoded }--请求头
       -- 空行
 [10 bytes data] --上传的数据

现在我们对上面的HTTP请求的组成进行分析:

第一部分:请求行

POST / HTTP/1.1
请求行的组成为:请求方式 请求路径(路径包括查询参数,但不包含锚点) 协议/协议版本

第二部分:请求头

 Host: www.baidu.com
 User-Agent: curl/7.63.0
 Accept: */*
 Frank: xxx
 Content-Length: 10
 Content-Type: application/x-www-form-urlencoded

请求头的内容主要是关于此次请求的一些信息,这些信息由多组键值对组成。

第三部分:空行

 Content-Type: application/x-www-form-urlencoded

 [10 bytes data]

可以看出上面这行代码中间有一个 空行 ,这是HTTP请求的第三部分,没有太多的含义,主要用于分割第二部分和第四部分。

第四部分:请求数据(此部分非必须)

[10 bytes data] //这行代码就是传入的数据"1234567890"

HTTP的请求方式

  • GET :请求指定的页面信息,并返回实体主体。
  • HEAD :类似于 GET 请求,只不过返回的响应中没有具体的内容,用于获取报头
  • POST :向指定资源提交数据进行处理请求(例如提交表单或者上传文件)。数据被包含在请求体中。POST 请求可能会导致新的资源的建立和/或已有资源的修改。
  • PUT : 从客户端向服务器传送的数据取代指定的文档的内容。
  • PATCH :是对 PUT 方法的补充,用来对已知资源进行局部更新 。
  • DELETE :请求服务器删除指定的页面。
  • OPTIONS :允许客户端查看服务器的性能。
  • CONNECT :HTTP/1.1 协议中预留给能够将连接改为管道方式的代理服务器。
  • TRACE :回显服务器收到的请求,主要用于测试或诊断。
    其中 GET POST HEAD 是HTTP1.0定义的
    其他请求方法则是在HTTP1.1中新增的

HTTP的响应

在Git Bash环境下 运行以下代码

curl -X POST -d "1234567890" -s -v -H "Frank: xxx" -- "https://www.baidu.com"

以下的内容即为此次请求的HTTP响应

 HTTP/1.1 302 Found --状态行
 Connection: Keep-Alive 响应头--{
 Content-Length: 17931
 Content-Type: text/html
 Date: Tue, 23 Jul 2019 09:21:19 GMT  
 Etag: "54d9748e-460b"
 Server: bfe/1.0.8.18 }--响应头
            -- 空行
 [3824 bytes data]  --响应实体

现在我们对上面的HTTP响应的组成进行分析:

第一部分:状态行

HTTP/1.1 302 Found
状态行的组成主要是:
协议/协议版本 状态码 状态码对应的信息

第二部分:响应头

 Connection: Keep-Alive
 Content-Length: 17931
 Content-Type: text/html
 Date: Tue, 23 Jul 2019 09:21:19 GMT
 Etag: "54d9748e-460b"
 Server: bfe/1.0.8.18

响应头主要的内容是该次响应的一些信息,也是由多组键值对组成。

第三部分:空行

和HTTP请求的结构类似,响应的第三部分也是空行,主要用于分割

第四部分:响应实体

 [3824 bytes data]

上面这行代码指代的就是该次请求获取的响应实体,是一个大小为3824字节的信息。

Chrome中使用开发者工具查看请求和响应信息

1.F12 进入 开发者工具
2.进入Network
3.输入网址进入网页,或者刷新当前网页
4.选择文件


image.png

5.Requset Headers查看请求的内容;Respons Headers查看响应的内容
6.点击view source !!!

curl

curl的作用

curl是linux系统中利用url规则在命令行中进行文件传输的工具。支持文件的上传、下载功能,是比较常用到的linux命令。在进行开发过程中,可以使用curl对接口进行测试,获取接口返回的数据。

curl的使用方法

  • 通过curl获取页面:直接接一个url
$ curl https://www.baidu.com
  • 发送GET请求:直接在url中通过?传递查询参数
$ curl https://www.baidu.com/s?wd=dd&ie=UTF-8
  • 发送POST请求:
$ curl -X POST -d "1234567890"  -- "https://www.baidu.com"

-X POST :通过 -X 来自定义指定一个请求方式
-d "1234567890" : -d 可以传入POST请求时要上传的数据

  • 抓取一个页面到文件中
$ curl -o file.html https://www.baidu.com
  • 连接重定向自动跳转
$ curl -L https://www.baidu.com

假如:https://www.baidu.com重定向后,通过 -L 可以自动跳转到新的网页中。

curl的命令参数

详见:https://www.explainshell.com/explain/1/curl

你可能感兴趣的:(HTTP请求与响应&curl命令)