QtWebkit加载html页面,html中会有很多的请求,比如<img id="testImg" src="http://*.jpg" width="200" height="200" title="test图片"/>等等,如果想截获这些请求,然后自定义应答...

1.定义一个类,继承QNetworkAccessManager(请求)
#ifndef NETWORKACCESSMANAGER_H
#define NETWORKACCESSMANAGER_H
 
#include <QtNetwork/QNetworkAccessManager>
#include <QtNetwork/QNetworkProxy>
#include <QtNetwork/QNetworkReply>
#include <QtNetwork/QNetworkRequest>
 
class NetworkAccessManager : public QNetworkAccessManager
{
 
    Q_OBJECT
 
public:
    explicit NetworkAccessManager(QNetworkAccessManager *manager, QObject *parent);
 
protected:
    QNetworkReply * createRequest(QNetworkAccessManager::Operation operation,
                       const QNetworkRequest &request, QIODevice *device);
};
 
#endif // NETWORKACCESSMANAGER_H
 
#include "networkaccessmanager.h"
 
#include <QtCore/QDebug>
 
NetworkAccessManager::NetworkAccessManager(QNetworkAccessManager *manager, QObject *parent)
    : QNetworkAccessManager(parent)
{
    setCache(manager->cache());
    setCookieJar(manager->cookieJar());
    setProxy(manager->proxy());
    setProxyFactory(manager->proxyFactory());
}
 
QNetworkReply * NetworkAccessManager::createRequest(QNetworkAccessManager::Operation operation,
                   const QNetworkRequest &request, QIODevice *device)
{
    if (request.url().scheme() != "http")
            return QNetworkAccessManager::createRequest(operation, request, device);
    else
     return new BlobReply(request.url);
}
2.定义一个类,继承QNetworkReply(应答)
#ifndef BLOBREPLY_H
#define BLOBREPLY_H
 
#include <QtNetwork/QNetworkReply>
 
class BlobReply : public QNetworkReply
{
    Q_OBJECT
 
public:
    BlobReply(const QUrl &url);
    void abort();
 
protected:
    qint64 readData(char *data, qint64 maxSize);
 
};
 
#endif // BLOBREPLY_H
 
#include "blobreply.h"
 
#include <QtCore/QDebug>
 
BlobReply::BlobReply(const QUrl &url)
    : QNetworkReply()
{
    qDebug() << url.toString();
}
 
void BlobReply::abort()
{
 
}
 
qint64 BlobReply::readData(char *data, qint64 maxSize)
{
    return -1;
}
3.在初始化webview的时候,实例化上面的东东
QNetworkAccessManager *oldManager = ui->webView->page()->networkAccessManager();
NetworkAccessManager *newManager = new NetworkAccessManager(oldManager, this);
ui->webView->page()->setNetworkAccessManager(newManager);
ui->webView->page()->setForwardUnsupportedContent(true);
 
如有技术问题,请咨询博主QQ...
 
http://blog.sina.com.cn/s/blog_671732440100y3xx.html

qt截获html请求(继承QNetworkAccessManager和QNetworkReply)的更多相关文章

  1. QT之Http请求

    今天我们介绍一下QT的http请求,这里有post和get两种方式 一.post请求方式:参数分为网址和具体请求值两个部分,有时候还需要设置头信息,看具体情况定 void MainWindow::se ...

  2. 使用Qt发送HTTPS请求

    示例代码: #include "mainwindow.h" #include "ui_mainwindow.h" #include <QNetworkAc ...

  3. nginx截获客户端请求

    使用nginx可以直接截获客户端请求,以下是最近收集的一些判断截获的信息的配置,为查看方便记录如下: 1.根据UA和cookie判断当前是移动端还是PC端访问: if ($http_host !~ & ...

  4. 用qt creator创建可继承ui类

    https://jingyan.baidu.com/article/5d368d1efa2dd73f60c05786.html 用qt creator创建可继承ui类 听语音 | 浏览:1657 | ...

  5. 与 QWidget 有关的 Qt 可视化组件的继承关系图

    与 QWidget 有关的 Qt 可视化组件的继承关系图

  6. Qt之HTTP上传/下载(继承QNetworkAccessManager,包括使用了authenticationRequired认证信号)

    效果 QNetworkAccessManager DownloadNetworkManager::DownloadNetworkManager(QObject *parent) : QNetworkA ...

  7. Qt发送HTTP请求

    http://hi.baidu.com/cmdmac/item/c45b9f0fb0d0938802ce1bbd 最近在搞QT跟服务器交互的东西,自然少不了发送和接受HTTP请求.在网上找了一些资料知 ...

  8. QT https post请求(QNetworkRequest要设置SSL证书,而SSL证书认证有三种,实测成功)

    以VS开发为例.因为https访问需要用到SSL认证,而QT默认是不支持SSL认证,所以在使用之前必须先做一些准备工作: 需要安装OpenSSL库: 1.首先打开http://slproweb.com ...

  9. QT https post请求(QNetworkRequest要设置SSL证书,而SSL证书认证有三种)

    因为https访问需要用到SSL认证,而QT默认是不支持SSL认证,所以在使用之前必须先做一些准备工作: 需要安装OpenSSL库: 1.首先打开http://slproweb.com/product ...

随机推荐

  1. 输入框改变placeholder字体颜色

    ::-webkit-input-placeholder {  color: red;}:-moz-placeholder {  color: red;}::-moz-placeholder{color ...

  2. Web静态服务器

    Web静态服务器 编程微刊 Web静态服务器-1-显示固定的页面 #coding=utf-8 import socket def handle_client(client_socket): " ...

  3. springboot 使用传统方式部署

    spring boot默认创建出来的应用程序是内嵌web容器的,直接运行jar文件就可以的,但通常我们也需要将程序部署到tomcat中,这需要做如下改进: 1.pom.xml修改 打包方式需要修改成w ...

  4. DEA上安装和使用checkstyle,findbugs,visualVM,PMD插件

    ##安装插件步骤: 1.打开settings 2.选择plugins 3.点击"Browse repositories" 4.搜索对应内插件,点击"install&quo ...

  5. C# powshell 调用

    原文:C# powshell 调用 本文告诉大家如何在 ps 脚本使用 C# 代码. 首先创建一个 C# 的控制台项目,注意修改输出为类库. 现在的 Powershell 还不支持 dotnet co ...

  6. Struts2——(1)Struts2入门

    1.Struts2历史,与Struts1的关系 两者的内部基于的原理完全不同,Struts2是基于WebWork发展而来的框架. 两者都是基于MVC实现的框架. Struts1是Apach推出的. W ...

  7. js小贴士

    1.在js中 定义方法 方法名第一个字母小写.如果是定义类 则第一个字母大学 2.如果想在a标签中点击 触发js方法 而不跳转页面 可以使用类似   <a href="javascri ...

  8. WinEdt && LaTex(五)—— 内容的排版

    1. 无序列表 需要的环境是\begin{itemize} \end{itemize} \begin{itemize} \item hello \item world \end{itemize} 2. ...

  9. 【STL】关联容器 — hashtable

    C++ 11哈希表已被列入标准列.hashtable这是hash_set.hash_map.hash_multiset.hash_multimap的底层机制.即这四种容器中都包括一个hashtable ...

  10. postgresql && .net core 使用空间数据

    这里主要讲遇到的一些报错 增删改查 && 计算部分基本和sql server的空间数据操作一毛一样,感谢微软大大的倾情支持,直接看demo即可(- ̄▽ ̄)- 前往sql server ...