| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> 网络协议 -> Qt中使用Http通讯下载文件 -> 正文阅读 |
|
[网络协议]Qt中使用Http通讯下载文件 |
目录 前提在某些功能中,会使用到通过Http通讯从网址上下载资源信息。 在这里,我说的资源信息是指以.png、.mp4以及.doc为后缀的文件。只是做一个简单的功能实现。 需要实现的功能:根据网址url将文件下载到指定位置,并实时显示下载进度。 HTTP通讯下载下载文件,首先需要将文件下载下来。 为了方便使用,一般情况下,我们会将接口设置成简单明了的形式。 这里,我们设置了三个参数
参数讲解: enumType:当前表示下载的方式,是http?https strRemoteFile:url的完整路径 strLocalFile:下载到指定位置的全路径 我们在使用过程中,对外开放这一个接口,就完全可以实现下载功能啦! 请求http文件对于HTTP的使用,无外乎就是这样一个流程:创建会话,建立连接,建立请求,数据操作 对于下载功能来说,在创建会话之前,需要分析传入的url网址。 分解URL网址使用WinHttpCrackUrl方式,可以将一个给定的url分解,设置到**URL_COMPONENTS**这个结构体中。 这一步骤是必须要操作的!
说明:这里需要注意的是512,如果你的url网址太长了,需要修改这个数值。否则会产生错误! 创建会话对于一个应用程序,WinHttpOpen函数初始化WinHTTP函数的使用,并返回一个WinHTTP会话句柄。
参数说明: 参数1:一个指向字符串变量的指针,该变量包含调用WinHTTP函数的应用程序或实体的名称。一般我们会采用null使用。 参数2:利用默认的代办服务器 参数3:如果参数2未设置为WINHTTP_ACCESS_TYPE_NAMED_PROXY,则此参数必须设置为WINHTTP_NO_PROXY_NAME。 参数4:如果参数2未设置为“WINHTTP_ACCESS_TYPE_NAMED_PROXY”,该参数必须设置“WINHTTP_NO_PROXY_BYPASS” 参数5:一般采用null 创建连接WinHttpConnect函数指定HTTP请求的初始目标服务器,并为该初始目标返回一个HTTP会话的HINTERNET连接句柄。
参数说明: 参数1:WinHttpOpen的返回参数 参数2:该字符串包含HTTP服务器的主机名 参数3:该字符串包含HTTP服务器的端口号 参数4:该参数为保留参数,且必须为0!!! 创建请求在创建请求时,我们需要注意,这里要根据是http通讯还是https通讯设置不同的标识。
WinHttpOpenRequest函数创建一个HTTP请求句柄。
发送请求WinHttpSendRequest函数向HTTP服务器发送指定的请求。
参数说明: 参数1:是WinHttpOpenRequest的句柄 参数2:如果没有附加的头文件,这个参数可以是WINHTTP_NO_ADDITIONAL_HEADERS。 参数3:一个无符号长整数值,包含附加头的字符长度。如果该参数为-1L且pwszHeaders不为NULL,则该函数假设pwszHeaders为NULL结束,并计算其长度。一般我们只用0代替就可以了。 参数4:如果没有可选的数据要发送,这个参数可以是WINHTTP_NO_REQUEST_DATA。 参数5:如果没有可选数据要发送,此参数可以为零。 参数6:发送的总数据的长度 参数7:指针指向一个指针大小的变量,该变量包含一个应用程序定义的值,该值与请求句柄一起传递给任何回调函数。这里默认是0即可。 接收http请求响应WinHttpReceiveResponse函数等待接收由WinHttpSendRequest发起的HTTP请求的响应 当winhttpreceiverresponse成功完成时,状态码和响应头已经被接收,应用程序可以使用WinHttpQueryHeaders来检查。
到这里我们就可以获取文件的长度了! 文件操作获取文件长度
根据获取的文件长度,创建一个本地文件进行存储数据了。 实时下载文件WinHttpQueryDataAvailable函数返回可用WinHttpReadData读取的数据量(以字节为单位)。 使用while循环的方式,逐字节获取,并实时写入到文件中
最后,数据写完之后,关闭文件,并关闭http通讯! 总结看到这里,使用http通讯方式下载文件就完成了。 难点1:在下载https文件时,会有证书的问题,不过没关系,这种验证方式我已经说明了,只要按照我的方式肯定可以获取到,前提是你的证书必须要合法,否则我也无法帮助你啦! 难点2:下载文件时,一定要先创建文件路径,再存储。最好采用CreateFile的方式。
我是糯诺诺米团,一名C++开发程序媛~ |
|
网络协议 最新文章 |
使用Easyswoole 搭建简单的Websoket服务 |
常见的数据通信方式有哪些? |
Openssl 1024bit RSA算法---公私钥获取和处 |
HTTPS协议的密钥交换流程 |
《小白WEB安全入门》03. 漏洞篇 |
HttpRunner4.x 安装与使用 |
2021-07-04 |
手写RPC学习笔记 |
K8S高可用版本部署 |
mySQL计算IP地址范围 |
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 | -2024/11/25 20:43:58- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |