詳細解析幾個和網(wǎng)絡(luò)請求有關(guān)的類(八) —— 處理重定向和其他請求更改(四)

版本記錄

版本號 時間
V1.0 2018.03.11

前言

我們做APP發(fā)起網(wǎng)絡(luò)請求,一般都是使用框架,這些框架的底層也都是蘋果的API,接下來幾篇就一起來看一下和網(wǎng)絡(luò)有關(guān)的幾個類。感興趣的可以看上面幾篇文章。
1. 詳細解析幾個和網(wǎng)絡(luò)請求有關(guān)的類 (一) —— NSURLSession
2. 詳細解析幾個和網(wǎng)絡(luò)請求有關(guān)的類(二) —— NSURLRequest和NSMutableURLRequest
3. 詳細解析幾個和網(wǎng)絡(luò)請求有關(guān)的類(三) —— NSURLConnection
4. 詳細解析幾個和網(wǎng)絡(luò)請求有關(guān)的類(四) —— NSURLSession和NSURLConnection的區(qū)別
5. 詳細解析幾個和網(wǎng)絡(luò)請求有關(guān)的類(五) —— 關(guān)于NSURL加載系統(tǒng)(一)
6. 詳細解析幾個和網(wǎng)絡(luò)請求有關(guān)的類(六) —— 使用NSURLSession(二)
7. 詳細解析幾個和網(wǎng)絡(luò)請求有關(guān)的類(七) —— URL數(shù)據(jù)的編碼和解碼(三)

回顧

上一篇主要講述了URL數(shù)據(jù)的編碼和解碼,這一篇主要講述處理重定向和其他請求更改。


處理重定向和其他請求更改

當服務(wù)器通過指示客戶端應(yīng)該向另一個URL發(fā)出新請求來響應(yīng)請求時,會發(fā)生重定向。發(fā)生這種情況時,NSURLSession類會通知它的代理。

要處理重定向,您的URL加載類代理必須實現(xiàn)URLSession:task:willPerformHTTPRedirection:newRequest:completionHandler:代理方法。

在這種方法中,委托可以檢查新請求和導致重定向的響應(yīng),并且可以通過NSURLSession的完成處理程序返回一個新的請求對象。

代理可以執(zhí)行以下任何操作:

  • 通過簡單地返回提供的請求來允許重定向。
  • 創(chuàng)建一個新的請求,指向一個不同的URL,并返回該請求。
  • 通過返回nil拒絕重定向并接收來自連接的任何現(xiàn)有數(shù)據(jù)。

另外,代理可以取消重定向和連接。使用NSURLSession,代理通過將- cancel消息發(fā)送給任務(wù)對象來完成此操作。

如果處理請求的NSURLProtocol子類改變NSURLRequest以規(guī)范它的格式,例如,改變用于http://www.apple的請求為http://www.apple.com/。代理還接收URLSession:task:willPerformHTTPRedirection:newRequest:completionHandler:消息。發(fā)生這種情況是因為請求的標準版或規(guī)范版用于緩存管理。在這種特殊情況下,傳遞給代理的響應(yīng)為nil,代理應(yīng)該簡單地返回提供的請求。

Listing 3-1中的示例實現(xiàn)允許規(guī)范更改并拒絕所有服務(wù)器重定向。

// Listing 3-1  Example of an implementation of URLSession:task:willPerformHTTPRedirection:newRequest:completionHandler

- (void)URLSession:(NSURLSession *)session
        task:(NSURLSessionTask *)task
        willPerformHTTPRedirection:(NSHTTPURLResponse *)redirectResponse
        newRequest:(NSURLRequest *)request
        completionHandler:(void (^)(NSURLRequest *))completionHandler
{
    NSURLRequest *newRequest = request;
    if (redirectResponse) {
        newRequest = nil;
    }
 
    completionHandler(newRequest);
}

如果代理沒有為合適的重定向處理代理方法提供實現(xiàn),則允許所有規(guī)范更改和服務(wù)器重定向。

后記

本篇主要介紹處理重定向和其他請求更改。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容