網路處理1 非同步GET請求

2022-09-17 05:54:17 字數 3134 閱讀 3619

本文目錄

近幾年來,雲計算是乙個非常熱門的技術名詞,很多專家認為,雲計算會改變網際網路的技術基礎,甚至會影響整個產業的格局。可能還很多人不了解什麼是雲計算,簡單來說,就是把使用者的資料(比如文件、**等)、使用者需要使用的軟體、使用者需要搜尋的資源都儲存在"雲端",並不用儲存在使用者本地。你可以將"雲端"看做了一台超級計算機,其實是由無數臺大型伺服器組成的。

2.伺服器響應後返回資料給客戶端

3.客戶端對資料進行解析後以圖形介面的形式(如列表形式)呈現給使用者

網路處理這一塊在移動開發中佔據著非常重要的地位,我們這個專題主要來學習ios網路處理中的http請求。

如果你想在ios中傳送http請求的話,有很多方式可以選擇,我在這裡介紹幾個常見的:

1> core foundation框架中的cfnetwork api:純c語言的api,效能非常高

2> foundation框架中的nsurlconnection api:objective-c的api,效能也不錯,簡單易用

我們這個專題主要來研究nsurlconnection的使用,至於第3方框架的學習,網上也有很多資源可以搜尋。

回到頂部

眾所周知,http的主要請求方式有2種:get請求和post請求,接下來先演示下如何傳送乙個get請求。

需要注意的是,你最好傳送乙個非同步請求,不要傳送同步請求。ios程式啟動後,系統會預設建立一條主線程,也稱為ui執行緒,這條主線程專門用來渲染ui介面、處理ui介面和使用者之間的互動,比如處理使用者的觸控事件、文字輸入事件等。所謂非同步請求,就是在後台執行緒傳送請求,不在主線程傳送請求。一般情況下,客戶端發出請求後,需要等待伺服器的資料返回,如果伺服器處理速度比較慢或者網速慢的話,可能要等很長時間。因此,如果你執意要傳送同步請求,也就是在主線程傳送請求,會造成主線程阻塞,容易出現卡機現象,給使用者帶來極差的體驗。

1 // 請求位址

2 nsstring *urlstring = @"";

3 4 // 初始化乙個nsurl物件

5 nsurl *url = [nsurl urlwithstring:urlstring];

6 7 // 初始化乙個請求

8 nsmutableurlrequest *request = [nsmutableurlrequest requestwithurl:url];

9 // 設定請求方法,可以省略,預設就是get請求

11 // 如果60秒過後伺服器還沒有相應,就算請求超時

12 request.timeoutinterval = 60;

13 14 // 初始化乙個連線

15 nsurlconnection *conn = [nsurlconnection connectionwithrequest:request delegate:self];

16 // 開始乙個非同步請求

17 [conn start];

1> 第2行的是請求位址,由於是get請求,請求引數是直接拼接到路徑後面的

2> 第17行呼叫nsurlconnection的start方法傳送乙個htpp請求,預設就是非同步請求

在前面的第15行**中,初始化nsurlconnection物件的時候傳了個self做**(delegate),我這裡的self是控制器。在客戶端跟伺服器互動過程會不斷地給這個**物件傳送訊息,也就是會不斷地呼叫**物件的相應方法。ios在nsurlconnectiondatadelegate協議中定義了很多**方法,我這裡只介紹常用的3個方法:

1 #pragma mark - nsurlconnectiondatadelegate

2 #pragma mark 接收到伺服器返回的資料時呼叫(如果資料比較多,這個方法可能會被呼叫多次)

3 - (void)connection:(nsurlconnection *)connection didreceivedata:(nsdata *)data

8 9 #pragma mark 網路連線出錯時呼叫

10 - (void)connection:(nsurlconnection *)connection didfailwitherror:(nserror *)error

13 14 #pragma mark 伺服器的資料已經接收完畢時呼叫

15 - (void)connectiondidfinishloading:(nsurlconnection *)connection

2> 第6行用乙個nsmutabledata物件拼接伺服器返回的所有資料,self.data是乙個nsmutabledata。

3> 當伺服器已經成功返回所有的資料後,會呼叫第15行的**方法,到此為止,self.data裡面存放著伺服器端返回的所有資料

4> 由於我這邊伺服器返回的是json字串資料,所以在18行將self.data轉換為nsstring,然後列印出來看看資料對不對

如果你的請求引數中含有中文,必須先進行編碼,然後再拼接到請求路徑後面。

下面的請求路徑寫法是錯誤的:

1 nsstring *urlstring = @"母雞";
應該這樣寫:

1 // 使用utf-8對中文引數進行編碼

2 nsstring *param = [@"母雞" stringbyaddingpercentescapesusingencoding:nsutf8stringencoding];

3 4 // 請求位址

5 nsstring *baseurl = @"";

1> 第2行使用utf-8對中文引數進行編碼

2> 在第6行拼接編碼後的引數到請求路徑中

如果使用者的網路狀況不是很好,那麼在登入的過程中,使用者很可能會點選"取消"按鈕來取消登入

當使用者點選了取消按鈕,我們也應該終止之前傳送的請求,這時候可以這樣做

[conn cancel];

conn是乙個nsurlconnection物件

原作者,m了個j

網路程式設計 get 非同步 請求

1.獲取url,並建立請求物件 nsurlrequest request nsurlrequest requestwithurl nsurl urlwithstring get url 非同步,先執行block塊外面的 專案中最常見的錯誤就是,在block外給 dictionary開闢空間,但是塊內...

網路處理2 非同步POST請求和同步請求

本文目錄 上一講介紹了ios中的非同步get請求,這講來看看非同步post請求。回到頂部 假如請求路徑是請求引數有2個 要想在ios中傳送乙個post請求,首先要了解post請求的一些細節 1 跟get請求不一樣的是,post請求的請求引數不是拼接在請求路徑後面,而是以請求體的形式傳送到伺服器端。2...

node處理get請求

看node已經有一段時間了,因為放假比較懶,沒有更新node。還是比較坑。年初沒專案哪只能來填填坑啦。如題,這篇寫node如何處理get請求。對於乙個前端碼農來說,後台給我們的第一印象就是介面,這也是為何前端工程師學node的原因。這篇就是說乙個get請求在node的環境下如何處理的。話不多說先貼 ...