标签: qnetworkaccessmanager

17
推荐指数
1
解决办法
6943
查看次数

即使删除线程,线程数也会增加很多

有一个我有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)

c++ qt multithreading qnetworkaccessmanager

13
推荐指数
2
解决办法
1211
查看次数

QNetworkReply等待完成

我正在使用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,应用程序崩溃了.如何等待请求完成,然后在一个函数内处理回复

networking qt qt4 qnetworkaccessmanager

12
推荐指数
3
解决办法
2万
查看次数

QNetworkReply和QNetworkAccessManager在http请求中超时

我在执行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)

我在何处以及如何为请求设置某种超时?

c++ timeout qnetworkaccessmanager

12
推荐指数
1
解决办法
1万
查看次数

使用Qt进行基本身份验证(QNetworkAccessManager)

我试图从我的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 qnetworkaccessmanager

11
推荐指数
2
解决办法
2万
查看次数

如何用Qt/QNetworkAccessManager(C++)实现SFTP

我是Qt的新手,我想为我的软件实现FTP和SFTP支持.当我用Google搜索时,我发现Qt不存在sftp库,但QNetworkAccessManager应该可以实现.然后我尝试了解如何构建自定义协议或类似的东西,但没有弄清楚如何做到这一点.

有人知道我该怎么做吗?

谢谢,迈克尔

c++ qt sftp qnetworkaccessmanager

11
推荐指数
2
解决办法
7333
查看次数

使用Qt QNetworkRequest上传文件

我一直在尝试使用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)

qt file-upload qnetworkaccessmanager

9
推荐指数
1
解决办法
8242
查看次数

QNetworkRequest和默认SSL配置

我正在使用以下代码与服务器发出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平台.

ssl qt qnetworkaccessmanager qnetworkrequest

8
推荐指数
1
解决办法
1万
查看次数

Qt5使用QUrl/QNetworkRequest将数据发布到服务器

我有一段代码在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,但我无法弄清楚如何在我的情况下使用它.

qt qnetworkaccessmanager qurl qt5

8
推荐指数
1
解决办法
8512
查看次数

QNetworkAccessManager:从串行QIODevice发布http multipart

我正在尝试使用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()没有完成(挂起).

我在QHttpPart的文档中读到:

如果设备是顺序的(例如套接字,但不是文件),则应在设备发出finished()后调用QNetworkAccessManager :: post().

不幸的是我不知道那是怎么回事.

请指教.

编辑:

QIODevice根本没有完成()插槽.更重要的是,如果没有调用QNetworkAccessManager :: post(),那么从我的自定义IODevice读取根本不会发生,因此设备将无法发出这样的事件.(赶上22?)

编辑2:

QNAM似乎根本不适用于顺序设备.请参阅有关qt-project的讨论.

编辑3:

我设法"欺骗"QNAM让它认为它是从非顺序设备读取,但搜索和重置功能阻止搜索.这将有效,直到QNAM真正尝试寻求. …

post qt http qt4 qnetworkaccessmanager

7
推荐指数
1
解决办法
4464
查看次数