介紹
QtNetwork是Qt網絡操作模塊,提供了基於TCP/IP的各種API。
qt 4x分别使用QFtp和QHttp,5以后统一用QNetworkAccessManagerHTTP請求方法
根據HTTP標準,HTTP請求可以使用多種請求方法。
HTTP1.0定義了三種請求方法: GET, POST 和HEAD方法。
HTTP1.1新增了五種請求方法:OPTIONS, PUT, DELETE, TRACE 和CONNECT 方法。
序號 | 方法 | 描述 |
1 | GET | 請求指定的頁面信息,並返回實體主體。 |
2 | HEAD | 類似於get請求,只不過返回的響應中沒有具體的內容,用於獲取報頭 |
3 | POST | 向指定資源提交數據進行處理請求(例如提交表單或者上傳文件)。數據被包含在請求體中。 POST請求可能會導致新的資源的建立和/或已有資源的修改。 |
4 | PUT | 從客戶端向服務器傳送的數據取代指定的文檔的內容。 |
5 | DELETE | 請求服務器刪除指定的頁面。 |
6 | CONNECT | HTTP/1.1協議中預留給能夠將連接改為管道方式的代理服務器。 |
7 | OPTIONS | 允許客戶端查看服務器的性能。 |
8 | TRACE | 回顯服務器收到的請求,主要用於測試或診斷。 |
QNetworkAccessManager接口介紹
接口很多,就不全部複製過來了,如果機器裝著qt5,可以直接在助手看。
可以一目了然的看到幾個熟悉詞彙的api:post、get、put、head,當然還有幾個cookie相關的方法。
【領QT開發教程學習資料,點擊下方鏈接莬費領取↓↓ ,先碼住不迷路~】
點擊→領取「鏈接」
1 QNetworkReply *get(const QNetwork Request &request) 2 QNetworkReply *head(const QNetworkRequest &request) 3 bool isStrictTransportSecurityEnabled() const 4 bool isStrictTransportSecurityStoreEnabled() const 5 NetworkAccessibility networkAccessible() const 6 QNetworkReply *post(const QNetworkRequest &request, QIODevice *data) 7 QNetworkReply *post(const QNetworkRequest &request, const QByteArray &data) 8 QNetworkReply *post(const QNetworkRequest &request, QHttpMultiPart *multiPart) 9 QNetworkProxy proxy() const10 QNetworkProxyFactory *proxyFactory() const11 QNetworkReply *put(const QNetworkRequest &request, QIODevice *data)12 QNetworkReply *put(const QNetworkRequest &request, const QByteArray &data)13 QNetworkReply *put(const QNetworkRequest &request, QHttpMultiPart *multiPart)可以發現使用manager還需要幾個類:QNetworkRequest 專門用於請求的,QNetworkReply 接收請求的響應
QNetworkRequest
1 void setAttribute(Attribute code, const QVariant &value)2 void setHeader(KnownHeaders header, const QVariant &value)3 void setMaximumRedirectsAllowed(int maxRedirectsAllowed)4 void setOriginatingObject(QObject *object)5 void setPriority(Priority priority)6 void setRawHeader(const QByteArray &headerName, const QByteArray &headerValue)7 void set Ssl Configuration(const QSslConfiguration &config)8 void setUrl(const QUrl &url)主要就是這幾個寫方法,分別對一個請求的不同類進行配置。
客戶端發送一個HTTP請求到服務器的請求消息包括以下格式:請求行(request line)、請求頭部(header)、空行和請求數據四個部分組成,下圖給出了請求報文的一般格式。請求行組成:請求方法+空格+url+空格+協議版本+回車符+換行符。
對於header,qt提供了一個枚舉類型KnownHeaders分別表示不同項:
Constant | Value | Description |
QNetworkRequest::ContentDispositionHeader | 6 | Corresponds to the HTTP Content-Disposition header and contains a string containing the disposition type (for instance, attachment) and a parameter (for instance, File name). |
QNetworkRequest::ContentTypeHeader | 0 | Corresponds to the HTTP Content-Type header and contains a string containing the media (MIME) type and any auxiliary data (for instance, charset ). |
QNetworkRequest::ContentLengthHeader | 1 | Corresponds to the HTTP Content-Length header and contains the length in bytes of the data transmitted. |
QNetworkRequest::LocationHeader | 2 | Corresponds to the HTTP Location header and contains a URL representing the actual location of the data, including the destination URL in case of redirections. |
QNetworkRequest::LastModifiedHeader | 3 | Corresponds to the HTTP Last-Modified header and contains a QDateTime representing the last modification date of the contents. |
QNetworkRequest::CookieHeader | 4 | Corresponds to the HTTP Cookie header and contains a QList<QNetworkCookie> representing the cookies to be sent back to the server. |
QNetworkRequest::SetCookieHeader | 5 | Corresponds to the HTTP Set-Cookie header and contains a QList<QNetworkCookie> representing the cookies sent by the server to be stored locally. |
QNetworkRequest::UserAgentHeader | 7 | The User-Agent header sent by HTTP clients. |
QNetworkRequest::ServerHeader | 8 | The Server header received by HTTP clients. |
請求類主要是進行對於地址,還給出了QUrl 類,詳情見後。
QNetworkReply
此類繼承自QIODevice,可使用QIODevice的所有接口,包括readall讀取接收的所有信息。
同時此類提供了finished信號,在響應完斥候發出此信號,可關聯自定義槽函數函數,做響應處理。
提供了attribute屬性函數,可以判斷響應的類型,比如RedirectionTargetAttribute是目標url告知進行重定向
QNetworkReply不會自動釋放空間,一定要主動處理內存釋放,可以調用QObject::deleteLater令其自動釋放空間
範例
.h文件
1 #ifndef MAINWINDOW_H 2 # define MAINWINDOW_H 3 4 # include <QMainWindow> 5 #include <QtNetwork> 6 #include <QFile> 7 namespace Ui { 8 class MainWindow; 9 }10 11 class MainWindow : public QMainWindow {12 Q_OBJECT13 14 public:15 explicit MainWindow(QWidget *parent = 0);16 ~MainWindow();17 void Get(QUrl u);18 private slots:19 void on_pushButton_clicked();20 void finished();21 private:22 Ui::MainWindow *ui;23 QNetworkAccessManager manager;24 QUrl url;25 QNetworkReply *reply;26 QString html_text;27 };28 29
没有评论:
发表评论