Qt5 http协议 获取网页数据

一、HTTP协议

    Qt网络模块提供的API可以实现基于HTTP(Hyper Text Transport Protocol)协议的应用程序。此外, Qt还可以实现多种基于

  协议的应用程序, 如位于OSI 7层应用层的FTP、DNS、SNMP。

    Qt4.x版本提供了QHttp和QFtp类以支持HTTP和FTP协议。从Qt 5.0 版本开始, 删除了QHttp 和 QFtp 类, 通过QNetworkReply

  、QNetworkAccessManager、QNetworkRequest类实现基于HTTP和FTP协议的应用程序。除了HTTP和FTP协议外, 该类还可以实

  现高层(OSI 7层中的上层)网络应用程序。

    ① QNetworkRequest类, 通过网络请求是使用。而且, 可以请求包含头信息和加密(encryption)的头信息。 QNetworkRequest可

  以通过URL上传和下载HTTP、FTP的本地文件。

    ② QNetworkAccessManager  类用于管理网络请求和响应, 可以在网络上管理请求 和 响应的设置, 使用代理和缓存,

  处理网络请求和响应过程中触发的信号。

    ③ QNetworkReply类用于在网络上处理响应, 它是QIODevice的子类, 支持同步异步的方式。

二、代码示例

  下面是一个获取百度天气的代码:

  ① 环境为vs2013 + qt5.7

  ② 创建Qt5 Gui QApplication工程

  ③ 在ui中添加textBrowser, 用于展示获取到的数据

    

  ④ 源码展示

  

/*头文件*/
#ifndef NETWORKWIDGET_H
#define NETWORKWIDGET_H

#include <QtNetwork/QNetworkAccessManager>
#include <QtNetwork/QNetworkRequest>
#include <QtNetwork/QNetworkReply>
#include <QtWidgets/QWidget>
#include <QTextCodec>
#include <QString>
#include <QUrl>
#include "ui_networkWidget.h"

class networkWidget : public QWidget
{
    Q_OBJECT

public:
    networkWidget(QWidget *parent = 0);
    ~networkWidget();

private Q_SLOTS:
    void slot_replayFinished(QNetworkReply *reply);

private:
    Ui::networkWidgetClass ui;

    QNetworkAccessManager *m_manager;
    //QNetworkReply *m_replay;
};

#endif // NETWORKWIDGET_H
/*实现文件*/
#include "networkWidget.h"

networkWidget::networkWidget(QWidget *parent)
    : QWidget(parent)
{
    ui.setupUi(this);
    this->setWindowFlags(Qt::FramelessWindowHint);
    m_manager = new QNetworkAccessManager(this);//新建QNetworkAccessManager对象
    connect(m_manager, SIGNAL(finished(QNetworkReply    *)), this, SLOT(slot_replayFinished(QNetworkReply*))); //关联信号和槽
    m_manager->get(QNetworkRequest(QUrl("http://apistore.baidu.com/microservice/weather?cityid=成都")));//发送请求
}

networkWidget::~networkWidget()
{

}

void networkWidget::slot_replayFinished(QNetworkReply *reply)
{
    QTextCodec *codec = QTextCodec::codecForName("utf8");
        //使用utf8编码, 这样可以显示中文
    QString str = codec->toUnicode(reply->readAll());
    ui.textBrowser->setText(str);
    reply->deleteLater();//最后要释放replay对象
}
#include "networkWidget.h"
#include <QtWidgets/QApplication>

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    networkWidget w;
    w.show();
    return a.exec();
}

三、运行程序崩溃

    编译能够通过, 运行程序崩溃,崩溃在发送请求第十行,  最初以为是内存泄漏才造成的堆区损坏, 查看官方文档用法发现我们的代码

  根本没有错, 最后用Qt Creator创建工程测试发现我们的代码完全没有问题, 获取数据成功。 最后确定肯定是vs配置中没有Qt5的依赖

  库。下面是错误截图:

    

  解决办法: 右击工程-> 配置属性 -> 链接器 -> 输入 -> 附加依赖项, 发现依赖可以种包含的lib都是带d, 而我现在用的是debug模式, 所以我

       加入Qt5Core.lib、Qt5Gui.lib, 最后运行不在崩溃, 成功获取数据。

       Qt中的所有lib库都位于Qt的安装路径lib文件下, 如:C:\Qt\Qt5.7.0\5.7\msvc2013_64\lib

    注: 带d的库是用于debug模式, 不带d的是用于Release模式

    

四、结果展示

    

  

  

  

时间: 2024-12-28 18:02:40

Qt5 http协议 获取网页数据的相关文章

【转】如何在Windows+VS2005使用最新静态libcurl 7.35.0获取网页数据,支持HTTPS

地址: http://blog.csdn.net/hujkay作者:Jekkay Hu([email protected])关键词:Windows,curl,ssl,  visual c++ 2005, libcurl, https,网页抓取时间: 2014/2/18 1. 概述 由于Curl提供强大的网络功能,支持HTTP,HTTPS, DICT, FILE, FTP, FTPS, Gopher, HTTP, HTTPS, IMAP, IMAPS, LDAP, LDAPS, POP3, POP

[原创]利用爬虫技术获取网页数据,以及想要的指定数据

最近在公司做个系统,由于要获取网页的一些数据,以及一些网页的数据,所以就写的一个公用的HttpUtils.下面是针对乌云网我写的一个例子. 一.首先是获取指定路径下的网页内容. public static String httpGet(String urlStr, Map<String, String> params) throws Exception { StringBuilder sb = new StringBuilder(); if (null != params &&

在php中分别使用curl的post提交数据的方法和get获取网页数据的方法

在php中分别使用curl的post提交数据的方法和get获取网页数据的方法整理分享一下额,具体代码如下: (1)使用php curl获取网页数据的方法: $ch=curl_init(); //设置选项,包括URL curl_setopt($ch,CURLOPT_URL,"http://www.nettuts.com"); curl_setopt($ch,CURLOPT_RETURNTRANSFER,1); curl_setopt($ch,CURLOPT_HEADER,0); //执行

使用HttpClient进行Get方式通信(使用HttpGet获取网页数据)

1.项目结构 导入jar包 jar包去官网下载解压后项目新建lib目录,将解压包中的lib目录中的zip拷入项目lib目录文件夹,然后build path-->配置到项目中 2.TestGet.java package testhttpclient; import java.io.IOException; import org.apache.http.HttpEntity;import org.apache.http.HttpResponse;import org.apache.http.cli

VB中获取网页数据

以下是在Microsoft Visual Basic 6.0 中文版下做的 VB可以抓取网页数据,所用的控件是Inet控件. 第一步:单击工程-->部件 选择Microsoft Internet Transfer Control(SP6)控件. 第二步:布局界面显示 在界面里面拖动相对应的控件. 第三步 编码开始 Option Explicit Private Sub Command1_Click() If Text1.Text = "" Then MsgBox "请输

获取网页数据的例子

最近,1元购物比较火,这种众筹形式的购物,购买者出很小的费用,就能获得一个得到喜欢的物品.有人说这是个骗局,也有人趋之若鹜的每天在上面购物,这里不做评论.网易也做这个模式,名字是1元云购,1元夺宝. 网易云购 www.1yyg.com的网站上顶部有个累计参与人次的统计,对这个比较好奇,想着统计一个时间段参与人次的变化. 打开网站,加载页面的过程中,打开调试,查看network,注意不断重复的请求: 上面标注的这个请求不断的发送,网页上实时变化也就累计参与人次的统计,这样就确定了请求. 打开这个请

获取网页数据

描述: 将网页数据导入到表格中,在日常工作中经常会用到,此法的好处是省去了手动敲入的时间,如何快速的将网页数据导入到表格中成为了一个焦点问题,下面与大家 分享个比较常用的方法,大概的步骤就是调出新建WEB查询界面,输入网址并转到相应的页面,点击导入,然后等待.....接着设置导入数据的位置单元格, 确定即可.此法只能导入网页文字,图片是无法导入的. 步骤: Step 1:启动Excel2013,单击菜单栏--数据--获取外部数据--自网站. Step 2:弹出新建WEB查询界面,输入网站地址,转

C# 获取网页数据、获取本机IP

说明: (1) http://www.3322.org/dyndns/getip 这个网址可以获取本机IP,读取的内容就是本机IP (2)方法经测试,可以实现. (3)参考:http://www.cnblogs.com/ceachy/articles/CSharp_Retrive_Page_Document.html 两种方法: (1)使用WebClient private static string GetIP(String url) { WebClient MyWebClient = new

C#获取网页数据的两个函数

1.获取网页源码函数 1 string getPageText(string url) 2 { 3 string retVal = ""; 4 dtUpdate = DateTime.Now; 5 labMessage.Text = ""; 6 int pageNo = 1; 7 string strUrl = ""; 8 do 9 { 10 try 11 { 12 using (var wc = new WebClient()) 13 { 14