https://github.com/qyvlik/HttpRequest
HttpRequest such as XMLHttpRequest, but more powerful.
https://github.com/qyvlik/HttpRequest
httprequest qml
Last synced: 14 days ago
JSON representation
HttpRequest such as XMLHttpRequest, but more powerful.
- Host: GitHub
- URL: https://github.com/qyvlik/HttpRequest
- Owner: qyvlik
- License: mit
- Created: 2015-11-12T16:04:32.000Z (about 10 years ago)
- Default Branch: master
- Last Pushed: 2016-11-20T15:14:43.000Z (about 9 years ago)
- Last Synced: 2024-06-16T05:38:20.287Z (over 1 year ago)
- Topics: httprequest, qml
- Language: C++
- Homepage:
- Size: 42 KB
- Stars: 26
- Watchers: 5
- Forks: 13
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
- awesome-qt-qml - HttpRequest - HttpRequest such as XMLHttpRequest, but more powerful. (Networking)
README
# HttpRequest
`HttpRequest` use Qt **Network module** that register in qml env. Such as `XMLHttpRequest`.
`HttpRequest` 使用 Qt 的**网络模块**编写。通过注册到 QML 中,就可以像使用 `XMLHttpRequest` 那样使用了。
## Use in QML
第一种使用方法是,直接实例化 `HttpRequest`。
```
HttpRequest { id: httpRequest }
function doGet() {
httpRequest.clear();
httpRequest.finished.connect(function(){
httpRequest.finished.disconnect(arguments.callee);
console.log(httpRequest.responseText.length);
console.log(httpRequest.responseText);
// 如果 httpRequest.responseText 内容太长,console.log() 就不会再控制台打印
});
httpRequest.error.connect(function(){
httpRequest.error.disconnect(arguments.callee);
console.log(httpRequest.statusText);
});
httpRequest.timeout.connect(function(){
httpRequest.timeout.disconnect(arguments.callee);
console.log("time out");
});
httpRequest.open("GET", "https://api.github.com/zen");
httpRequest.setTimeout(3 * 1000); // 3 s
httpRequest.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
httpRequest.send();
}
```
> **注意**:实例化的 `HttpRequest` 可以使用多次,但是每次重新使用前,务必使用 `clear()` 函数,这个函数会取消上一次还未完成的请求和请求设置。
第二种类似于 `XMLHttpRequest`:
```
var xhr = HttpRequestFactory.create();
xhr.finished.connect(function(){
xhr.finished.disconnect(arguments.callee);
console.log(httpRequest.responseText.length);
console.log(httpRequest.responseText);
// 如果 httpRequest.responseText 内容太长,console.log() 就不会再控制台打印
});
xhr.error.connect(function(){
xhr.error.disconnect(arguments.callee);
console.log(xhr.statusText);
});
xhr.timeout.connect(function(){
xhr.timeout.disconnect(arguments.callee);
console.log("time out");
});
httpRequest.open("GET", "https://api.github.com/zen");
xhr.setTimeout(3 * 1000); // 3 s
xhr.send();
```
`HttpRequestFactory.create();` 构建的 `HttpRequest` 会在适当时候被自动回收。
## Use In C++
```
HttpRequest* httpRequest = new HttpRequest();
httpRequest->clear();
QObject::connect(httpRequest, &HttpRequest::finished, [=](){
qDebug() << httpRequest->getAllResponseHeader();
QJsonDocument dom = QJsonDocument::fromJson(httpRequest->getResponseText().toUtf8());
qDebug() << dom.object();
httpRequest->deleteLater();
});
QObject::connect(httpRequest, &HttpRequest::timeout, [=](){
qDebug() << " time out";
httpRequest->deleteLater();
});
QObject::connect(httpRequest, &HttpRequest::error, [=](){
qDebug() << httpRequest->getStatus();
qDebug() << httpRequest->getStatusText();
httpRequest->deleteLater();
});
QByteArray data("?limit=60&offset=0&s=%E7%88%B1&total=true&type=1");
httpRequest->setRequestHeader("Referer", "http://music.163.com/search/");
httpRequest->setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
httpRequest->open("POST", QUrl("http://music.163.com/api/search/get"));
httpRequest->setTimeout(30 * 1000); // 30s
httpRequest->send(QString(data));
```