[Qt ingresó por primera vez a los ríos y lagos] Descripción detallada de la arquitectura subyacente y los principios de Qt QNetworkRequest

Yuxian: socio de contenido de CSDN, nuevo mentor estrella de CSDN, 51CTO (principal celebridad + blogger experto), entusiasta del código abierto de github (desarrollo secundario del código fuente de cero, arquitectura de back-end del juego https://github.com/Peakchen)

                ​​​​​​​ ​​​​​​​​    

 

Qt QNetworkRequest es una clase utilizada para describir una solicitud de red, que incluye información como la URL solicitada, el método de solicitud, el encabezado de la solicitud y el cuerpo de la solicitud. La arquitectura subyacente de QNetworkRequest consta de las siguientes partes:

  1. QURL

QUrl es una clase utilizada para procesar URL en Qt. Puede analizar cadenas de URL en varias partes, como protocolo, nombre de host, número de puerto, ruta, parámetros de consulta, fragmentos, etc., y proporciona algunos métodos para obtener y configurar estas partes. . En QNetworkRequest, podemos usar QUrl para representar la URL de la solicitud y usar el método de QUrl para configurar y obtener varias partes de la URL.

  1. QNetworkRequestHeader

QNetworkRequestHeader es una clase utilizada en Qt para procesar encabezados de solicitudes HTTP. Puede agregar, eliminar, obtener y modificar varios campos de encabezados de solicitudes HTTP. En QNetworkRequest, podemos usar QNetworkRequestHeader para representar el encabezado de la solicitud y establecer y obtener los diversos campos del encabezado de la solicitud mediante el método de QNetworkRequestHeader.

  1. QByteArray

QByteArray es una clase utilizada para procesar matrices de bytes en Qt. Puede almacenar datos binarios arbitrarios y proporciona algunos métodos para acceder y modificar datos. En QNetworkRequest, podemos usar QByteArray para representar el cuerpo de la solicitud y usar el método de QByteArray para configurar y obtener los datos del cuerpo de la solicitud.

El siguiente es el diagrama de arquitectura subyacente de QNetworkRequest:

En QNetworkRequest, podemos usar los siguientes métodos para configurar y obtener la URL de la solicitud, el encabezado de la solicitud y el cuerpo de la solicitud:

  1. establecer URL ()

El método setUrl() se usa para establecer la URL solicitada y acepta un parámetro de tipo QUrl, que se usa para representar la URL solicitada. Por ejemplo:

QUrl url("http://www.example.com");
QNetworkRequest request;
request.setUrl(url);
  1. URL()

El método url() se utiliza para obtener la URL solicitada y devuelve un valor de tipo QUrl, que representa la URL solicitada. Por ejemplo:

QNetworkRequest request;
QUrl url = request.url();
  1. establecerEncabezado()

El método setHeader() se usa para establecer el campo del encabezado de la solicitud. Acepta dos parámetros. El primer parámetro es un valor de enumeración que indica el tipo de campo del encabezado de la solicitud, y el segundo parámetro es un valor de tipo QVariant que indica la solicitud. encabezado valor de campo Por ejemplo:

QNetworkRequest request;
request.setHeader(QNetworkRequest::ContentTypeHeader, "application/json");
  1. encabezamiento()

El método header() se utiliza para obtener el valor de campo de la cabecera de la solicitud, acepta un valor de enumeración como parámetro, indicando el tipo de campo de la cabecera de la solicitud, y devuelve un valor de tipo QVariant, indicando el valor de campo de la solicitud encabezamiento. Por ejemplo:

QNetworkRequest request;
QString content_type = request.header(QNetworkRequest::ContentTypeHeader).toString();
  1. setRawHeader()

El método setRawHeader() se usa para establecer los datos de bytes sin procesar del encabezado de la solicitud. Acepta dos parámetros. El primer parámetro es una matriz de bytes que representa el nombre del campo del encabezado de la solicitud, y el segundo parámetro es una matriz de bytes que representa la solicitud. valor del campo de encabezado. Por ejemplo:

QNetworkRequest request;
request.setRawHeader("Authorization", "Bearer xxxxxxxx");
  1. encabezado sin procesar ()

El método rawHeader() se utiliza para obtener los datos de bytes originales del encabezado de la solicitud. Acepta una matriz de bytes como parámetro, que indica el nombre del campo del encabezado de la solicitud, y devuelve una matriz de bytes que indica el valor del campo del encabezado de la solicitud. . Por ejemplo:

QNetworkRequest request;
QByteArray auth_header = request.rawHeader("Authorization");
  1. setRawHeaderList()

El método setRawHeaderList() se usa para establecer la lista de datos de bytes sin procesar del encabezado de la solicitud, que acepta un parámetro de tipo QList, que indica la lista de datos de bytes sin procesar del encabezado de la solicitud. Por ejemplo:

QNetworkRequest request;
QList<QPair<QByteArray, QByteArray>> headers;
headers << qMakePair(QByteArray("Content-Type"), QByteArray("application/json"));
headers << qMakePair(QByteArray("Authorization"), QByteArray("Bearer xxxxxxxx"));
request.setRawHeaderList(headers);
  1. rawHeaderList()

El método rawHeaderList() se usa para obtener la lista de datos de bytes sin procesar del encabezado de la solicitud y devuelve un valor de tipo QList, que representa la lista de datos de bytes sin procesar del encabezado de la solicitud. Por ejemplo:

QNetworkRequest request;
QList<QPair<QByteArray, QByteArray>> headers = request.rawHeaderList();
  1. establecerAtributo()

El método setAttribute() se utiliza para establecer el atributo de QNetworkRequest. Acepta dos parámetros. El primer parámetro es un valor de enumeración que indica el tipo de atributo, y el segundo parámetro es un valor de tipo QVariant que indica el valor del atributo. Por ejemplo:

QNetworkRequest request;
request.setAttribute(QNetworkRequest::FollowRedirectsAttribute, true);
  1. atributo()

Para obtener el valor del atributo de QNetworkRequest se utiliza el método atributo(), que acepta un valor de enumeración como parámetro, indicando el tipo de atributo, y devuelve un valor de tipo QVariant, indicando el valor del atributo. Por ejemplo:

QNetworkRequest request;
bool follow_redirects = request.attribute(QNetworkRequest::FollowRedirectsAttribute).toBool();

Aquí hay un código de muestra que muestra cómo usar QNetworkRequest para enviar una solicitud HTTP GET:

#include <QtNetwork>

int main(int argc, char *argv[])
{
    QCoreApplication app(argc, argv);

    QUrl url("http://www.example.com");

    QNetworkRequest request;
    request.setUrl(url);

    QNetworkAccessManager manager;
    QNetworkReply *reply = manager.get(request);

    QObject::connect(reply, &QNetworkReply::finished, [&]() {
        if (reply->error() == QNetworkReply::NoError) {
            QByteArray data = reply->readAll();
            qDebug() << data;
        } else {
            qDebug() << "Error: " << reply->errorString();
        }

        app.quit();
    });

    return app.exec();
}

En el código anterior, primero creamos un objeto QUrl para representar la URL solicitada, luego creamos un objeto QNetworkRequest para representar la solicitud y configuramos la URL solicitada. A continuación, creamos un objeto QNetworkAccessManager para administrar las solicitudes de red y enviamos una solicitud HTTP GET a través del método get() de QNetworkAccessManager. Finalmente, conectamos la señal finalizada de QNetworkReply a través del método QObject::connect(), esperamos a que se complete la respuesta HTTP y procesamos los datos de respuesta HTTP en la función de devolución de llamada.

Supongo que te gusta

Origin blog.csdn.net/feng1790291543/article/details/131806880
Recomendado
Clasificación