QNetworkAccessManager で 同期通信
Qt で HTTP リクエストを行う際には QNetworkAccessManager (通称nam) を利用しますが、基本的には非同期の動作となり、QNetworkReply::finished シグナルを利用して終了時の処理を行います。
ただし、特殊な場合(コマンドラインアプリケーションを作っているとか)には、同期で通信してくれた方がありがたいことがあります。
この場合、ドキュメントには記載がない非公式な方法として QNetworkRequest の SynchronousRequestAttribute アトリビューションを有効にすることで実現が可能です。
static QNetworkAccessManager nam;
QNetworkRequest request(QUrl(QStringLiteral("https://www.google.com/recaptcha/api/siteverify")));
request.setAttribute(QNetworkRequest::SynchronousRequestAttribute, true);
QUrlQuery query;
query.addQueryItem(QStringLiteral("secret"), secret);
query.addQueryItem(QStringLiteral("response"), response);
auto reply = nam.post(request, query.toString().toUtf8());
auto data = reply->readAll();
reply->deleteLater();
QNetworkRequest request(QUrl(QStringLiteral("https://www.google.com/recaptcha/api/siteverify")));
request.setAttribute(QNetworkRequest::SynchronousRequestAttribute, true);
QUrlQuery query;
query.addQueryItem(QStringLiteral("secret"), secret);
query.addQueryItem(QStringLiteral("response"), response);
auto reply = nam.post(request, query.toString().toUtf8());
auto data = reply->readAll();
reply->deleteLater();
基本的には必要のない技術ですが、何かの時に思い出してください!