6

我正在 Qt 中开发一个使用 REST API 从 Parse.com 检索数据的基本应用程序。我浏览了一些类引用和 cURL 手册,但仍然不清楚如何设置请求参数。例如,我想对用户进行身份验证。这是 Parse 提供的 curl 示例:

curl -X GET \
-H "X-Parse-Application-Id: myappid" \
-H "X-Parse-REST-API-Key: myapikey" \
-G \
--data-urlencode 'username=test' \
--data-urlencode 'password=test' \
https://api.parse.com/1/login

我像这样设置网址和标题

QUrl url("https://api.parse.com/1/login");
QNetworkRequest request(url);

request.setRawHeader("X-Parse-Application-Id", "myappid");
request.setRawHeader("X-Parse-REST-API-Key", "myapikey");

nam->get(request);

当没有参数时效果很好,但是我应该使用什么来实现与 curl 与 --data-urlencode 开关相同的效果?

谢谢你的时间

4

3 回答 3

13

不幸的是,QUrl::addQueryItem() 在 qt5 中已弃用,但从那里开始,我发现 QUrlQuery 类具有 addQueryItem() 方法,并且可以生成 QUrl 的 setQuery() 方法可接受的查询字符串,因此它现在看起来像这样工作正常:

QUrl url("https://api.parse.com/1/login");
QUrlQuery query;

query.addQueryItem("username", "test");
query.addQueryItem("password", "test");

url.setQuery(query.query());

QNetworkRequest request(url);

request.setRawHeader("X-Parse-Application-Id", "myappid");
request.setRawHeader("X-Parse-REST-API-Key", "myapikey");

nam->get(request);

感谢克里斯的提示。

于 2013-03-25T17:10:52.750 回答
5

我相信QUrl::addQueryItem()这就是你要找的

QUrl url("https://api.parse.com/1/login");
url.addQueryItem("username", "test");
url.addQueryItem("password", "test");
...
于 2013-03-25T16:25:37.580 回答
2

尝试使用QtCUrl。如果您熟悉 curl,这很容易。

QtCUrl cUrl;

QUrl url("https://api.parse.com/1/login");
url.addEncodedQueryItem("username", "test");
url.addEncodedQueryItem("password", "test");

QtCUrl::Options opt;
opt[CURLOPT_URL] = url;
QStringList headers;
headers
    << "X-Parse-Application-Id: myappid"
    << "X-Parse-REST-API-Key: myapikey"

opt[CURLOPT_HTTPHEADER] = headers;
QString result = cUrl.exec(opt);
于 2013-05-23T09:57:41.897 回答