一、HTTP 请求:
HTTP 请求的格式:
第1部分: 动词 路径 协议/版本
第2部分: Key1: value1
第2部分: Key2: value2
第2部分: Key3: value3
.................................
第2部分: Key-n: value-n
第2部分: Content-Type: application/x-www-form-urlencoded
第2部分: Host: www.baidu.com
第2部分: User-Agent: curl/7.54.0
第3部分:(永远是一个回车)
第4部分: 要上传的数据(无数据上传时则为空,即没有第4部分)
//动词有 GET POST PUT PATCH DELETE HEAD OPTIONS 等,PUT整体更新上传的数据,PATCH部分更新上传的数据;这里的路径包括「查询参数」,但不包括「锚点」,如果你没有写路径,那么路径默认为 /
二、HTTP 响应:
HTTP 响应的格式:
第1部分: 协议/版本号 状态码 状态解释 (状态码对应的解释自行百度)
第2部分: Key1: value1
第2部分: Key2: value2
第2部分: Key3: value3
.................................
第2部分: Key-n: value-n
第2部分: Content-Type: text/html (Content-Type 标注了第 4 部分的格式)
第2部分:Content-Length: 4646 (第 4 部分的长度)
第3部分:(永远是一个回车)
第4部分: 要下载的内容
实例:
$ curl -s -v -H -- "https://www.baidu.com/s?wd=ff5#5"
请求的内容为:
> GET /s?wd=ff5 HTTP/1.1 //第1部分
> Host: www.baidu.com //第2部分
> User-Agent: curl/7.55.0 //第2部分
> Accept: */* //第2部分
> //第3部分
{ [5 bytes data] //第4部分
响应的内容为:
//以下为第1部分----
< HTTP/1.1 200 OK
//以下为第2部分----
< Accept-Ranges: bytes
< Cache-Control: no-cache
< Connection: Keep-Alive
< Content-Length: 227
< Content-Type: text/html
< Date: Tue, 03 Apr 2018 04:02:50 GMT
< Last-Modified: Fri, 30 Mar 2018 07:37:00 GMT
< P3p: CP=" OTI DSP COR IVA OUR IND COM "
< Pragma: no-cache
< Server: BWS/1.1
< Set-Cookie: BD_NOT_HTTPS=1; path=/; Max-Age=300
< Set-Cookie: BIDUPSID=8DB9741B1FF95D6E44CCC4027687056E; expires=Thu, 31-Dec-37 23:55:55 GMT; max-age=2147483647; path=/; domain=.baidu.com
< Set-Cookie: PSTM=1522728170; expires=Thu, 31-Dec-37 23:55:55 GMT; max-age=2147483647; path=/; domain=.baidu.com
< Strict-Transport-Security: max-age=0
< X-Ua-Compatible: IE=Edge,chrome=1
//以下为第3部分----
<
//以下为第4部分----
{ [227 bytes data]
三、用Chrome开发者工具查看 HTTP 请求、响应内容
如上图:打开 Network---刷新网页---选中第一个响应---查看 Request Headers,点击「view source」,Request Headers就是请求的前两部分
查看 Response Headers,点击「view source」,Response Headers就是响应的前两部分---查看 Response 或者 Preview,你会看到响应的第 4 部分
四、如何使用 curl 命令
get方式:
curl -s -v -H "Frank: xxx" -H "xxx:qqq" -- "https://www.baidu.com"
以上面实例说明curl的使用,
-s为不显示进度条,
-v:测试不加-v的情况下,只获取到网页内容,但是不显示请求与响应的内容;
-H:可以有多个,-H中的内容会成为请求中第2部分的内容;
-- URL:URL不加引号也能成功,‘--’ 不加也能;
post方式:
curl -X POST -d "1234567890" -s -v -H "Frank: xxx" -- "https://www.baidu.com"
-X POST:有-d "1234567890"的情况下不加-X POST仍然会已post方式请求。
自行测试:
curl -X POST -s -v -d "12346" -H "xx:yy" -H "yy:xx" -- "https://www.baidu.com/path?username=ff&password=123"