这是我改变代理的方式:
QNetworkProxy proxy;
proxy.setType(QNetworkProxy::HttpProxy);
proxy.setHostName("ip");
proxy.setPort(8008);
QNetworkProxy::setApplicationProxy(proxy);
Run Code Online (Sandbox Code Playgroud)
如果我在创建WebView之前执行它,它可以正常工作.但如果我在QWebView的生命周期内更改代理,它根本不会加载任何网站.什么是在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)
请告诉我哪里出错了.
处理时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以便我只能启动相应的计时器?
一种可能的解决方案可能是实现一个请求队列,并且只有最大可能的连接来处理,但我正在寻找一个更清洁的解决方案
我有两个获取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) 我正在尝试将我的应用程序生成的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) 我有一个项目将加载一个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) 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服务器并读取文件,但它变得很垃圾,我做错了什么?
我正在使用 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中的方法?或者有没有其他方法可以根据名称删除数据?
有没有办法检查是否使用Qt 拔掉电缆?
我知道Ip adress我想要联系,起初我正在考虑做ping request这个Ip Adress,但对于这个简单的任务来说似乎太复杂了.
所以我想也许,有一个简单的功能可以做到这一点QNetwork library.
我在互联网上搜索,但所有解决方案都没有测试一个特定的IP.
谢谢你的帮助.
我想获取网页的源(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.