天天看點

iOS網絡程式設計之四——請求類NSURLRequest使用詳解

        在前面幾篇部落格中,介紹了ios開發中的網絡程式設計相關内容并且介紹了常用了兩個平行的網絡架構nsurlsession和nsurlconnection。無論是nsurlsession類還是nsurlconnection類,其網絡請求都是通過nsurlrequest類進行發起的,本篇部落格将介紹nsurlrequest類的用法和其中請求屬性的設定。

        前幾篇部落格位址如下:

<a href="http://my.oschina.net/u/2340880/blog/620225#">?</a>

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

<code>//通過類方法建立預設的請求對象</code>

<code>/*</code>

<code>通過這種方式建立的請求對象 預設使用nsurlrequestuseprotocolcachepolicy緩存邏輯 預設請求逾時時限為60s</code>

<code>*/</code>

<code>+ (instancetype)requestwithurl:(nsurl *)url;</code>

<code>//傳回一個bool值 用于判斷是否支援安全編碼</code>

<code>+ (</code><code>bool</code><code>)supportssecurecoding;</code>

<code>//請求對象的初始化方法 建立時設定緩存邏輯和逾時時限</code>

<code>+ (instancetype)requestwithurl:(nsurl *)url cachepolicy:(nsurlrequestcachepolicy)cachepolicy timeoutinterval:(nstimeinterval)timeoutinterval;</code>

<code>//init方法進行對象的建立 預設使用nsurlrequestuseprotocolcachepolicy緩存邏輯 預設請求逾時時限為60s</code>

<code>- (instancetype)initwithurl:(nsurl *)url;</code>

<code>//init方法進行對象的建立</code>

<code>- (instancetype)initwithurl:(nsurl *)url cachepolicy:(nsurlrequestcachepolicy)cachepolicy timeoutinterval:(nstimeinterval)timeoutinterval;</code>

<code>//隻讀屬性 擷取請求對象的url</code>

<code>@property (nullable, readonly, copy) nsurl *url;</code>

<code>//隻讀屬性 緩存政策枚舉</code>

<code>nsurlrequestcachepolicy枚舉如下:</code>

<code>typedef ns_enum(nsuinteger, nsurlrequestcachepolicy)</code>

<code>{</code>

<code>    </code><code>//預設的緩存協定</code>

<code>    </code><code>nsurlrequestuseprotocolcachepolicy = 0,</code>

<code>    </code><code>//無論有無本地緩存資料 都進行從新請求</code>

<code>    </code><code>nsurlrequestreloadignoringlocalcachedata = 1,</code>

<code>    </code><code>//忽略本地和遠端的緩存資料 未實作的政策</code>

<code>    </code><code>nsurlrequestreloadignoringlocalandremotecachedata = 4, </code>

<code>    </code><code>//無論有無緩存資料 都進行從新請求</code>

<code>    </code><code>nsurlrequestreloadignoringcachedata = nsurlrequestreloadignoringlocalcachedata,</code>

<code>    </code><code>//先檢查緩存 如果沒有緩存再進行請求</code>

<code>    </code><code>nsurlrequestreturncachedataelseload = 2,</code>

<code>    </code><code>//類似離線模式,隻讀緩存 無論有無緩存都不進行請求</code>

<code>    </code><code>nsurlrequestreturncachedatadontload = 3,</code>

<code>    </code><code>//未實作的政策</code>

<code>    </code><code>nsurlrequestreloadrevalidatingcachedata = 5, // unimplemented</code>

<code>};</code>

<code>@property (readonly) nsurlrequestcachepolicy cachepolicy;</code>

<code>//隻讀屬性 擷取請求的逾時時限</code>

<code>@property (readonly) nstimeinterval timeoutinterval;</code>

<code>//主文檔位址 這個位址用來存放緩存</code>

<code>@property (nullable, readonly, copy) nsurl *maindocumenturl;</code>

<code>//擷取網絡請求的服務類型 枚舉如下</code>

<code>typedef ns_enum(nsuinteger, nsurlrequestnetworkservicetype)</code>

<code>    </code><code>nsurlnetworkservicetypedefault = 0,   // standard internet traffic</code>

<code>    </code><code>nsurlnetworkservicetypevoip = 1,  // voice over ip control traffic</code>

<code>    </code><code>nsurlnetworkservicetypevideo = 2, // video traffic</code>

<code>    </code><code>nsurlnetworkservicetypebackground = 3, // background traffic</code>

<code>    </code><code>nsurlnetworkservicetypevoice = 4     // voice data</code>

<code>@property (readonly) nsurlrequestnetworkservicetype networkservicetype;</code>

<code>//擷取是否允許使用服務商蜂窩網絡</code>

<code>@property (readonly) </code><code>bool</code> <code>allowscellularaccess;</code>

nsurlrequest請求類除了在初始化時可以設定一些屬性,建立出來後則大部分屬性都為隻讀的,無法設定與修改。另一個類nsmutableurlrequest可以更加靈活的設定請求的相關屬性。

<code>//設定請求的url</code>

<code>@property (nullable, copy) nsurl *url;</code>

<code>//設定請求的緩存政策</code>

<code>@property nsurlrequestcachepolicy cachepolicy;</code>

<code>//設定逾時時間</code>

<code>@property nstimeinterval timeoutinterval;</code>

<code>//設定緩存目錄</code>

<code>@property (nullable, copy) nsurl *maindocumenturl;</code>

<code>//設定網絡服務類型</code>

<code>@property nsurlrequestnetworkservicetype networkservicetype ns_available(10_7, 4_0);</code>

<code>//設定是否允許使用服務商蜂窩網</code>

<code>@property </code><code>bool</code> <code>allowscellularaccess ns_available(10_8, 6_0);</code>

        一下屬性的設定必須使用nsmutableurlrequest類,如果是nsurlrequest,則隻可以讀,不可以修改。

<code>//設定hppt請求方式 預設為“get”</code>

<code>@property (copy) nsstring *httpmethod;</code>

<code>//通過字典設定http請求頭的鍵值資料</code>

<code>@property (nullable, copy) nsdictionary&lt;nsstring *, nsstring *&gt; *allhttpheaderfields;</code>

<code>//設定http請求頭中的字段值</code>

<code>- (</code><code>void</code><code>)setvalue:(nullable nsstring *)value forhttpheaderfield:(nsstring *)field;</code>

<code>//向http請求頭中添加一個字段</code>

<code>- (</code><code>void</code><code>)addvalue:(nsstring *)value forhttpheaderfield:(nsstring *)field;</code>

<code>//設定http請求體 用于post請求</code>

<code>@property (nullable, copy) nsdata *httpbody;</code>

<code>//設定http請求體的輸入流</code>

<code>@property (nullable, retain) nsinputstream *httpbodystream;</code>

<code>//設定發送請求時是否發送cookie資料</code>

<code>@property </code><code>bool</code> <code>httpshouldhandlecookies;</code>

<code>//設定請求時是否按順序收發 預設禁用 在某些伺服器中設為yes可以提高網絡性能</code>

<code>@property </code><code>bool</code> <code>httpshouldusepipelining;</code>

<code></code>