一.URL
1.URL简介:
在www(万维网)上,每个信息资源都有统一的且在网上唯一的地址,这个地址就是URL,他是www的统一资源定位标志,就是指网络地址。
2.URL语法:
一般语法格式为:protocol :// hostname[:port] / path / [;parameters][?query]#fragment
URL主要由四部分组成:协议,主机,端口,路径。
protocol: 协议,常见的协议有http、https、ftp
hostname: 主机名
port: 端口,省略时为协议默认端口,比如http协议默认端口为80
path: 路径,由零或多个"/"符号隔开的字符串,一般用来表示主机上的一个目录或文件地址
parameters: 参数,这是用于指定特殊参数的可选项
query: 查询,用于给动态网页传递参数
fragment: 信息片断,字符串,用于指定网络资源中的片段
3.URL编码
URL编码通常也叫做百分号编码,因为其编码方式非常简单,使用%百分号加上两位的字符-0123456789ABCDEF--代表一个字节的十六进制形式对于ASCII字符,字母a 在ASCII码中对应的字节是0x61,那么Url编码之后得到的就是%61,字母abc,URL编码后得到的就%61%62%63
对于非ASCII字符,RFC文档建议使用utf-8对其进行编码得到相应的字节,然后对每个字节执行百分号编码如“中文“使用UTF-8字符集得到的字节为0xE4 0xB8 0XAD 0XE6 0x96 0x87,经过U编码之后得到%E4%B8%AD%E6%96%87。
4.Qt中URL编码与解码
编码:
QString text("123456789abcdefg");
QByteArray urlText = text.toUtf8().toPercentEncoding();
//urlText为Url编码后的数据
解码:
QString text("123456789abcdefg");
QByteArray urlText = text.toUtf8().toPercentEncoding();
QByteArray Text2 = QByteArray::fromPercentEncoding(urlText);
//Text2为解码后的数据
二.HTTP协议传输
1.HTTP协议简介:
超文本传输协议(HTTP)是互联网上应用最广泛的一种网络协议,所有的WWW文件都得必须遵守这个标准,设计HTTP最初的目的是为了提供一种发布和接受HTML页面的方法。
2.HTTP协议数据格式
3.请求数据的方式
HTTP1.1目前支持7种请求方法:GET, POST, HEAD, OPTIONS, PUT, DELETE, TARCE。 在这里我们只描述GET和POST这两种方法
GET 请求获取由Request-URI所标识的资源。
POsT 在Request-URI所标识的资源后附加新的数据
HEAD 请求获取由 Request-URI所标识的资源的响应消息报头
OPTIONS 请求查询服务器的性能,或查询与资源相关的选项和需求
PUT 请求服务器存储一个资源,并用 Request-URI作为其标识。
DELETE 请求服务器删除由Request-URI所标识的资源。
TRACE 请求服务器回送收到的请求信息,主要用于测试或诊
GET方法请求数据
GET方法是默认的HTTP请求方法,我们日常用GET方法来提交表单数据,然而用GET方法
提交的表单数据中经过简单的编码,同时它将作为URL的一部分向Web服务器发送。
POST方法请求数据
POST方法是GET方法的一个代替方法,它主要向Web服务器提交表单数据,尤其
是大批量的数据,通过POST方法提交表单数据时,数据不是作为URL请求的一部
分而是放到附属体里作为标准数据发送给服务器。
GET与POST的区别:
1.POST本地更为安全:首先数据不会被缓存,不会保存在服务器日志以及浏览记录中,所以通过POST请求的数据无法设置为书签。数据包本身在网络上传输安全性与Get相同,HTTP协议都
是明文传输。HTTPS协议会对数据包进行SSL加密更为安全。
2.GET比POST更快:POST包含更多的头部行,为了描述附属体内的数据,POST在真正接收数据之前会先将头部行发送给服务器确认,然后才真正发送数据。
3.GET会缓存数据。
常见误区
GET传参长度限制理解:HTTP协议并未有规定URL长度限制,也没有规定数据包长度限制
URL的限制是由浏览器和Web服务器限制,不同浏览器限制不同。IE最大长度为2083byte,Chrome最大长度为8182byte
POST安全性更高的理解:将表单数据放在附届体中提交并不会对数据包安全性有所提高,传输时的安全性由数据包的加密方式决定
三.常用类介绍
1.QNetworkRequest:
网络连接请求类(如果想发送请求需要用到QNetworkAccessManager)
2.QNetworkAccessManager
网络访问管理器,使应用程序发送网络请求并接受响应
常用HTTP请求
GET:
发布一个请求以获取目标请求的内容,并返回个打开的新的QNetworkReply对象,当新的数据到达时,该对象会发出readyRead()信号
POST:
发送一个HTTP POST请求到请求指定的目的地并返回一个打开的新的QNetworkReply对象,该
对象将包含服务器发送的应答。数据设备的内容将被上传到服务器
3.QNetworkReply
网络回复类,主要由QNetworkAccessManager生成,用于接收网络数据
HTTP通信常用信号:
当网络中有数据发送给你时会触发该信号一void readyRead()
当所有的数据接收完成时会触发该信号一void finished()
当网络连接出现异常时会触发该信号一void error(QNetworkReply::NetworkError code)
获取数据常用方法: