http报文结构与curl的使用方法

发布时间:2021-08-30 15:46:00 作者:chen
来源:亿速云 阅读:231

本篇内容介绍了“http报文结构与curl的使用方法”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!

http协议使用广泛,使用场景不必多说了。

http是应用层协议,基于tcp。如果要自己实现的话,应该先实现tcp部分的功能,然后按http的协议实现约定的功能。这种需求有时可能会出现,比如读者想写一个http服务器,那就要了解http协议。

但是,这一个流程,从http数据包,到tcp包(加tcp头),再到ip包(加ip头),以及它的逆向过程(解包过程),都有现成的库来实现,读者需要做的只是怎么更好的使用起来。

小程这里介绍的也不是什么复杂的http协议的实现,而只是介绍一下http请求与响应的数据结构,以及怎么便利地发送http请求。

本文介绍http请求与响应的报文结构,以及curl的使用。

先让读者看一个直观的示例:在百度的搜索框中,敲入“helloworld”并回车,这时会发起一个http请求,用charles来抓包,可以看到这样的请求与响应的信息: 
http报文结构与curl的使用方法

关于charles的使用,小程之前有介绍到,读者可以关注“广州小程”微信公众号,并查阅“软件基础”菜单项的内容。

从数据包来看,有一个GET方法,返回了200的状态码,等等。

但这里混合了请求与响应的信息,如果分开来看,请求与响应各自有什么数据结构呢?

(1)请求报文

http请求数据,使用的结构是这样的:

{请求行,请求头,请求体}

小程引用网上的一张图,这张图描绘了这个结构: 
http报文结构与curl的使用方法

参照上图,请求行是这个样子:

GET /index.html HTTP/1.1 
或者: 
POST /xiaocheng/about.html HTTP/1.1 

注意,请求行一般不包括host的地址,而host地址存放在请求头中。

然后是请求头,分为多行,每一行是一个键值对(key: value的格式),比如请求头是这个样子的: 
http报文结构与curl的使用方法

最后是请求体,一般来GET方法是不带请求体的,因为所有内容都放到请求行(特别是url中)或请求头中了,一般来说POST方法需要带请求体,比如在iTunes下载一个APP时,POST请求数据是这样的: 
http报文结构与curl的使用方法
http报文结构与curl的使用方法

(2)响应报文

响应数据的结构,也可以分三部分:

{响应行,响应头,响应体}

这里给一个响应实例: 
http报文结构与curl的使用方法
http报文结构与curl的使用方法

响应行,也叫状态行,包括http的版本、状态码与状态描述。

响应头跟请求头一样,由一行一行的key-value构成。

响应体一般就是请求方想要的数据了,但响应体不一定会存在,比如HEAD请求方法时不返回响应体(这时响应行就是请求方想要的)。

http请求与响应数据,还有其它的一些知识,比如GET与POST的区别、返回404/403/303表示什么意思,等等,这些知识读者可以具体搜索一下,小程这里不展开了。

在简单介绍过http请求与响应报文的结构后,小程介绍一个工具,这个工具可以发起http请求,这个工具就是curl。

(3)curl的使用

小程使用的是macos,mac自带了curl工具。

curl的功能也算强大的,提供了系列的选项。这里只介绍一些常规的使用方式。

get请求,与保存

curl www.baidu.com 


curl "http://172.17.21.197:54321?pa1=hello"


// 保存,下载 

curl -o file.html www.baidu.com 

curl -o i.jpg http://img3.douban.com/lpic/s4549903.jpg 


// -A 仿造ie与运行平台 

curl -A "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0)" www.baidu.com 


// -e 仿造入口链接(即referer,用于盗链)

curl -A "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0)" -e "www.google.com" www.baidu.com  


// -x 使用代理 

curl -x a.b.c.d:54321 http://google.com 


// -D 保存cookie到文件 

curl www.baidu.com -o aa.txt -D cookie.txt 


// -b 读取文件并当作cookie数据来请求

curl www.baidu.com -b cookie.txt  


// -H 设置请求头,这里设置了cookie跟ua

curl -H "Cookie: install_id=14621691626; sid_guard=\"0eb878191489e4247f643672c932c814|1504782359|2592000|Sat\054 07-Oct-2017 11:05:59 GMT\"; \n User-Agent: xxx/1.5.6 (iPhone; iOS 10.2; Scale/2.00)" "https://xxx.yy.com/…" 

post

// -d 请求体 

curl -d "user=nickwolfe&password=12345" http://www.linuxidc.com/login.cgi 


curl -d "key=jet" 192.168.2.32:54321

post,以表单的方式(multipart/form-data)

// "file"为key名,随便起,后面为文件路径(包括文件包)

curl -F "file=@./myfile.ok" "http://172.17.xx.xx:54321" 

“http报文结构与curl的使用方法”的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识可以关注亿速云网站,小编将为大家输出更多高质量的实用文章!

推荐阅读:
  1. http 请求报文和应答报文
  2. 网络协议报文结构与抓包示例

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

http

上一篇:如何解决VS2015中没有报表项ReportViewer的问题

下一篇:php如何获取远程图片并下载保存到本地

相关阅读

您好,登录后才能下订单哦!

密码登录
登录注册
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》