c++ - 使用 QNetworkAccessManager 发送 HTTP 请求

标签 c++ qt post https qnetworkaccessmanager

我在尝试使用 QObject 派生类中的 QNetworkAccessManager 发送请求时遇到问题。

首先,在我的构造函数中,我执行以下操作:

QObject::connect( &mAccessManager, SIGNAL( finished( QNetworkReply* ) ), this, SLOT( requestFinished( QNetworkReply* ) ) );

然后,当我希望发送请求时,我执行以下操作:

QNetworkRequest checkLogin( QUrl( address ) );
checkLogin.setHeader( QNetworkRequest::ContentTypeHeader, "application/x-www-form-urlencoded" );

mByteArray  = QByteArray( "POST \"client\" : oxres" );
QNetworkReply* pReply   = mAccessManager.post( checkLogin, mByteArray );

此时,我希望等待几秒钟,然后收到对我的类(class)插槽请求完成的响应。但是它不会被调用。

我不知道自己做错了什么。有人有什么想法吗? (我确定它非常简单)。

编辑:好的,这很奇怪。我有 wireshark 在后台收集数据包,当我生成该发布请求时,我看不到 wireshark 中发生了什么。那为什么不发送呢??

编辑 2:嗯,问题似乎出在我向 https://地址发送请求……为什么会这样??

最佳答案

几点:

1)你的QNetworkRequest所属的线程必须正在运行事件循环(只有这样你才能接收到信号)。

2) 如果您在 mAccessManager.post 之后用类似 sleep 的东西“等待”,它将无法工作。您必须让事件循环迭代以处理信号等。您可以在 post 之后自行运行事件循环。

添加:

我是这样同步的

QNetworkRequest request;

request.setHeader(
            QNetworkRequest::ContentTypeHeader,
            QVariant( QString("text/xml") )
            );
request.setHeader(
            QNetworkRequest::ContentLengthHeader,
            QVariant( qulonglong(mesPOST.size()) )
            );
request.setHeader(...);
//etc....

request.setAttribute(
            QNetworkRequest::CacheLoadControlAttribute,
            QVariant( int(QNetworkRequest::AlwaysNetwork) )
            );
request.setUrl( QUrl( "http://bla.bla", QUrl::StrictMode ) );

QNetworkReply* pReply = m_NetMgr->post( request, mesPOST );
QEventLoop eLoop;

QObject::connect( pReply, SIGNAL(finished()), &eLoop, SLOT(quit()) );
eLoop.exec( QEventLoop::ExcludeUserInputEvents );

关于c++ - 使用 QNetworkAccessManager 发送 HTTP 请求,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6204621/

相关文章:

c++ - SDL窗口打开后关闭

c++ - Cygwin 上的 Phonon 提示 Qt 编译时不支持 -fvisibility=hidden

c++ - 在同一端口上绑定(bind)两个多播套接字

c++ - C 中指向 char 的指针的默认值

c++ - OpenCV/C++ 中的优化帮助

c++ - Qt:显示聊天消息的最佳控件

node.js - 获取连接 ECONNREFUSED 127.0.0.1 :80 when attempting HTTP request

PHP:如何处理 $_POST 数据

post - 由于大小限制,PHP 上传无法正常工作

c++ - for 循环需要运行 LLONG_MAX 次,但计数器变量也需要表示有符号数。你用什么类型的柜台?