如何判断QWebPage
不加载特定类型的资源,如js,css或png?
有一个我有QOBJects的应用程序,它们都包含QNetworkAccessManager.我知道它建议只针对每个应用程序,但由于我在同一时间做了6个以上的调用,我需要像这样.所以,这就是我启动线程的方式.
FileUploader *fileUploader = new FileUploader(_fileList);
QThread *fileUploaderThread = new QThread();
fileUploader->moveToThread(fileUploaderThread);
// uploader > model
connect(fileUploader, SIGNAL(progressChangedAt(int)), _model, SLOT(reportProgressChanged(int)), Qt::QueuedConnection);
connect(fileUploader, SIGNAL(statusChangedAt(int)), _model, SLOT(reportStatusChanged(int)), Qt::QueuedConnection);
// uploader > its thread
connect(fileUploader, SIGNAL(canceled()), fileUploaderThread, SLOT(quit()), Qt::QueuedConnection);
connect(fileUploader, SIGNAL(finished()), fileUploaderThread, SLOT(quit()), Qt::QueuedConnection);
// uploader > this
connect(fileUploader, SIGNAL(canceled()), this, SLOT(deleteFinishedUploader()), Qt::QueuedConnection);
connect(fileUploader, SIGNAL(finished()), this, SLOT(deleteFinishedUploader()), Qt::QueuedConnection);
connect(fileUploader, SIGNAL(finishedCurrentUpload()), this, SLOT(uploadNextFileOrFinish()), Qt::QueuedConnection);
// thread > this
connect(fileUploaderThread, SIGNAL(finished()), this, SLOT(checkIfAllThreadsAreFinished()), Qt::QueuedConnection);
connect(fileUploaderThread, SIGNAL(finished()), this, SLOT(deleteFinishedThread()), Qt::QueuedConnection);
// this > uploader
connect(this, SIGNAL(cancel()), …
Run Code Online (Sandbox Code Playgroud) 我正在使用Qt 4.6.3和以下无法工作的代码
QStringList userInfo;
QNetworkRequest netRequest(QUrl("http://api.stackoverflow.com/1.1/users/587532"));
QNetworkReply *netReply = netman->get(netRequest);
// from here onwards not working
netReply->waitForReadyRead(-1);
if (netReply->isFinished()==true)
{userInfo << do sth to reply;}
return userInfo;
Run Code Online (Sandbox Code Playgroud)
因为这个函数返回一个空的QStringList,应用程序崩溃了.如何等待请求完成,然后在一个函数内处理回复
我在执行http请求时如何设置超时?
我有这个代码:
{
QNetworkRequest request;
request.setUrl(QUrl("http://www.foo.com"));
request.setRawHeader("User-Agent", USER_AGENT.toUtf8());
request.setRawHeader("Accept-Charset", "ISO-8859-1,utf-8;q=0.7,*;q=0.7");
request.setRawHeader("Accept",
"text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8");
request.setRawHeader("Accept-Language", "en-us,en;q=0.5");
request.setRawHeader("Connection", "Keep-Alive");
reply = m_networkManager->get(request);
QEventLoop loop;
connect(reply, SIGNAL(finished()), &loop, SLOT(quit()));
loop.exec();
}
Run Code Online (Sandbox Code Playgroud)
我在何处以及如何为请求设置某种超时?
我试图从我的Qt应用程序执行Twitter的基本身份验证.我使用QNetworkAccessManager.但我找不到任何帮助.
但我发现了一个名为qsoapmanager的程序,它通过标头传递base64中的凭据.也许我可以通过在QNetowrkRequest中设置标头来实现QNAM.但我找不到方法.
在qsoapman源代码中,header设置如下:
QHttpRequestHeader header;
header.setValue( "Authorization", QString( "Basic " ).append( auth.data() ) );
Run Code Online (Sandbox Code Playgroud)
我能用QNAM/QNReq做到这一点还是有更好的方法?
我是Qt的新手,我想为我的软件实现FTP和SFTP支持.当我用Google搜索时,我发现Qt不存在sftp库,但QNetworkAccessManager应该可以实现.然后我尝试了解如何构建自定义协议或类似的东西,但没有弄清楚如何做到这一点.
有人知道我该怎么做吗?
谢谢,迈克尔
我一直在尝试使用QNetworkRequest将文件上传到服务器时遇到一些问题.我一直在使用这个链接(http://qt-project.org/forums/viewthread/11361)作为模板,但我仍然得到POST错误(203具体).这是我到目前为止所拥有的.
void MainWindow::processFile(){
QByteArray postData;
//Look below for buildUploadString() function
postData = mReport->buildUploadString();
QUrl mResultsURL = QUrl("http://" + VariableManager::getInstance()->getServerIP() + "/uploadFile.php");
QNetworkAccessManager* mNetworkManager = new QNetworkAccessManager(this);
QString bound="margin"; //name of the boundary
QNetworkRequest request(mResultsURL); //our server with php-script
request.setRawHeader(QString("Content-Type").toAscii(),QString("multipart/form-data; boundary=" + bound).toAscii());
request.setRawHeader(QString("Content-Length").toAscii(), QString::number(postData.length()).toAscii());
connect(mNetworkManager, SIGNAL(finished(QNetworkReply*)), this, SLOT(printScriptReply(QNetworkReply*))); //This slot is used to debug the output of the server script
mNetworkManager->post(request,postData);
}
QByteArray ReportParser::buildUploadString()
{
QString path = VariableManager::getInstance()->getReportDirectory();
path.append("\\\\");
path.append(getReportFileName());
QString bound="margin";
QByteArray data(QString("--" + bound + …
Run Code Online (Sandbox Code Playgroud) 我正在使用以下代码与服务器发出HTTPS请求.
QNetworkRequest request;
//request.setSslConfiguration(QSslConfiguration::defaultConfiguration());
request.setUrl(QUrl("https://www.someurl.com/"));
QNetworkReply *reply = manager->get(request);
Run Code Online (Sandbox Code Playgroud)
一切似乎与我的测试服务器上的工作,但我想知道如果要推荐它来设置defaultConfiguration(取消注释第二行)或没有网络API使用SSL时自动检查所有defaultConfigurations?如果它检查,如果我添加一个自定义配置,它也会这样做吗?我的意思是,是否需要将自定义配置附加到默认配置列表中?例如:
QSslConfiguration SslConfiguration(QSslConfiguration::defaultConfiguration());
QList<QSslCertificate> certificates = SslConfiguration.caCertificates();
certificates.append(QSslCertificate::fromData(certificate.toAscii(), QSsl::Pem));
SslConfiguration.setCaCertificates(certificates);
request.setSslConfiguration(SslConfiguration);
Run Code Online (Sandbox Code Playgroud)
编辑:我想补充一点,我正在使用Symbian平台.
我有一段代码在4.8中工作但现在我需要将它移植到Qt5(beta2)
这应该发生:
我想将一些数据发布到网络服务器,网址应该是这样的"http:// server/actions.php"然后我的字段("Action"-string和"data"字符串(json))应该使用post发送到服务器.未在网址中编码
QUrl params;
// The data to post
QVariantMap map;
map["Title"]="The title";
map["ProjectId"]="0";
map["Parent"]="0";
map["Location"]="North pole";
map["Creator"]="You";
map["Group"]="a group";
QByteArray data = Json::serialize(map); //the map is converted to json im a QByteArray
params.addEncodedQueryItem("Data",data);
params.addQueryItem("Action", "Update");
QNetworkRequest Request(QUrl("http://server.com/actions.php"));
Request.setHeader(QNetworkRequest::ContentTypeHeader, "application/x-www-form-urlencoded");
NetManager->post(Request,params.encodedQuery());
Run Code Online (Sandbox Code Playgroud)
现在,我可能不会在第一时间做到这一点,(它工作在4.8)但真正的问题是addEncodedQueryItem和addQueryItem现在从Qt5开始消失了,我不知道应该用它替换它们.
我已经阅读了新文档并看到了新的QUrlQuery,但我无法弄清楚如何在我的情况下使用它.
我正在尝试使用QNetworkAccessManager将http多部分上传到专用服务器.
multipart由描述正在上传的数据的JSON部分组成.
从串行QIODevice读取数据,该QIODevice对数据进行加密.
这是创建multipart请求的代码:
QHttpMultiPart *multiPart = new QHttpMultiPart(QHttpMultiPart::FormDataType);
QHttpPart metaPart;
metaPart.setHeader(QNetworkRequest::ContentTypeHeader, "application/json");
metaPart.setHeader(QNetworkRequest::ContentDispositionHeader, QVariant("form-data; name=\"metadata\""));
metaPart.setBody(meta.toJson());
multiPart->append(metaPart);
QHttpPart filePart;
filePart.setHeader(QNetworkRequest::ContentTypeHeader, QVariant(fileFormat));
filePart.setHeader(QNetworkRequest::ContentDispositionHeader, QVariant("form-data; name=\"file\""));
filePart.setBodyDevice(p_encDevice);
p_encDevice->setParent(multiPart); // we cannot delete the file now, so delete it with the multiPart
multiPart->append(filePart);
QNetworkAccessManager netMgr;
QScopedPointer<QNetworkReply> reply( netMgr.post(request, multiPart) );
multiPart->setParent(reply.data()); // delete the multiPart with the reply
Run Code Online (Sandbox Code Playgroud)
如果p_encDevice是QFile的一个实例,则该文件上传得很好.
如果使用专用加密QIODevice(串行设备),则从我的自定义设备读取所有数据.但是QNetworkAccessManager :: post()没有完成(挂起).
如果设备是顺序的(例如套接字,但不是文件),则应在设备发出finished()后调用QNetworkAccessManager :: post().
不幸的是我不知道那是怎么回事.
请指教.
编辑:
QIODevice根本没有完成()插槽.更重要的是,如果没有调用QNetworkAccessManager :: post(),那么从我的自定义IODevice读取根本不会发生,因此设备将无法发出这样的事件.(赶上22?)
编辑2:
QNAM似乎根本不适用于顺序设备.请参阅有关qt-project的讨论.
编辑3:
我设法"欺骗"QNAM让它认为它是从非顺序设备读取,但搜索和重置功能阻止搜索.这将有效,直到QNAM真正尝试寻求. …