如何编写Qt HTTP GET请求
How do I write a Qt HTTP GET request?
我想用C++编写一个小的HTTP GET
请求,但我没有找到解决方案。
也许我必须使用QNetworkAccessManager
课程,但我不是C++方面的专家,而且很难理解这门课。
我有一个要获取的 URL,它会给我一个 JSON 响应;我必须提取一个键(key2
)并将值放在一个变量中。这是一个示例:
{"key1": "value1", "key2": "**value2**", "key3": "value3"}
这是我的调试代码:
char value[20]
value = <**value2**>
在此之后,我必须以 .ui 的形式打印此值
你需要三样东西:
-
QNetworkAccessManager * manager;
-> 向我们发送请求。 -
QNetworkRequest request;
->什么类型的需求? 获取、发布、... -
QNetworkReply
. -> 答案是什么?
有关更多详细信息:
-
http://doc.qt.io/qt-5/qnetworkaccessmanager.html#details
-
http://doc.qt.io/qt-5/qnetworkrequest.html#details
-
http://doc.qt.io/qt-5/qnetworkreply.html#details
例如:
。.cpp
MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MainWindow)
{
ui->setupUi(this);
manager = new QNetworkAccessManager();
QObject::connect(manager, &QNetworkAccessManager::finished,
this, [=](QNetworkReply *reply) {
if (reply->error()) {
qDebug() << reply->errorString();
return;
}
QString answer = reply->readAll();
qDebug() << answer;
}
);
}
void MainWindow::on_pushButton_clicked()
{
request.setUrl(QUrl("http://url"));
manager->get(request);
}
MainWindow::~MainWindow()
{
delete ui;
delete manager;
}
.h 文件
private:
Ui::MainWindow *ui;
QNetworkAccessManager *manager;
QNetworkRequest request;
编辑 LAMBDA 插槽:如果不使用 lambda 信号插槽。
在 .h 文件中描述一个插槽例如:
private slots:
void managerFinished(QNetworkReply *reply);
在.cpp构造函数中将 lambda 替换为
QObject::connect(manager, SIGNAL(finished(QNetworkReply*)),
this, SLOT(managerFinished(QNetworkReply*)));
现在在您的插槽中:
void MainWindow::managerFinished(QNetworkReply *reply) {
if (reply->error()) {
qDebug() << reply->errorString();
return;
}
QString answer = reply->readAll();
qDebug() << answer;
}
我只是设法让HTTP请求工作。
此示例只是下载谷歌 HTML 页面并将其内容打印到终端。
主.cpp
#include <iostream>
#include "main.h"
MyObject::MyObject(QApplication* app) {
manager = new QNetworkAccessManager(app);
}
void MyObject::TestConnection() const {
auto status = connect(manager, &QNetworkAccessManager::finished,
this, &MyObject::ReplyFinished);
qDebug() << "Connection status:" << status;
manager->get(QNetworkRequest(QUrl("https://www.google.com")));
}
void MyObject::ReplyFinished(QNetworkReply *reply) {
QString answer = reply->readAll();
qDebug() << answer;
QApplication::quit();
}
int main(int argc, char *argv[]) {
auto *app = new QApplication(argc, argv);
auto myObject = new MyObject(app);
myObject->TestConnection();
return QApplication::exec();
}
主H
#include <QtNetwork/QNetworkAccessManager>
#include <QtNetwork/QNetworkReply>
#include <QApplication>
class MyObject : public QObject {
Q_OBJECT
public:
explicit MyObject(QApplication* application);
void TestConnection() const;
static void ReplyFinished(QNetworkReply *reply);
QNetworkAccessManager *manager;
};
要使用 CMake 在 Linux 上编译它,请使用以下 CMakeLists.txt:
cmake_minimum_required(VERSION 3.17)
project(http)
set(CMAKE_CXX_STANDARD 20)
set(CMAKE_AUTOMOC ON) # important
add_executable(${PROJECT_NAME} main.cpp main.h)
find_package(Qt5Widgets REQUIRED)
find_package(Qt5Network REQUIRED) # important
target_link_libraries(${PROJECT_NAME} Qt5::Widgets Qt5::Network) # important
相关文章:
- c++程序,在windows下发送带有参数的http get请求
- C++HTTP客户端在GET请求后挂起read()调用
- 如何使用两个发送函数发送 GET 请求
- 使用 C++ 中的预定义变量发出 cURL GET 请求
- cURL GET请求函数未返回字符串
- 使用 C++ 套接字发出 HTTP GET 请求时出现 301 错误
- 如何编写Qt HTTP GET请求
- 使用Winsock2向具有域HTTPS的Webstie发送GET请求
- 对GET请求使用CURL
- C++-QtQObject::跨类连接GET请求使用情况
- Qt中的POST和GET请求
- GET请求后服务器的响应不正确
- 使用boost::asio发送http GET请求,类似于cURL
- 向twitter API发出经过验证的GET请求
- C++HTTP GET请求问题
- 尝试发送 GET 请求,将 301 发送到同一地址
- 带有参数的 HTTP GET 请求
- 在c++中获取字节范围的HTTP GET请求
- 带有boost oauth2访问令牌的HTTP GET请求
- 在 Winsock C++ 中编写正确的"HEAD"和"GET"请求