// HttpChannel.cpp #include "httpChannel.h" #include #include #include #include #include HttpChannel::HttpChannel(const ChannelConfig& config, QObject* parent) : BaseChannel(config, parent) { } bool HttpChannel::connect() { // HTTP无需建立持久连接 emit connected(); return true; } bool HttpChannel::disconnect() { // HTTP无需断开持久连接 emit disconnected(); return true; } bool HttpChannel::isConnected() const { return m_config.endpoint.isValid(); // 只要端点有效就认为"可连接" } bool HttpChannel::send(const QByteArray& data) { return post(data); } bool HttpChannel::get(const QString& path) { if (!m_config.endpoint.isValid()) { emit errorOccurred("Invalid endpoint"); return false; } QUrl url = m_config.endpoint; if (!path.isEmpty()) { url.setPath(url.path() + "/" + path); } QNetworkAccessManager* manager = new QNetworkAccessManager(this); QObject::connect(manager, &QNetworkAccessManager::authenticationRequired, [this](QNetworkReply* reply, QAuthenticator* authenticator) { if (!m_username.isEmpty() && !m_password.isEmpty()) { authenticator->setUser(m_username); authenticator->setPassword(m_password); } }); QNetworkRequest request(url); // 设置头 for (auto it = m_headers.begin(); it != m_headers.end(); ++it) { request.setRawHeader(it.key().toUtf8(), it.value().toUtf8()); } QNetworkReply* reply = manager->get(request); QObject::connect(reply, &QNetworkReply::finished, [this, reply, manager]() { if (reply->error() == QNetworkReply::NoError) { QByteArray data = reply->readAll(); emit dataReceived(data); } else { emit errorOccurred(reply->errorString()); } reply->deleteLater(); manager->deleteLater(); }); return true; } bool HttpChannel::post(const QByteArray& data, const QString& path) { if (!m_config.endpoint.isValid()) { emit errorOccurred("Invalid endpoint"); return false; } QUrl url = m_config.endpoint; if (!path.isEmpty()) { url.setPath(url.path() + "/" + path); } QNetworkAccessManager* manager = new QNetworkAccessManager(this); QNetworkRequest request(url); request.setHeader(QNetworkRequest::ContentTypeHeader, "application/json"); for (auto it = m_headers.begin(); it != m_headers.end(); ++it) { request.setRawHeader(it.key().toUtf8(), it.value().toUtf8()); } QNetworkReply* reply = manager->post(request, data); QObject::connect(reply, &QNetworkReply::finished,this,[this, reply, manager]() { if (reply->error() == QNetworkReply::NoError) { QByteArray data = reply->readAll(); emit dataReceived(data); } else { emit errorOccurred(reply->errorString()); } reply->deleteLater(); manager->deleteLater(); }); return true; } bool HttpChannel::put(const QByteArray& data, const QString& path) { // 类似post的实现 return post(data, path); // 简化处理 } bool HttpChannel::deleteResource(const QString& path) { // 类似get的实现 return get(path); // 简化处理 } void HttpChannel::setBasicAuth(const QString& username, const QString& password) { m_username = username; m_password = password; } void HttpChannel::setHeader(const QString& name, const QString& value) { m_headers[name] = value; }