首先,我们要将视频网址发到我们的解析程序上,我用PHP做了一个解析程序,放到了网上。
以是我要让QT用post的办法将我们要解析的网址发送过去,然后网上的解析程序把解析完的下载网址再用json格式反回来给我们的QT程序,这样我们就能下载了。

这便是本节要搞的重点,经由搜索,QT中访问http网址要用这两个类:

QNetworkAccessManagerQNetworkRequest

第一个QNetworkAccessManager类,是网络的载体类,它卖力网络的要乞降通信管理。
而QNetworkRequest是一个卖力给QNetworkAccessManager发送起始要求的角色,它发起要求后QNetworkAccessManager就会开始进行处理并创建事宜。

phppost获取urlQT进修用http的post方法拜访URL并获取内容 HTML

以是我们要做的流程基本是:

0、定义一个全局的QNetworkAccessManager,然后设置旗子暗记槽相应它的事宜。

1、用QByteArray存储要post的参数。

2、用QNetworkRequest创建网络访问的要求

3、在QNetworkAccessManager槽事宜处理返回的数据

有个疑问:访问网络是自动创建一个新线程,还是壅塞当前哨程?

不管了,先做做看。

首先在mainwindow.h里定义私有变量

QNetworkAccessManager nam;

然后定义槽函数

private slots:void finishedSlot(QNetworkReply reply);

别忘了要先

#include <QtNetwork/QNetworkAccessManager>

然后在mainwindow的布局函数里创建它的实例并绑定槽函数:

nam = new QNetworkAccessManager(this); QObject::connect(nam, SIGNAL(finished(QNetworkReply)), this, SLOT(finishedSlot(QNetworkReply)));

记得一定要设置那个this,要不然就得手动delete它了。

然后实现槽相应函数:

void MainWindow::finishedSlot(QNetworkReply reply){ // 网络访问的槽相应函数 // HTTP状态码 QVariant statusCodeV = reply->attribute(QNetworkRequest::HttpStatusCodeAttribute); // 重定向了没有,如果有,这里便是重定向的网址 QVariant redirectionTargetUrl = reply->attribute(QNetworkRequest::RedirectionTargetAttribute); // 如果没有缺点发生 if (reply->error() == QNetworkReply::NoError) { //读取做事器返回的数据流(json) QByteArray bytes = reply->readAll(); // bytes //转换为字符串 QString string = QString::fromUtf8(bytes); echo(string); } else { // 发生了http缺点 echo(reply->errorString()); } reply->deleteLater();}

然后在“开始下载”按钮的点击事宜里布局post参数,并用post模式发起http访问。

void MainWindow::on_btn_startDownload_clicked(){ //点击了开始下载按钮 lb_statusText->setText("正在解析..."); ui->statusbar->addWidget(pb_statusProgress,1); QUrl url("为了安全,我在这里没有写要求网址。
"); QByteArray param; param.append("url="); param.append(ui->le_VideoUrl->text()); //设置要求头 QNetworkRequest request; request.setUrl(url); request.setHeader(QNetworkRequest::ContentTypeHeader, "application/x-www-form-urlencoded"); request.setHeader(QNetworkRequest::ContentLengthHeader, param.length()); nam_HTTP->post(request, param);}

到这里,用post模式访问http就基本成了,正常的运行结果是会返回一个JSON字符串。

但是,当我点击运行后,弹出来了好多这种类型的编译缺点:undefined reference to xxxxx啥啥啥的。

见鬼了,我了个去。


大概意思是找不到某个变量的定义。

但是检讨了半天,代码里始终是找不到缺点的。

而且网上的资料也没有详细说些要把稳的。

经由了再三的搜索,才创造,要修正工程配置文件,便是那个.pro文件,这个文件的第一行是: QT += core gui,这个时候,这个工程是没有网络访问权限的,统统的关于网络的类,都会被屏蔽,这才出的这些缺点,我们只须要把它改成QT += core gui network就可以了,也便是加一个network,保存,编译,成功。

粘贴一个网址,然后点击下载进行解析,一次运行成功。

得到json数据

下一节是下载视频流。