❶ Qt網路編程:QNetworkRequest、QNetworkReply
QNetworkRequest 描述了通過網路發送請求所需的信息,包括一個 URL 和輔助信息,這些信息可用於控制請求的行為或傳遞給應用程序。以下是 QNetworkRequest 的主要類型成員:
- Attribute:用於控制請求行為並傳遞返回信息的屬性,也是可擴展的,允許自定義實現傳遞自定義值。
- CacheLoadControl:控制 QNetworkAccessManager 的緩存機制。
- KnownHeaders:QNetworkRequest 解析的已知標頭類型列表,每個已知標頭以完整的 HTTP 名稱表示。
- LoadControl:指示請求載入機制的某個方面是否已被手動覆蓋。
- Priority:網路請求的優先順序。
- RedirectPolicy:網路訪問 API 是否應自動遵循 HTTP 重定向響應。
以下是 QNetworkRequest 的成員函數:
- setHttp2Configuration(configuration):設置 QNetworkAccessManager 用於此請求及其底層 HTTP/2 連接的參數。
- rawHeaderList():返回在此網路請求中設置的所有原始標頭的列表,按設置順序排列。
- setAttribute(code, value):設置屬性值,如果該屬性已設置,則丟棄先前的值;如果 value 為無效 QVariant,則屬性未設置。
- setMaximumRedirectsAllowed(maxRedirectsAllowed):設置此請求允許遵循的最大重定向數。
- setOriginatingObject(object):設置發起當前請求的對象。
- setPeerVerifyName(peerName):設置證書驗證的主機名(非用於 TCP 連接的主機名)。
- setPriority(priority):設置請求的優先順序,優先順序僅作為對 QNetworkAccessManager 的提示,可使用或不使用。
- setRawHeader(headerName, headerValue):設置表頭的值,兩次設置相同的標題會覆蓋之前的設置。對於多個同名 HTTP 標頭,應將值用逗號分隔並設置為原始標頭。
- setSslConfiguration(config):設置此網路請求的 SSL 配置,適用於私鑰、本地證書、SSL 協議(SSLv2、SSLv3、TLSv1.0)等設置。
- setTransferTimeout(timeout):設置傳輸超時時間(毫秒),如果在超時到期之前沒有傳輸位元組,傳輸將被中止。零表示未設置計時器,調用此函數後超時值為 QNetworkRequest::。
- setUrl(url):設置此網路請求所指的 URL 為 url。
QNetworkReply 是 QNetworkAccessManager 發布請求的回復信息封裝器,它繼承自 QIODevice 類。以下是 QNetworkReply 的主要類型成員:
- NetworkError:指示在處理請求期間發現的所有可能的錯誤情況。
以下是 QNetworkReply 的成員函數:
- abort():立即中止操作並關閉所有仍打開的網路連接,將停止正在進行的上傳,並發射 finished() 信號。
- downloadProgress(bytesReceived, bytesTotal):發出此信號以指示此網路請求的下載部分的進度(如果有)。如果沒有關聯的下載,則發出一次信號,bytesReceived 和 bytesTotal 的值都為 0。
- encrypted():發出此信號,表示 SSL/TLS 會話完成初始握手,可用於對證書鏈執行額外檢查。
- errorOccurred(code):當出現錯誤時發出此信號,code 參數包含檢測到的錯誤代碼。
- finished():發出此信號,表示回復完成處理。發出此信號後,回復的數據不再更新。
- ignoreSslErrors():忽略與網路連接相關的 SSL 錯誤,包括證書驗證錯誤。
- metaDataChanged():每當元數據發生更改時,都會發出此信號。
- (authenticator):發出此信號,指示 SSL/TLS 握手協商 PSK 密碼套件,需要 PSK 身份驗證。
- redirected(url):在請求中設置了 FollowRedirectsAttribute 並且伺服器以 3xx 狀態碼在 location header 中返回有效 url 時,發出此信號,指示 HTTP 重定向。
- redirectAllowed():當處理 redirected() 信號的客戶端代碼驗證了新 URL 時,發出此信號以允許重定向繼續進行。
- sslErrors(errors):發出此信號,表示 SSL/TLS 會話在設置期間遇到錯誤,包括證書驗證錯誤。
- uploadProgress(bytesSent, bytesTotal):發出此信號,指示此網路請求的上傳部分的進度(如果有)。
- close():關閉此設備,丟棄未讀數據,直到讀完才釋放網路資源。如果正在進行上傳,它將一直持續到完成。
- hasRawHeader(headerName):如果名稱 headerName 的原始標頭是由遠程伺服器發送的,返回 true。
- ignoreSslErrors(errors):忽略列表中給出的 SSL 錯誤。
- isFinished():回復完成或中止時返回 true。
- isRunning():與 isFinished() 相反。
- manager():返回用於創建此 QNetworkReply 對象的 QNetworkAccessManager。
- rawHeaderList():返回遠程伺服器發送的標頭欄位列表,按發送順序排列。
- request():返回為此回復發布的請求,請求的 URL 可能與回復的 URL 不同。
- rawHeader(headerName):返回遠程伺服器發送的標頭 headerName 的原始內容,如果未發送標頭,則返回空位元組數組。
- header(header):如果該標頭是由遠程伺服器發送的,返回已知標頭標頭的值;如果未發送標頭,則返回無效的 QVariant。
- sslConfiguration():返回與此回復關聯的 SSL 配置和狀態。
- url():返回下載或上傳的內容的 URL,該 URL 可能與原始請求的 URL 不同。如果設置了 QNetworkRequest::FollowRedirectsAttribute,則返回正在訪問的當前 URL。
- readBufferSize():返回讀取緩沖區的大小,以位元組為單位,值為 0 表示讀寫緩沖區大小不受限制。