Qt之http实现get/post的两种方法

[原文连接](https://blog.csdn.net/KayChanGEEK/article/details/104886090)

法一:异步

异步就是使用信号槽的方法实现get/post的异步方法,这样的方式不会产生阻塞,在获取到reply之前可以do other things。

get

void get(const QString &str_url){
 
	const QUrl url = QUrl::fromUserInput(str_url);
	QNetworkRequest qnr(url);
	QNetworkAccessManager *qnam = new QNetworkAccessManager(this);
	connect(qnam, SIGNAL(finished(QNetworkReply *)), this, SLOT(on_http_reply(QNetworkReply *)));
	qnam->get(qnr);
}

post

void post(const QString &str_url, const QString &data){
 
	const QUrl url = QUrl::fromUserInput(str_url);
	QNetworkRequest qnr(url);
	QNetworkAccessManager *qnam = new QNetworkAccessManager(this);
	connect(qnam, SIGNAL(finished(QNetworkReply *)), this, SLOT(on_http_reply(QNetworkReply *)));
	qnam->put(qnr, data.toUtf8());
}
 
void on_http_reply(QNetworkReply* reply) {
	
	QByteArray reply_data = reply->readAll();
}

法二:同步/阻塞

有时候需要等待得到返回信息才能继续做下一步。这时候用异步就超级难用了,就需要用同步/阻塞的方式了。

get

QByteArray get(const QString &str_url){
 
    const QUrl url = QUrl::fromUserInput(str_url);
    QNetworkRequest qnr(url);
    QNetworkAccessManager qnam;
    QNetworkReply *reply = qnam.get(qnr);
    QEventLoop eventloop;
    QObject::connect(reply, &QNetworkReply::finished, &eventloop, &QEventLoop::quit);
    eventloop.exec(QEventLoop::ExcludeUserInputEvents);
    QByteArray reply_data = reply->readAll();
    reply->deleteLater();
    reply = nullptr;
    return reply_data;
}

post

QByteArray post(const QString &str_url, const QString &data){
 
    const QUrl url = QUrl::fromUserInput(str_url);
    QNetworkRequest qnr(url);
    QNetworkAccessManager qnam;
    QNetworkReply *reply = qnam.put(qnr, data.toUtf8());
    QEventLoop eventloop;
    QObject::connect(reply, &QNetworkReply::finished, &eventloop, &QEventLoop::quit);
    eventloop.exec(QEventLoop::ExcludeUserInputEvents);
    QByteArray reply_data = reply->readAll();
    reply->deleteLater();
    reply = nullptr;
    return reply_data;
}

 

  • 2
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值