使用Qt4调用REST服务
有人能告诉我一个使用Qt4调用REST服务的简单方法吗?我找不到任何关于如何做到这一点的像样的文档。现在我有一些类似于:使用Qt4调用REST服务,qt,rest,qt4,Qt,Rest,Qt4,有人能告诉我一个使用Qt4调用REST服务的简单方法吗?我找不到任何关于如何做到这一点的像样的文档。现在我有一些类似于: int NetworkClient::attemptLogin( QString username, QString password, int & error ) { QNetworkAccessManager *manager = new QNetworkAccessManager(this); QObject::connect(manager, SI
int NetworkClient::attemptLogin( QString username, QString password, int & error ) {
QNetworkAccessManager *manager = new QNetworkAccessManager(this);
QObject::connect(manager, SIGNAL(finished(QNetworkReply *)), SLOT(slotRequestFinished(QNetworkReply *)));
QNetworkRequest request;
request.setUrl(QUrl("http://192.168.20.155:3000/api/rest/user?id=" + username));
request.setHeader(QNetworkRequest::ContentTypeHeader, "text/xml");
QNetworkReply *reply = 0;
reply = manager->get(request);
qDebug() << reply;
您的函数与我调用REST服务时使用的函数非常接近。我要做的是为每个http谓词创建一个函数 这是我的post函数说明对SSL和基本授权的支持
void Http::post(QString &url, QString &user, QString &password, QString &data)
{
QSslConfiguration config(QSslConfiguration::defaultConfiguration());
QNetworkRequest request;
request.setSslConfiguration(config);
request.setRawHeader("Authorization", "Basic " +
QByteArray(QString("%1:%2").arg(user).arg(password).toAscii().toBase64())
);
request.setRawHeader("Accept", "application/xml");
request.setRawHeader("Content-Type", "application/xml");
request.setUrl(QUrl(url));
qDebug() << url;
connect(netManager, SIGNAL(finished(QNetworkReply*)), this, SLOT(finished(QNetworkReply*)));
reply = netManager->post(request, data.toAscii());
connect(reply, SIGNAL(downloadProgress(qint64,qint64)), this, SIGNAL(progress(qint64,qint64)));
connect(reply, SIGNAL(sslErrors(QList<QSslError>)), this, SLOT(sslError(QList<QSslError>)));
connect(reply, SIGNAL(error(QNetworkReply::NetworkError)), this, SLOT(networkError(QNetworkReply::NetworkError)));
}
您的函数与我调用REST服务时使用的函数非常接近。我要做的是为每个http谓词创建一个函数 这是我的post函数说明对SSL和基本授权的支持
void Http::post(QString &url, QString &user, QString &password, QString &data)
{
QSslConfiguration config(QSslConfiguration::defaultConfiguration());
QNetworkRequest request;
request.setSslConfiguration(config);
request.setRawHeader("Authorization", "Basic " +
QByteArray(QString("%1:%2").arg(user).arg(password).toAscii().toBase64())
);
request.setRawHeader("Accept", "application/xml");
request.setRawHeader("Content-Type", "application/xml");
request.setUrl(QUrl(url));
qDebug() << url;
connect(netManager, SIGNAL(finished(QNetworkReply*)), this, SLOT(finished(QNetworkReply*)));
reply = netManager->post(request, data.toAscii());
connect(reply, SIGNAL(downloadProgress(qint64,qint64)), this, SIGNAL(progress(qint64,qint64)));
connect(reply, SIGNAL(sslErrors(QList<QSslError>)), this, SLOT(sslError(QList<QSslError>)));
connect(reply, SIGNAL(error(QNetworkReply::NetworkError)), this, SLOT(networkError(QNetworkReply::NetworkError)));
}
这是我的照片
QNetworkReply* Gateway::performPost(QString service, QMap<QString, QString>params)
{
qDebug() << QString("Post with params #").append(service) << params;
//Initialize uri
QString uri = Gateway::SERVICE_BASE_URI;
QNetworkAccessManager oManager;
//Connect signal
connect(oManager, SIGNAL(finished(QNetworkReply*)), this, SLOT(finished(QNetworkReply*)));
//Construct request
QUrl res = QUrl(
uri.append(service)
);
QUrl query;
QMapIterator<QString, QString> i(params);
while(i.hasNext()) {
i.next();
query.addEncodedQueryItem(QUrl::toPercentEncoding(i.key()), QUrl::toPercentEncoding(i.value()));
}
//Do request
QNetworkRequest postRequest = QNetworkRequest(res);
//Return QNetworkReply Object
return oManager.post(postRequest, query.encodedQuery());
}
//Implementation
QMap<QString,QString> map;
map.insert("foo", "bar");
map.insert("bar", "foo");
//Perform the POST request
oGateway.performPost("foo/bar", map);
这是我的照片
QNetworkReply* Gateway::performPost(QString service, QMap<QString, QString>params)
{
qDebug() << QString("Post with params #").append(service) << params;
//Initialize uri
QString uri = Gateway::SERVICE_BASE_URI;
QNetworkAccessManager oManager;
//Connect signal
connect(oManager, SIGNAL(finished(QNetworkReply*)), this, SLOT(finished(QNetworkReply*)));
//Construct request
QUrl res = QUrl(
uri.append(service)
);
QUrl query;
QMapIterator<QString, QString> i(params);
while(i.hasNext()) {
i.next();
query.addEncodedQueryItem(QUrl::toPercentEncoding(i.key()), QUrl::toPercentEncoding(i.value()));
}
//Do request
QNetworkRequest postRequest = QNetworkRequest(res);
//Return QNetworkReply Object
return oManager.post(postRequest, query.encodedQuery());
}
//Implementation
QMap<QString,QString> map;
map.insert("foo", "bar");
map.insert("bar", "foo");
//Perform the POST request
oGateway.performPost("foo/bar", map);
以下是我最终解决问题的方式:
谢谢大家的帮助 以下是我最终解决问题的方式:
谢谢大家的帮助 这非常接近。我已经添加了我的呼叫代码,所以你可以看到我正在尝试做什么。这非常接近。我已经添加了我的呼叫代码,所以你可以看到我正在尝试做什么。