标签: qnetworkaccessmanager

如何使用QT QWebView管理代理

这是我改变代理的方式:

QNetworkProxy proxy;
proxy.setType(QNetworkProxy::HttpProxy);
proxy.setHostName("ip");
proxy.setPort(8008);

QNetworkProxy::setApplicationProxy(proxy);
Run Code Online (Sandbox Code Playgroud)

如果我在创建WebView之前执行它,它可以正常工作.但如果我在QWebView的生命周期内更改代理,它根本不会加载任何网站.什么是在QT中改变代理的正确方法?

谢谢.

proxy qt qt4 qwebview qnetworkaccessmanager

4
推荐指数
1
解决办法
4227
查看次数

QT显示从网络访问管理器获得的图像

我正在尝试显示使用networkaccess manager获取的get请求中获取的图像.我能够编译甚至能够运行它.但是我无法在Qlabel中显示图像.

QNetworkAccessManager* nam;

void MainWindow::on_pushButton_clicked()
{
    nam = new QNetworkAccessManager(this);
    QUrl url("http://i.imgur.com/Uw7Fk.jpg");
    QNetworkReply* reply = nam->get(QNetworkRequest(url));
    if (reply->error() == QNetworkReply::NoError)
    {
        QImageReader imageReader(reply);
        imageReader.setAutoDetectImageFormat (false);
        QImage pic = imageReader.read();
        ui->label_2->setPixmap(QPixmap::fromImage(pic));

     }


}
Run Code Online (Sandbox Code Playgroud)

请告诉我哪里出错了.

c++ qt qt4 qnetworkaccessmanager qtnetwork

4
推荐指数
1
解决办法
2939
查看次数

在Qt中处理网络超时

处理时QNetworkReply,规定使用计时器中止连接.

这是我目前的代码:

void ImageDownloader::download(QString imgUrl){    
  this->timeoutTimer = new QTimer(this);
  this->timeoutTimer->setSingleShot(true);
  this->timeoutTimer->setInterval(15000);
  connect(this->timeoutTimer, SIGNAL(timeout()), this, SLOT(timeout()));

  QUrl requestUrl(imgUrl);
  QNetworkRequest nwRequest(requestUrl);
  this->imageNwReply = this->nam->get(nwRequest);
  connect(imageNwReply,SIGNAL(finished()),this,SLOT(imgDownloaded()));
  connect(imageNwReply, SIGNAL(downloadProgress(qint64,qint64)), this->timeoutTimer, SLOT(start()));
  this->timeoutTimer->start();
}

void ImageDownloader::timeout(){
  qDebug()<<__FUNCTION__<<" Forced timeout!";    
  this->imageNwReply->abort();
}
Run Code Online (Sandbox Code Playgroud)

我面临的困惑是什么时候应该启动计时器?有时我必须从大约50个并发Get请求中进行,QNetworkAccessManager但由于存在最大并发连接的限制,有时会发生某些请求甚至在处理之前就超时.

是否有信号确切地知道何时开始处理请求,QNeworkAccessManager以便我只能启动相应的计时器?

一种可能的解决方案可能是实现一个请求队列,并且只有最大可能的连接来处理,但我正在寻找一个更清洁的解决方案

qt qnetworkaccessmanager

4
推荐指数
1
解决办法
5214
查看次数

Qt QNetworkAccessManager 和多个 QNetworkReply

我有两个获取QNetworkRequest。

我想处理来自不同方法的完成信号。

例如这是代码

  MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent), ui(new Ui::MainWindow)
{
    ui->setupUi(this);

    GetUserData();
    connect(nam, SIGNAL(finished(QNetworkReply*)), this, SLOT(GetUserDataCompleted(QNetworkReply*)));

    GetMessages();
    connect(nam, SIGNAL(finished(QNetworkReply*)), this, SLOT(GetMessagesCompleted(QNetworkReply*)));
}
Run Code Online (Sandbox Code Playgroud)

这是我的一个方法

我尝试过 replay->deleteLater(); 但结果相同

请给我一些有用的建议

void MainWindow::GetUserDataCompleted(QNetworkReply *replay)
{
    if(replay->error() == QNetworkReply::NoError)
    {
        QString getData = replay->readAll();
        QMessageBox msg;

        if(getData == "1")
        {
            msg.setText("User Is not Exits");
        }
        else
        {
            QDomDocument doc;

            if(doc.setContent(getData))
            {
                QDomElement domElem = doc.documentElement();

                QDomNode n = domElem.firstChild();
                while(!n.isNull()) {
                    QDomElement e = n.toElement(); // try to convert the node to an element.
                    if(!e.isNull()) …
Run Code Online (Sandbox Code Playgroud)

qt http qnetworkaccessmanager web

4
推荐指数
1
解决办法
4656
查看次数

如何使用Qt保存cookie?

我正在尝试将我的应用程序生成的cookie保存到磁盘位置,例如C:\Users\Username\AppData\Local\MyCompany\MyApp.我已经实现了一个webview并且已经完成了对我的简单浏览器的编码,最后要做的就是保存cookie.

我可以qDebug()我从webapp获得的cookie,他们显示cookie是正确形成但我是a)不确定从那里去哪里和b)不是100%确定如何创建cookiejar类的子类?

下面我在MainWindow构造函数中创建我的cookiejar对象

view = new QWebView(this);
jar = new QNetworkCookieJar;
view->page()->networkAccessManager()->setCookieJar(jar);
Run Code Online (Sandbox Code Playgroud)

在我的回复槽中,我可以看到回复中包含的cookie,我试图保存它,但没有任何反应,我没有收到运行时错误.在这方面没有太多的东西,并且已经看到一些帖子,其中的指令是创建子类QNetworkCookieJar,但之前没有在Qt/C++中创建子类.

有没有一种简单的方法来存储cookie,我不是在寻找任何花哨的东西.Cookie只是确保在登录页面上勾选了一些复选框.

// SLOT that accepts the read data from the webpage
void MainWindow::slotReplyFinished(QNetworkReply *reply){

    if(reply->isFinished()){
        QVariant variantCookies = reply->header(QNetworkRequest::SetCookieHeader);
        QList<QNetworkCookie> cookies = qvariant_cast<QList<QNetworkCookie> >(variantCookies);
        qDebug() << "Cookies reply: " << cookies;
        QNetworkCookie cookie; //Create a cookie



        jar = new QNetworkCookieJar;
        //view->page()->networkAccessManager()->setCookieJar(jar);
        jar->setCookiesFromUrl(cookies, reply->request().url());
        //qDebug() << "Saved cookies: " << jar->getAllCookies();
    }

    qDebug() << "Network reply: " << reply->errorString() << reply->error() << reply->request().url();
 }
Run Code Online (Sandbox Code Playgroud)

c++ cookies qt qnetworkaccessmanager

4
推荐指数
1
解决办法
8365
查看次数

如何识别QNetworkReply完成信号的响应请求,以响应您在QtNetwork中执行多个请求的时间?

我有一个项目将加载一个HTTP页面,解析它,然后根据从第一页收到的数据打开其他页面.

由于Qt的QNetworkAccessManager以异步方式工作,似乎我应该能够通过继续发出HTTP请求一次加载多个页面,然后处理响应将按照回复的顺序发生并且将由甚至循环.

我有一些问题,想弄清楚如何做到这一点:

首先,我在stackoverflow上的某个地方读到你应该只使用一个QNetworkAccess管理器.我不知道这是不是真的.

问题是我正在连接到单个QNetworkAccess管理器上的已完成插槽.如果我一次做多个请求,我不知道完成的信号响应的请求是什么.我不知道是否有办法检查从信号传递的QNetworkReply对象,以了解响应的响应是什么?或者我应该为每个请求实际使用不同的QNetworkAccessManager吗?

这是我现在如何将各种东西链接在一起的一个例子.但是我知道当我在时间上做多个请求时这不起作用:

from PyQt4 import QtCore,QtGui,QtNetwork

class Example(QtCore.QObject):
    def __init__(self):
        super().__init__()
        self.QNetworkAccessManager_1 = QtNetwork.QNetworkAccessManager()
        self.QNetworkCookieJar_1 = QtNetwork.QNetworkCookieJar()
        self.QNetworkAccessManager_1.setCookieJar(self.QNetworkCookieJar_1)
        self.app = QtGui.QApplication([])
    def start_request(self):
        QUrl_1 = QtCore.QUrl('https://erikbandersen.com/')
        QNetworkRequest_1 = QtNetwork.QNetworkRequest(QUrl_1)
        #
        self.QNetworkAccessManager_1.finished.connect(self.someurl_finshed)
        self.QNetworkAccessManager_1.get(QNetworkRequest_1)
    def someurl_finshed(self, NetworkReply):
        # I do this so that this function won't get called for a diffent request
        # But it will only work if I'm doing one request at a time
        self.QNetworkAccessManager_1.finished.disconnect(self.someurl_finshed)
        page = bytes(NetworkReply.readAll())
        # Do something with it
        print(page)
        QUrl_1 = …
Run Code Online (Sandbox Code Playgroud)

qt http qnetworkaccessmanager

4
推荐指数
1
解决办法
2289
查看次数

QT QNetworkAccessManager从ftp服务器下载文件无法正常工作

    QNetworkAccessManager *nam = new QNetworkAccessManager();
    QUrl url2("ftp://127.0.0.1/test.txt/");
    url2.setPassword("12345");
    url2.setUserName("user");
    QNetworkRequest req(url2);


   QNetworkReply *reply = nam->get(req);
   QByteArray data = reply->readAll() ;
   qDebug() << data ;
Run Code Online (Sandbox Code Playgroud)

它连接到本地ftp服务器并读取文件,但它变得很垃圾,我做错了什么?

c++ ftp qt qnetworkaccessmanager qnetworkrequest

4
推荐指数
1
解决办法
8010
查看次数

如何使用 QNetworkAccessManager 发送 DELETE 请求?

我正在使用 QNetworkAccessManager 从服务器 POST、PUT 和 GET 数据。代码如下所示。

QNetworkAccessManager *manager = new QNetworkAccessManager(this);

connect(manager, SIGNAL(proxyAuthenticationRequired(const QNetworkProxy &, QAuthenticator *)), 
  SLOT(slotProxyAuthenticationRequired(const QNetworkProxy &, QAuthenticator *)));
connect(manager, SIGNAL(authenticationRequired(QNetworkReply *, QAuthenticator *)), 
  SLOT(slotAuthenticationRequired(QNetworkReply *, QAuthenticator *)));

QNetworkRequest request;

request.setUrl(m_url);
request.setRawHeader("User-Agent", "Qt NetworkAccess 1.3");

m_pReply = manager->get(request);
m_pReply = manager->post(request,"name=someName");
m_pReply = manager->put(request,"name=someName");
Run Code Online (Sandbox Code Playgroud)

我找不到请求的任何删除方法。是的,我找到了 manager->deleteResource(request)

但是有没有

manager->delete(request,"name=someName")
Run Code Online (Sandbox Code Playgroud)

Qt中的方法?或者有没有其他方法可以根据名称删除数据?

c++ rest qt qnetworkaccessmanager

4
推荐指数
1
解决办法
3457
查看次数

使用Qt测试本地连接

有没有办法检查是否使用Qt 拔掉电缆

我知道Ip adress我想要联系,起初我正在考虑做ping request这个Ip Adress,但对于这个简单的任务来说似乎太复杂了.

所以我想也许,有一个简单的功能可以做到这一点QNetwork library.

我在互联网上搜索,但所有解决方案都没有测试一个特定的IP.

谢谢你的帮助.

c++ qt qnetworkaccessmanager

4
推荐指数
1
解决办法
2313
查看次数

Qt - 获取互联网上托管的网页的源代码(HTML代码)

我想获取网页的源(HTML),例如StackOverflow的主页.

这是我到目前为止编码的内容:

QNetworkAccessManager manager;
QNetworkReply *response = manager.get(QNetworkRequest(QUrl(url)));

QString html = response->readAll(); // Source should be stored here
Run Code Online (Sandbox Code Playgroud)

但没有任何反应!当我尝试获取html字符串的值时,它是空的("").

那么该怎么办?我正在使用Qt 5.3.1.

html qt qnetworkaccessmanager qnetworkrequest qnetworkreply

4
推荐指数
3
解决办法
8930
查看次数