QT实现HTTP协议传输

一.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)

获取数据常用方法:

  • 14
    点赞
  • 23
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值