C++?Qt開發(fā)之使用QNetworkAccessManager實(shí)現(xiàn)Web網(wǎng)頁(yè)訪問(wèn)
Qt 是一個(gè)跨平臺(tái)C++圖形界面開發(fā)庫(kù),利用Qt可以快速開發(fā)跨平臺(tái)窗體應(yīng)用程序,在Qt中我們可以通過(guò)拖拽的方式將不同組件放到指定的位置,實(shí)現(xiàn)圖形化開發(fā)極大的方便了開發(fā)效率,本章將重點(diǎn)介紹如何運(yùn)用QNetworkAccessManager組件實(shí)現(xiàn)Web網(wǎng)頁(yè)訪問(wèn)。
QNetworkAccessManager是Qt網(wǎng)絡(luò)模塊中的關(guān)鍵類,用于管理網(wǎng)絡(luò)訪問(wèn)和請(qǐng)求。作為一個(gè)網(wǎng)絡(luò)請(qǐng)求的調(diào)度中心,它為Qt應(yīng)用程序提供了發(fā)送和接收各種類型的網(wǎng)絡(luò)請(qǐng)求的能力,包括常見(jiàn)的GET、POST、PUT、DELETE等。這個(gè)模塊的核心功能在于通過(guò)處理QNetworkReply和QNetworkRequest來(lái)實(shí)現(xiàn)與網(wǎng)絡(luò)資源的交互。
通過(guò)QNetworkAccessManager,Qt應(yīng)用程序能夠輕松地與遠(yuǎn)程服務(wù)器通信,獲取數(shù)據(jù)或?qū)?shù)據(jù)上傳到服務(wù)器。這種網(wǎng)絡(luò)請(qǐng)求的管理不僅是異步的,以確保不會(huì)阻塞主線程,還提供了豐富的信號(hào)和槽機(jī)制,使得開發(fā)者可以靈活地處理不同階段的網(wǎng)絡(luò)操作。
通常,QNetworkAccessManager會(huì)與QNetworkReply和QNetworkRequest一起使用。QNetworkRequest用于封裝和配置網(wǎng)絡(luò)請(qǐng)求的各種屬性,例如URL、請(qǐng)求頭等。而QNetworkReply則代表了對(duì)網(wǎng)絡(luò)請(qǐng)求的響應(yīng),包含了請(qǐng)求返回的數(shù)據(jù)和相關(guān)信息。這三者共同協(xié)作,為Qt應(yīng)用程序提供了便捷、靈活且強(qiáng)大的網(wǎng)絡(luò)通信能力。
1.通用API函數(shù)
1.1QNetworkAccessManager
要想實(shí)現(xiàn)網(wǎng)絡(luò)通信首先需要新建一個(gè)網(wǎng)絡(luò)訪問(wèn)管理器,以下是QNetworkAccessManager類中的一些常用函數(shù)及其描述:
| 函數(shù) | 描述 |
|---|---|
| QNetworkAccessManager(QObject *parent = nullptr) | 構(gòu)造函數(shù),創(chuàng)建一個(gè)QNetworkAccessManager實(shí)例。 |
| virtual ~QNetworkAccessManager() | 虛析構(gòu)函數(shù),釋放QNetworkAccessManager實(shí)例。 |
| QNetworkReply *get(const QNetworkRequest &request) | 發(fā)送GET請(qǐng)求,并返回與請(qǐng)求關(guān)聯(lián)的QNetworkReply對(duì)象。 |
| QNetworkReply *post(const QNetworkRequest &request, QIODevice *data) | 發(fā)送POST請(qǐng)求,并返回與請(qǐng)求關(guān)聯(lián)的QNetworkReply對(duì)象。 |
| QNetworkReply *post(const QNetworkRequest &request, const QByteArray &data) | 發(fā)送POST請(qǐng)求,并返回與請(qǐng)求關(guān)聯(lián)的QNetworkReply對(duì)象。 |
| QNetworkReply *put(const QNetworkRequest &request, QIODevice *data) | 發(fā)送PUT請(qǐng)求,并返回與請(qǐng)求關(guān)聯(lián)的QNetworkReply對(duì)象。 |
| QNetworkReply *put(const QNetworkRequest &request, const QByteArray &data) | 發(fā)送PUT請(qǐng)求,并返回與請(qǐng)求關(guān)聯(lián)的QNetworkReply對(duì)象。 |
| QNetworkReply *deleteResource(const QNetworkRequest &request) | 發(fā)送DELETE請(qǐng)求,并返回與請(qǐng)求關(guān)聯(lián)的QNetworkReply對(duì)象。 |
| QNetworkReply *head(const QNetworkRequest &request) | 發(fā)送HEAD請(qǐng)求,并返回與請(qǐng)求關(guān)聯(lián)的QNetworkReply對(duì)象。 |
| QNetworkReply *sendCustomRequest(const QNetworkRequest &request, const QByteArray &verb, QIODevice *data = nullptr) | 發(fā)送自定義請(qǐng)求,并返回與請(qǐng)求關(guān)聯(lián)的QNetworkReply對(duì)象。 |
| QNetworkReply *sendCustomRequest(const QNetworkRequest &request, const QByteArray &verb, const QByteArray &data) | 發(fā)送自定義請(qǐng)求,并返回與請(qǐng)求關(guān)聯(lián)的QNetworkReply對(duì)象。 |
| void setConfiguration(const QNetworkConfiguration &config) | 設(shè)置網(wǎng)絡(luò)配置,用于定制網(wǎng)絡(luò)行為。 |
| QNetworkConfiguration configuration() const | 獲取當(dāng)前網(wǎng)絡(luò)配置。 |
| void clearAccessCache() | 清除網(wǎng)絡(luò)訪問(wèn)緩存。 |
| void setCache(QAbstractNetworkCache *cache) | 設(shè)置網(wǎng)絡(luò)緩存。 |
| QAbstractNetworkCache *cache() const | 獲取當(dāng)前網(wǎng)絡(luò)緩存。 |
| void setCookieJar(QNetworkCookieJar *cookieJar) | 設(shè)置用于管理HTTP cookie的QNetworkCookieJar。 |
| QNetworkCookieJar *cookieJar() const | 獲取當(dāng)前的HTTP cookie管理器。 |
這些函數(shù)提供了QNetworkAccessManager的核心功能,使得開發(fā)者能夠方便地進(jìn)行各種類型的網(wǎng)絡(luò)請(qǐng)求,配置網(wǎng)絡(luò)參數(shù),并進(jìn)行相關(guān)的網(wǎng)絡(luò)管理操作。
1.2QNetworkReply
以下是QNetworkReply類中的一些常用函數(shù)及其描述:
| 函數(shù) | 描述 |
|---|---|
| QByteArray readAll() const | 讀取所有可用的數(shù)據(jù),并返回一個(gè)QByteArray,包含從網(wǎng)絡(luò)回復(fù)讀取的所有內(nèi)容。 |
| QByteArray peek(int maxSize) const | 查看最多maxSize字節(jié)的可用數(shù)據(jù),但不從緩沖區(qū)中移除。 |
| QByteArray read(int maxSize) | 從網(wǎng)絡(luò)回復(fù)中讀取最多maxSize字節(jié)的數(shù)據(jù),并將其從緩沖區(qū)中移除。 |
| QByteArray readLine(int maxSize = 0) | 從網(wǎng)絡(luò)回復(fù)中讀取一行數(shù)據(jù),最多包含maxSize字節(jié),并將其從緩沖區(qū)中移除。 |
| void ignoreSslErrors(const QList<QSslError> &errors = QList<QSslError>()) | 忽略SSL錯(cuò)誤,繼續(xù)處理網(wǎng)絡(luò)回復(fù)。 |
| void abort() | 終止網(wǎng)絡(luò)回復(fù)的處理,關(guān)閉底層連接。 |
| void close() | 關(guān)閉網(wǎng)絡(luò)回復(fù)的處理。 |
| QUrl url() const | 返回與網(wǎng)絡(luò)回復(fù)相關(guān)聯(lián)的URL。 |
| QNetworkRequest request() const | 返回生成此網(wǎng)絡(luò)回復(fù)的網(wǎng)絡(luò)請(qǐng)求。 |
| QNetworkAccessManager *manager() const | 返回與網(wǎng)絡(luò)回復(fù)相關(guān)聯(lián)的QNetworkAccessManager。 |
| bool isFinished() const | 檢查網(wǎng)絡(luò)回復(fù)是否已完成。 |
| QNetworkReply::NetworkError error() const | 返回網(wǎng)絡(luò)回復(fù)的錯(cuò)誤代碼。 |
| bool hasRawHeader(const QByteArray &headerName) const | 檢查網(wǎng)絡(luò)回復(fù)是否包含指定原始頭。 |
| QList<QByteArray> rawHeaderList() const | 返回網(wǎng)絡(luò)回復(fù)的所有原始頭的列表。 |
| QByteArray rawHeader(const QByteArray &headerName) const | 返回指定原始頭的值。 |
| QVariant header(QNetworkRequest::KnownHeaders header) const | 返回指定標(biāo)準(zhǔn)頭的值。 |
| QList<QByteArray> rawHeaderValues(const QByteArray &headerName) const | 返回指定原始頭的所有值。 |
| QVariant attribute(QNetworkRequest::Attribute code) const | 返回指定網(wǎng)絡(luò)請(qǐng)求屬性的值。 |
| QIODevice *readAllStandardOutput() | 讀取標(biāo)準(zhǔn)輸出的所有數(shù)據(jù),并返回一個(gè)QIODevice,用于訪問(wèn)讀取的內(nèi)容。 |
| QIODevice *readAllStandardError() | 讀取標(biāo)準(zhǔn)錯(cuò)誤的所有數(shù)據(jù),并返回一個(gè)QIODevice,用于訪問(wèn)讀取的內(nèi)容。 |
| bool isReadable() const | 檢查網(wǎng)絡(luò)回復(fù)是否可讀取。 |
這些函數(shù)提供了對(duì)QNetworkReply實(shí)例進(jìn)行各種操作和查詢的方法,包括讀取回復(fù)數(shù)據(jù)、處理SSL錯(cuò)誤、獲取請(qǐng)求信息、檢查錯(cuò)誤狀態(tài)等。開發(fā)者可以根據(jù)具體需求使用這些函數(shù)來(lái)有效地與網(wǎng)絡(luò)回復(fù)進(jìn)行交互。
1.3QNetworkRequest
以下是QNetworkRequest類中的一些常用函數(shù)及其描述:
| 函數(shù) | 描述 |
|---|---|
| QNetworkRequest(const QUrl &url) | 使用給定的URL構(gòu)造一個(gè)QNetworkRequest實(shí)例。 |
| void setUrl(const QUrl &url) | 設(shè)置QNetworkRequest的URL。 |
| QUrl url() const | 返回與QNetworkRequest相關(guān)聯(lián)的URL。 |
| void setRawHeader(const QByteArray &headerName, const QByteArray &headerValue) | 設(shè)置指定原始頭的值。 |
| QByteArray rawHeader(const QByteArray &headerName) const | 返回指定原始頭的值。 |
| bool hasRawHeader(const QByteArray &headerName) const | 檢查QNetworkRequest是否包含指定原始頭。 |
| void setRawHeaderList(const QList<QByteArray> &headerList) | 設(shè)置所有原始頭的列表。 |
| QList<QByteArray> rawHeaderList() const | 返回QNetworkRequest的所有原始頭的列表。 |
| void setHeader(QNetworkRequest::KnownHeaders header, const QVariant &value) | 設(shè)置指定標(biāo)準(zhǔn)頭的值。 |
| QVariant header(QNetworkRequest::KnownHeaders header) const | 返回指定標(biāo)準(zhǔn)頭的值。 |
| void setAttribute(QNetworkRequest::Attribute code, const QVariant &value) | 設(shè)置指定網(wǎng)絡(luò)請(qǐng)求屬性的值。 |
| QVariant attribute(QNetworkRequest::Attribute code) const | 返回指定網(wǎng)絡(luò)請(qǐng)求屬性的值。 |
| void setSslConfiguration(const QSslConfiguration &config) | 設(shè)置SSL配置。 |
| QSslConfiguration sslConfiguration() const | 返回SSL配置。 |
| void setMaximumRedirectsAllowed(int maxRedirects) | 設(shè)置允許的最大重定向次數(shù)。 |
| int maximumRedirectsAllowed() const | 返回允許的最大重定向次數(shù)。 |
| void setOriginatingObject(QObject *object) | 設(shè)置發(fā)起此網(wǎng)絡(luò)請(qǐng)求的對(duì)象。 |
| QObject *originatingObject() const | 返回發(fā)起此網(wǎng)絡(luò)請(qǐng)求的對(duì)象。 |
| bool isEmpty() const | 檢查QNetworkRequest是否為空(未設(shè)置URL)。 |
這些函數(shù)提供了對(duì)QNetworkRequest實(shí)例進(jìn)行各種操作和查詢的方法,包括設(shè)置和獲取頭信息、設(shè)置SSL配置、設(shè)置和獲取網(wǎng)絡(luò)請(qǐng)求屬性等。開發(fā)者可以根據(jù)具體需求使用這些函數(shù)來(lái)有效地構(gòu)建和管理網(wǎng)絡(luò)請(qǐng)求。
2.實(shí)現(xiàn)Web頁(yè)面訪問(wèn)
要使用該模塊讀者應(yīng)該在*.pro文件內(nèi)包含network網(wǎng)絡(luò)模塊,并在頭文件中引入QNetworkAccessManager、QNetworkReply、QNetworkRequest三個(gè)類,在建立訪問(wèn)時(shí)首先使用QNetworkAccessManager新增一個(gè)manager管理類,并通過(guò)QNetworkRequest類創(chuàng)建一個(gè)GET請(qǐng)求地址,通過(guò)使用manager.get方法實(shí)現(xiàn)對(duì)特定頁(yè)面的訪問(wèn)。
當(dāng)訪問(wèn)完成時(shí)需要通過(guò)一個(gè)信號(hào)來(lái)實(shí)現(xiàn)對(duì)數(shù)據(jù)的處理,在QNetworkReply類中包含有如下表所示的信號(hào)以供讀者使用,例如當(dāng)訪問(wèn)被完成時(shí)則自動(dòng)觸發(fā)&QNetworkReply::finished完成信號(hào),此時(shí)只需要對(duì)該信號(hào)進(jìn)行相應(yīng)的處理即可,通常會(huì)使用一個(gè)槽函數(shù)來(lái)處理它。
| 信號(hào) | 描述 |
|---|---|
| finished() | 當(dāng)網(wǎng)絡(luò)請(qǐng)求完成時(shí)發(fā)出。 |
| downloadProgress(qint64, qint64) | 在下載過(guò)程中定期發(fā)出,提供下載進(jìn)度信息。參數(shù)為已下載的字節(jié)數(shù)和總字節(jié)數(shù)。 |
| uploadProgress(qint64, qint64) | 在上傳過(guò)程中定期發(fā)出,提供上傳進(jìn)度信息。參數(shù)為已上傳的字節(jié)數(shù)和總字節(jié)數(shù)。 |
| readyRead() | 當(dāng)有可讀取的數(shù)據(jù)時(shí)發(fā)出,用于通知應(yīng)用程序可以調(diào)用readAll()或read()方法以獲取更多數(shù)據(jù)。 |
| error(QNetworkReply::NetworkError) | 當(dāng)網(wǎng)絡(luò)請(qǐng)求發(fā)生錯(cuò)誤時(shí)發(fā)出,參數(shù)為錯(cuò)誤代碼。 |
| sslErrors(const QList<QSslError> &) | 當(dāng)SSL錯(cuò)誤發(fā)生時(shí)發(fā)出,參數(shù)為SSL錯(cuò)誤的列表。 |
這些信號(hào)提供了豐富的信息,使開發(fā)者能夠在不同階段處理網(wǎng)絡(luò)請(qǐng)求。同理,在下載和上傳過(guò)程中可以使用downloadProgress和uploadProgress信號(hào)來(lái)獲取進(jìn)度信息,readyRead信號(hào)表示有可讀取的數(shù)據(jù),error信號(hào)表示請(qǐng)求發(fā)生錯(cuò)誤,sslErrors信號(hào)表示SSL相關(guān)的錯(cuò)誤。
當(dāng)信號(hào)被觸發(fā)時(shí)則會(huì)通過(guò)QObject::connect連接到對(duì)應(yīng)的槽函數(shù)上,如下案例中所示,在槽函數(shù)內(nèi)通過(guò)reply->attribute方法我們獲取到此次響應(yīng)碼中的QNetworkRequest::HttpStatusCodeAttribute屬性,該屬性用來(lái)指明本次訪問(wèn)的狀態(tài)值。此類屬性也有許多可供參考,如下所示;
| 屬性 | 描述 |
|---|---|
| QNetworkRequest::HttpStatusCodeAttribute | HTTP響應(yīng)的狀態(tài)碼。 |
| QNetworkRequest::HttpReasonPhraseAttribute | HTTP響應(yīng)的原因短語(yǔ),如"OK"、"Not Found"等。 |
| QNetworkRequest::RedirectionTargetAttribute | 重定向目標(biāo)的URL。 |
| QNetworkRequest::ConnectionEncryptedAttribute | 連接是否加密的標(biāo)志,返回一個(gè)bool值。 |
| QNetworkRequest::SourceIsFromCacheAttribute | 請(qǐng)求是否來(lái)自緩存的標(biāo)志,返回一個(gè)bool值。 |
| QNetworkRequest::HttpPipeliningAllowedAttribute | 是否允許HTTP流水線傳輸?shù)臉?biāo)志,返回一個(gè)bool值。 |
| QNetworkRequest::HttpPipeliningWasUsedAttribute | 是否使用了HTTP流水線傳輸?shù)臉?biāo)志,返回一個(gè)bool值。 |
| QNetworkRequest::CustomVerbAttribute | 自定義請(qǐng)求動(dòng)作(HTTP verb)的字符串。 |
| QNetworkRequest::User | 用戶自定義的屬性,用于存儲(chǔ)任意類型的用戶數(shù)據(jù)。 |
這些屬性提供了額外的信息,使得開發(fā)者能夠更全面地了解和處理網(wǎng)絡(luò)響應(yīng)。根據(jù)具體的應(yīng)用需求,開發(fā)者可以選擇使用這些屬性中的一個(gè)或多個(gè)來(lái)獲取所需的信息。
#include <QCoreApplication>
#include <QNetworkAccessManager>
#include <QNetworkReply>
#include <QNetworkRequest>
#include <QDebug>
int main(int argc, char *argv[])
{
QCoreApplication a(argc, argv);
// 創(chuàng)建網(wǎng)絡(luò)訪問(wèn)管理器
QNetworkAccessManager manager;
// 創(chuàng)建GET請(qǐng)求
QNetworkRequest request(QUrl("http://www.baidu.com"));
// 發(fā)送GET請(qǐng)求
QNetworkReply *reply = manager.get(request);
// 連接信號(hào)槽,處理響應(yīng)
QObject::connect(reply, &QNetworkReply::finished, [&]()
{
if (reply->error() == QNetworkReply::NoError)
{
// 獲取請(qǐng)求的 URL
qDebug() << "Request URL:" << reply->request().url();
// 輸出請(qǐng)求頭信息
qDebug() << "Request Headers:";
QList<QByteArray> requestHeaders = reply->request().rawHeaderList();
foreach (const QByteArray &header, requestHeaders) {
qDebug() << header << ":" << reply->request().rawHeader(header);
}
// 獲取響應(yīng)碼
int statusCode = reply->attribute(QNetworkRequest::HttpStatusCodeAttribute).toInt();
qDebug() << "HttpStatusCodeAttribute:" << statusCode;
// 連接是否加密的標(biāo)志
bool connectionEncryptedAttribute = reply->attribute(QNetworkRequest::ConnectionEncryptedAttribute).toBool();
qDebug() << "ConnectionEncryptedAttribute:" << connectionEncryptedAttribute;
// 請(qǐng)求是否來(lái)自緩存的標(biāo)志
bool sourceIsFromCacheAttribute = reply->attribute(QNetworkRequest::SourceIsFromCacheAttribute).toBool();
qDebug() << "SourceIsFromCacheAttribute:" << sourceIsFromCacheAttribute;
// HTTP請(qǐng)求是否被允許進(jìn)行流水線處理的標(biāo)志
bool httpPipeliningAllowedAttribute = reply->attribute(QNetworkRequest::HttpPipeliningAllowedAttribute).toBool();
qDebug() << "HttpPipeliningAllowedAttribute:" << httpPipeliningAllowedAttribute;
// 輸出響應(yīng)頭信息
qDebug() << "Response Headers:";
QList<QByteArray> responseHeaders = reply->rawHeaderList();
foreach (const QByteArray &header, responseHeaders) {
qDebug() << header << ":" << reply->rawHeader(header);
}
// 處理響應(yīng)內(nèi)容,這里可以使用 readAll() 方法獲取響應(yīng)內(nèi)容
// qDebug() << "Response Content:" << reply->readAll();
} else
{
qDebug() << "Error:" << reply->errorString();
}
// 釋放資源
reply->deleteLater();
QCoreApplication::quit();
});
return a.exec();
}
讀者可自行編譯并運(yùn)行這段代碼,觀察請(qǐng)求與相應(yīng)數(shù)據(jù)如下圖所示;

至于如何在圖形界面中使用則就更簡(jiǎn)單了,首先我們?cè)?code>mainwindow.h頭文件中定義好所需要的兩個(gè)槽函數(shù),函數(shù)on_finished()用于在完成請(qǐng)求后被調(diào)用,函數(shù)on_readyRead()則用于在回調(diào)被執(zhí)行后調(diào)用,并并以兩個(gè)網(wǎng)絡(luò)管理類的指針變量,如下所示;
class MainWindow : public QMainWindow
{
Q_OBJECT
public:
MainWindow(QWidget *parent = nullptr);
~MainWindow();
private slots:
//自定義槽函數(shù)
void on_finished();
void on_readyRead();
void on_pushButton_clicked();
private:
Ui::MainWindow *ui;
QNetworkAccessManager networkManager; // 網(wǎng)絡(luò)管理
QNetworkReply *reply; // 網(wǎng)絡(luò)響應(yīng)
};
當(dāng)獲取按鈕被點(diǎn)擊后則開始執(zhí)行讀入指定URL地址,并對(duì)該地址進(jìn)行網(wǎng)頁(yè)訪問(wèn),同時(shí)綁定這兩個(gè)信號(hào),一旦被觸發(fā)則自動(dòng)路由到對(duì)應(yīng)的槽函數(shù)上面去,如下所示;
void MainWindow::on_pushButton_clicked()
{
// 讀入U(xiǎn)RL地址
QString urlSpec = ui->lineEdit->text().trimmed();
if (urlSpec.isEmpty())
{
QMessageBox::information(this, "錯(cuò)誤", "請(qǐng)指定URL");
return;
}
// 格式化URL
QUrl newUrl = QUrl::fromUserInput(urlSpec);
if (!newUrl.isValid())
{
QMessageBox::information(this, "錯(cuò)誤", QString("無(wú)效URL: %1").arg(urlSpec));
return;
}
// 訪問(wèn)頁(yè)面
reply = networkManager.get(QNetworkRequest(newUrl));
// 完成時(shí)的槽函數(shù)綁定
connect(reply, SIGNAL(finished()), this, SLOT(on_finished()));
// 讀入數(shù)據(jù)的槽函數(shù)綁定
connect(reply, SIGNAL(readyRead()), this, SLOT(on_readyRead()));
}
相對(duì)應(yīng)的,在on_finished()槽函數(shù)中我們將響應(yīng)頭讀出并輸出到文本框中,在on_readyRead()槽函數(shù)中則是對(duì)整個(gè)網(wǎng)站頁(yè)面源代碼的輸出功能,完整代碼如下所示;
void MainWindow::on_finished()
{
// 獲取響應(yīng)碼
int statusCode = reply->attribute(QNetworkRequest::HttpStatusCodeAttribute).toInt();
if(statusCode == 200)
{
ui->plainTextEdit_2->appendPlainText("響應(yīng)頭數(shù)據(jù):");
// 輸出響應(yīng)頭信息
QList<QByteArray> responseHeaders = reply->rawHeaderList();
foreach (const QByteArray &header, responseHeaders)
{
ui->plainTextEdit_2->appendPlainText(header + " : " + reply->rawHeader(header));
}
}
}
// 讀入頁(yè)面源代碼
void MainWindow::on_readyRead()
{
ui->plainTextEdit->setPlainText(reply->readAll());
}
運(yùn)行代碼,讀者可自行輸入特定的網(wǎng)站進(jìn)行讀取測(cè)試,如下所示(完整代碼請(qǐng)參考課件部分);

以上就是C++ Qt開發(fā)之使用QNetworkAccessManager實(shí)現(xiàn)Web網(wǎng)頁(yè)訪問(wèn)的詳細(xì)內(nèi)容,更多關(guān)于Qt QNetworkAccessManager的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
數(shù)據(jù)結(jié)構(gòu) 數(shù)組順序存儲(chǔ)詳細(xì)介紹
這篇文章主要介紹了數(shù)據(jù)結(jié)構(gòu) 數(shù)組順序存儲(chǔ)詳細(xì)介紹的相關(guān)資料,需要的朋友可以參考下2017-05-05
C++實(shí)現(xiàn)銀行排隊(duì)系統(tǒng)
這篇文章主要為大家詳細(xì)介紹了C++實(shí)現(xiàn)銀行排隊(duì)系統(tǒng),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-07-07
Android App仿微信界面切換時(shí)Tab圖標(biāo)變色效果的制作方法
這篇文章主要介紹了Android App仿微信界面切換時(shí)Tab圖標(biāo)變色效果的制作方法,重點(diǎn)講解了圖標(biāo)的繪制技巧,需要的朋友可以參考下2016-04-04
C/C++實(shí)現(xiàn)發(fā)送與接收HTTP/S請(qǐng)求的示例代碼
HTTP(Hypertext Transfer Protocol)是一種用于傳輸超文本的協(xié)議,它是一種無(wú)狀態(tài)的、應(yīng)用層的協(xié)議,用于在計(jì)算機(jī)之間傳輸超文本文檔,通常在 Web 瀏覽器和 Web 服務(wù)器之間進(jìn)行數(shù)據(jù)通信,本文給大家介紹了C/C++發(fā)送與接收HTTP/S請(qǐng)求,需要的朋友可以參考下2023-11-11
c語(yǔ)言實(shí)現(xiàn)簡(jiǎn)單的易語(yǔ)言
在本篇內(nèi)容里小編給大家整理了一篇關(guān)于c語(yǔ)言實(shí)現(xiàn)一個(gè)簡(jiǎn)單的易語(yǔ)言的相關(guān)知識(shí)點(diǎn),需要的朋友們參考下。2018-12-12

