目录
- Qt发起http请求get,异步接收
- Qt发起http请求post,异步接收
- Qt发起http请求get和post,收发同步
- http下载网络图片
Qt发起http请求get,异步接收
get请求无参,只有网络地址,这里以请求城市天气信息为例,发起get请求,返回天气json格式数据
头文件
private:
void queryWeather();
public slots:
void replyFinished(QNetworkReply *reply);
private:
QString cityName;
QNetworkAccessManager *manager;
QString allinfo;
QString date;
QString fengli;
QString wendu;
QString currentwendu;
QString weather_type;
QString ganmao;
bool isGetData=false;
源文件
manager = new QNetworkAccessManager(this);
connect(manager,SIGNAL(finished(QNetworkReply*)),this,SLOT(replyFinished(QNetworkReply*)));
void Weather::queryWeather()
{
cityName = "南京";
char quest_array[256]="http://wthrcdn.etouch.cn/weather_mini?city=";
QNetworkRequest quest;
sprintf(quest_array,"%s%s",quest_array,cityName.toUtf8().data());
quest.setUrl(QUrl(quest_array));
quest.setHeader(QNetworkRequest::UserAgentHeader,"RT-Thread ART");
manager->get(quest);
}
void Weather::replyFinished(QNetworkReply *reply)
{
this->isGetData=false;
allinfo = reply->readAll();
QJsonParseError err;
QJsonDocument json_recv = QJsonDocument::fromJson(allinfo.toUtf8(),&err);
if(!json_recv.isNull())
{
QJsonObject object = json_recv.object();
if(object.contains("data"))
{
QJsonValue value = object.value("data");
if(value.isObject())
{
QJsonObject object_data = value.toObject();
this->cityName=object_data.value("city").toString();
this->currentwendu=object_data.value("wendu").toString();
this->ganmao=object_data.value("ganmao").toString();
if(object_data.contains("forecast"))
{
QJsonValue value = object_data.value("forecast");
if(value.isArray())
{
QJsonObject today_weather = value.toArray().at(0).toObject();
weather_type = today_weather.value("type").toString();
date = today_weather.value("date").toString();
QString low = today_weather.value("low").toString();
QString high = today_weather.value("high").toString();
wendu = low.mid(low.length()-3,4) +"-"+ high.mid(high.length()-3,4);
QString strength = today_weather.value("fengli").toString();
strength.remove(0,8);
strength.remove(strength.length()-2,2);
fengli = today_weather.value("fengxiang").toString() + strength;
this->isGetData=true;
}
}
}
}
}else
{
qDebug()<<"json_recv is NULL or is not a object !!";
}
reply->deleteLater();
if(isGetData)
{
qDebug()<<QString::fromLocal8Bit("获取天气成功");
}
else
{
qDebug()<<QString::fromLocal8Bit("获取天气失败");
}
}
Qt发起http请求post,异步接收
qt发起post请求,带网络地址和参数,参数一般为json格式,转QByteArray
void MainWindow::postHttpRequest()
{
QNetworkRequest request;
QNetworkAccessManager* naManager = new QNetworkAccessManager(this);
QObject::connect(naManager, SIGNAL(finished(QNetworkReply*)), this, SLOT(requestFinished(QNetworkReply*)));
request.setHeader(QNetworkRequest::ContentTypeHeader,QVariant("application/json"));
request.setUrl(QUrl::fromUserInput(" http://192.168.1.102:2345/notice?num=4567"));
QJsonObject obj1;
QJsonObject object;
object.insert("station","业务受理员");
object.insert("name","王晨");
object.insert("number","0001");
object.insert("pic","http://192.168.1.15:8080/8.jpg");
object.insert("orderNum","A123456789B");
obj1.insert("data",object);
obj1.insert("status","2");
QByteArray byte_array = QJsonDocument(obj1).toJson();
qDebug()<< "user info " << obj1;
QNetworkReply* reply = naManager->post(request,byte_array);
}
void MainWindow::requestFinished(QNetworkReply *reply)
{
QString loginResultJson;
QByteArray bytes = reply->readAll();
QVariant statusCode = reply->attribute(QNetworkRequest::HttpStatusCodeAttribute);
if(statusCode.isValid())
{
qDebug() << "status code=" << statusCode.toInt();
}
QNetworkReply::NetworkError err = reply->error();
if(err != QNetworkReply::NoError)
{
qDebug() << "Failed: " << reply->errorString();
}
else
{
qDebug() << "loginResultJson is " << QString::fromStdString(bytes.toStdString());
loginResultJson = QString::fromStdString(bytes.toStdString());
}
}
Qt发起http请求get和post,收发同步
GET和POST方式均可使用,收发同步,并增加了等待接收超时处理。
void SendAndGetText(QString strUrl, QString thod, QString strInput, QString &strMessage, QString &strResult)
{
QNetworkRequest oNetRequest;
oNetRequest.setUrl(QUrl(strUrl));
QNetworkAccessManager oNetAccessManager;
QNetworkReply* oNetReply = nullptr;
QByteArray inputTmp;
if (thod == "POST")
{
oNetRequest.setRawHeader("Content-Type", "application/octet-stream");
if(REST_TOKEN == globalHs.transType)
oNetRequest.setRawHeader("Content-Type", "application/x-www-form-urlencoded");
oNetReply = oNetAccessManager.post(oNetRequest, strInput.toLocal8Bit());
}
else if (thod == "GET" )
{
oNetReply = oNetAccessManager.get(oNetRequest);
}
QEventLoop eventloop;
connect(oNetReply, SIGNAL(finished()), &eventloop, SLOT(quit()));
QTimer::singleShot(10000, &eventloop, &QEventLoop::quit);
eventloop.exec();
QByteArray array;
if(oNetReply->isFinished())
{
if(oNetReply->error() == QNetworkReply::NoError)
{
strResult = oNetReply->readAll();
}
else
{
}
}
else
{
disconnect(oNetReply, &QNetworkReply::finished, &eventloop, &QEventLoop::quit);
oNetReply->abort();
qDebug()<<"["<<__FILE__<<"]"<<__LINE__<<__FUNCTION__<<" timeout";
}
QNetworkReply::NetworkError e = oNetReply->error();
if (e)
{
strMessage = oNetReply->errorString();
}
oNetReply->deleteLater();
}
QString url = "";
QString sendMsg = "";
QString strMessage = "";
QString strResult = "";
QString thod = "POST";
SendAndGetText(url,thod,sendMsg,strMessage,strResult);
if(strMessage.isEmpty())
{
qDebug()<<"["<<__FILE__<<"]"<<__LINE__<<__FUNCTION__<<"接收数据 "<<strResult;
}
else
{
qDebug()<<"["<<__FILE__<<"]"<<__LINE__<<__FUNCTION__<<"错误信息 "<<strMessage;
}
http下载网络图片
QPixmap HttpGetPic::GainUrlImage(QString url)
{
QUrl turl(url);
QNetworkAccessManager manager;
QEventLoop loop;
QNetworkReply *reply = manager.get(QNetworkRequest(turl));
connect(reply, &QNetworkReply::finished, &loop, &QEventLoop::quit);
loop.exec();
QByteArray jpegData = reply->readAll();
QPixmap pixmap;
if(!pixmap.loadFromData(jpegData))
{
CLOG_ERROR(QString("网络地址获取图片失败,URL=%1").arg(url).toUtf8().data());
}
return pixmap;
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)