Qt中的网络客户端

目录

HttpClient

http报文相关

HttpClient发送报文格式

x-www-form-urlencoded:

multipart/form-data

raw

binary

QUrl

QNetworkAccessManager

Http-Get

Http-Post

http-post:form-data

ftp-up

ftp-down

QDesktopServices


HttpClient

http报文相关

URL是为了 统一的命名网络中的一个资源(URL不是单单为了HTTP协议而定义的,而是网络上的所有的协议都可以使用) ;因此URL有以下特点:

  • URL是可移植的。(所有的网络协议都可以使用URL)

  • URL的完整性。(不能丢失数据,比如URL中包含二进制数据时,如何处理)

  • URL的可阅读性。(希望人能阅读)

    因为一些历史的原因URL设计者使用US-ASCII字符集表示URL。(原因比如ASCII比较简单;所有的系统都支持ASCII) 。

    http报文

    http报文是面向文本的,报文中每一个字段都是一些ASCII码串,各个字段的长度是不确定的 。http有两类报文:请求报文 响应报文 。

使用GET方法时,请求参数和对应的值附加在URL后面,利用一个问号("?")代表URL的结尾与请求参数的开始,传递参数长度受限制,例如: /index.jsp?id=100&op=bind 。

1.请求行

          请求行由请求方法字段、URL字段和HTT协议版本字段组成;空格隔开eg:GET /index.html HTTP/1.1

        HTTP请求的方法:GET POST HEAD PUT DELETE OTIONS TRACE CONNECT

       GET:一般客户端从server读取信息;请求参数和值附加在URL后面,?隔开。传递参数长度受限。eg:/etccharging?id=erdfwsaxnjdcdcd&secret=qw2dccbhcv;

        POST:可以传递更多的信息给服务器,将参数封装在HTTP请求数据中,可以传递大量数据,可用来传文件。

2.消息头部

        请求头部以键值对组成,一行一对,分号隔开,主要包含通知Server关于Client的请求信息;如:   

        User-Agent:产生请求的浏览浏览器类型;

        Accet:Client端可识别的内容列表

        Host:请求的主机名。

3.空行

        最后一个请求头之后是一个空行、发送回车符和换行符通知服务器请求头结束,是完整的Http报文必须格式(据此可以设计解析报文)。

4.请求正文

        请求数据不在GET方法中使用,一般POST中主要使用,通常设置与此相关头Content-Type 和Content-Length

HttpClient发送报文格式

multipart/form-data、x-www-form-urlencoded、raw、binary

x-www-form-urlencoded:

1,它是post的默认格式,使用URLencode转码方法。包括将name、value中的空格替换为加号;将非ascii字符做百分号编码;将input的name、value用‘=’连接,不同的input之间用‘&’连接 。

2、百分号编码:比如汉字‘武’吧,他的utf8编码在十六进制下是0xE69CA6,占3个字节,把它转成字符串‘E69CA6’,变成了六个字节,每两个字节前加上百分号前缀,得到字符串“%E6%9C%A6”,变成九个ascii字符,占九个字节。把这九个字节拼接到数据包里,这样就可以传输“非ascii字符的 utf8编码的 十六进制表示的 字符串的 百分号形式”

3,同样使用URLencode转码,这种post格式跟get的区别在于,get把转换、拼接完的字符串用‘?’直接与表单的action连接作为URL使用,所以请求体里没有数据;而post把转换、拼接后的字符串放在了请求体里 不会在浏览器的地址栏显示,稍微安全一些。

multipart/form-data

1、对于一段utf8编码的字节,用application/x-www-form-urlencoded传输其中的ascii字符没有问题,但对于非ascii字符传输效率就很低了(汉字‘武’从三字节变成了九字节),因此在传很长的字节(如文件)时应用multipart/form-data格式。smtp等协议也使用或借鉴了此格式。

2、此格式表面上发送一段一句话和一个文件,请求体如下

同时请求头里规定了Content-Type: multipart/form-data;

boundary=----WebKitFormBoundarymNhhHqUh0p0gfFa8

可见请求体里不同的input之间用一段叫boundary的字符串分割,每个input都有了自己一个小headerÿ

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值