Qt QNetworkAccessManager发送GET两次
我有一些类可以干扰HTTP服务器。 以下是完整的代码部分:Qt QNetworkAccessManager发送GET两次,qt,tcp,qnetworkaccessmanager,Qt,Tcp,Qnetworkaccessmanager,我有一些类可以干扰HTTP服务器。 以下是完整的代码部分: const QString someClass::BASEURL = QString("http://127.0.0.1:8000/?"); someClass::someClass(): manager(new QNetworkAccessManager(this)) { } QNetworkReply *someClass::run(QString request) { qDebug() << req
const QString someClass::BASEURL = QString("http://127.0.0.1:8000/?");
someClass::someClass():
manager(new QNetworkAccessManager(this))
{
}
QNetworkReply *someClass::run(QString request)
{
qDebug() << request;
QEventLoop loop;
QObject::connect(manager, SIGNAL(finished(QNetworkReply*)), &loop, SLOT(quit()));
QNetworkReply *res = manager->get(QNetworkRequest(QUrl(BASEURL + request)));
loop.exec();
return res;
}
const QString someClass::BASEURL=QString(“http://127.0.0.1:8000/?");
someClass::someClass():
经理(新QNetworkAccessManager(本))
{
}
QNetworkReply*someClass::run(QString请求)
{
qDebug()get(QNetworkRequest(QUrl(BASEURL+request));
loop.exec();
返回res;
}
调用run()方法时,有时(不是每次)两个GET请求是相同的
(我用tcpdump看了看)。qDebug()执行一次。我的代码中有错误吗?我看不出任何可能的解释 更新: 经过一些tcpdump ouptut研究。
在第二个请求之后,它向FIN发送带有RST标志的数据包作为应答。 但我仍然看不到触发问题的TCP流与未触发问题的TCP流之间的差异。
这里是wireshark的输出。进展顺利。已与复制。
我受够了。可能是服务器大小的一些协议错误,我不确定。或者可能是QNetworkAccessManager中的一个bug。您是否尝试过在本地范围内不使用QEventLoop的情况下将代码重写为更异步的代码?在我看来,您的代码看起来不错,但是您可能会遇到一些奇怪的QT错误,因为它在本地范围内排队处理请求和使用QEventLoop。我通常通过以下方式使用QNetworkAccessManager发送GET和POST请求:
void someClass::run(QString request)
{
qDebug() << request;
QObject::connect(manager, SIGNAL(finished(QNetworkReply*)), this, SLOT(on_request_complete(QNetworkReply*)));
QNetworkReply *res = manager->get(QNetworkRequest(QUrl(BASEURL + request)));
}
void someClass::on_request_complete(QNetworkReply* response)
{
// Do stuff with your response here
}
void someClass::run(QString请求)
{
qDebug()get(QNetworkRequest(QUrl(BASEURL+request));
}
void someClass::在请求完成时(QNetworkReply*响应)
{
//在这里用你的回答做一些事情
}
你能发布tcpdump的输出吗?它很大,所以我把它上传到了我会试试的,谢谢。我已经有方法runAcync(QString请求)
执行同样的操作。问题是我需要在做任何事情之前得到一个答案,所以我使用了同步。另外,链接到Qt4.7.x libs时似乎没有bug。如果有帮助,我会尝试同步并报告。这很奇怪。我刚刚将循环移动到调用我的run()
的函数,并将调用更改为runAcync()
,这很有帮助。这是防御性的qT错误。非常感谢!