網絡七層 以及iOS開發中的get請求 post請求

序言:

大部分應用程序都或多或少會牽扯到網絡開發,例如微博微信,這些應用本身肯能採用iOS開發,但是所有的數據支撐都是基於後臺網絡服務器的.如今,網絡編程越來越普遍,鼓勵的應用通常是沒有生命力的.

網絡七層

OSI七層模型基礎知識及各層常見應用

OSI Open Source Initiative(簡稱OSI,有譯作開放源代碼促進會、開放原始碼組織)是一個旨在推動開源軟件發展的非盈利組織。OSI參考模型(OSI/RM)的全稱是開放系統互連參考模型(Open System Interconnection Reference Model,OSI/RM),它是由國際標準化組織ISO提出的一個網絡系統互連模型。它是網絡技術的基礎,也是分析、評判各種網絡技術的依據,它揭開了網絡的神祕面紗,讓其有理可依,有據可循。

一、 OSI參考模型知識要點

圖表 1:OSI模型基礎知識速覽

模型把網絡通信的工作分爲7層。1至4層被認爲是低層,這些層與數據移動密切相關。5至7層是高層,包含應用程序級的數據。每一層負責一項具體的工作,然後把數據傳送到下一層。由低到高具體分爲:物理層、數據鏈路層、網絡層、傳輸層、會話層、表示層和應用層。

第7層應用層—直接對應用程序提供服務,應用程序可以變化,但要包括電子消息傳輸

第6層表示層—格式化數據,以便爲應用程序提供通用接口。這可以包括加密服務

第5層會話層—在兩個節點之間建立端連接。此服務包括建立連接是以全雙工還是以半雙工的方式進行設置,儘管可以在層4中處理雙工方式

第4層傳輸層—常規數據遞送-面向連接或無連接。包括全雙工或半雙工、

流控制和錯誤恢復服務

第3層網絡層—本層通過尋址來建立兩個節點之間的連接,它包括通過互連網絡來路由和中繼數據

第2層數據鏈路層—在此層將數據分幀,並處理流控制。本層指定拓撲結構並提供硬件尋址

第1層物理層—原始比特流的傳輸

電子信號傳輸和硬件接口數據發送時,從第七層傳到第一層,接受方則相反。

各層對應的典型設備如下:

應用層 ……………….計算機:應用程序,如FTP,SMTP,HTTP

表示層 ……………….計算機:編碼方式,圖像編解碼、URL字段傳輸編碼

會話層 ……………….計算機:建立會話,SESSION認證、斷點續傳

傳輸層 ……………….計算機:進程和端口

網絡層…………………網絡:路由器,防火牆、多層交換機

數據鏈路層………..…..網絡:網卡,網橋,交換機

物理層…………………網絡:中繼器,集線器、網線、HUB

二、 OSI基礎知識

OSI/RM參考模型的提出
世界上第一個網絡體系結構由IBM公司提出(74年,SNA),以後其他公司也相繼提出自己的網絡體系結構如:Digital公司的DNA,美國國 防部的TCP/IP等,多種網絡體系結構並存,其結果是若採用IBM的結構,只能選用IBM的產品,只能與同種結構的網絡互聯。

  爲了促進計算機網絡的發展,國際標準化組織ISO於1977年成立了一個委員會,在現有網絡的基礎上,提出了不基於具體機型、操作系統或公司的網絡體系結構,稱爲開放系統互聯模型(OSI參考,open system interconnection)

OSI的設計目的
OSI模型的設計目的是成爲一個所有銷售商都能實現的開放網路模型,來克服使用衆多私有網絡模型所帶來的困難和低效性。OSI是在一個備受尊敬的國際標準團體的參與下完成的,這個組織就是ISO(國際標準化組織)。什麼是OSI,OSI是Open System Interconnection 的縮寫,意爲開放式系統互聯參考模型。在OSI出現之前,計算機網絡中存在衆多的體系結構,其中以IBM公司的SNA(系統網絡體系結構)和DEC公司的DNA(Digital Network Architecture)數字網絡體系結構最爲著名。爲了解決不同體系結構的網絡的互聯問題,國際標準化組織ISO(注意不要與OSI搞混)於1981年制定了開放系統互連參考模型(Open System Interconnection Reference Model,OSI/RM)。這個模型把網絡通信的工作分爲7層,它們由低到高分別是物理層(Physical Layer),數據鏈路層(Data Link Layer),網絡層(Network Layer),傳輸層(Transport Layer),會話層(Session Layer),表示層(Presentation Layer)和應用層(Application Layer)。第一層到第三層屬於OSI參考模型的低三層,負責創建網絡通信連接的鏈路;第四層到第七層爲OSI參考模型的高四層,具體負責端到端的數據通信。每層完成一定的功能,每層都直接爲其上層提供服務,並且所有層次都互相支持,而網絡通信則可以自上而下(在發送端)或者自下而上(在接收端)雙向進行。當然並不是每一通信都需要經過OSI的全部七層,有的甚至只需要雙方對應的某一層即可。物理接口之間的轉接,以及中繼器與中繼器之間的連接就只需在物理層中進行即可;而路由器與路由器之間的連接則只需經過網絡層以下的三層即可。總的來說,雙方的通信是在對等層次上進行的,不能在不對稱層次上進行通信。

  OSI 標準制定過程中採用的方法是將整個龐大而複雜的問題劃分爲若干個容易處理的小問題,這就是分層的體系結構辦法。在OSI中,採用了三級抽象,既體系結構,服務定義,協議規格說明。

OSI劃分層次的原則

   網絡中各結點都有相同的層次

  不同結點相同層次具有相同的功能

  同一結點相鄰層間通過接口通信

  每一層可以使用下層提供的服務,並向上層提供服務

  不同結點的同等層間通過協議來實現對等層間的通信

OSI/RM分層結構

   對等層實體間通信時信息的流動過程

  對等層通信的實質:

  對等層實體之間虛擬通信;下層向上層提供服務;實際通信在最底層完成在發送方數據由最高層逐漸向下層傳遞,到接收方數據由最低層逐漸向高層傳遞.

  協議數據單元PDU

  SI參考模型中,對等層協議之間交換的信息單元統稱爲協議數據單元(PDU,Protocol Data Unit)。

  而傳輸層及以下各層的PDU另外還有各自特定的名稱:

  傳輸層——數據段(Segment)

  網絡層——分組(數據包)(Packet)

  數據鏈路層——數據幀(Frame)

物理層——比特(Bit)

三、 OSI的七層結構

第一層:物理層(PhysicalLayer)
   規定通信設備的機械的、電氣的、功能的和過程的特性,用以建立、維護和拆除物理鏈路連接。具體地講,機械特性規定了網絡連接時所需接插件的規格尺寸、引腳數量和排列情況等;電氣特性規定了在物理連接上傳輸bit流時線路上信號電平的大小、阻抗匹配、傳輸速率距離限制等;功能特性是指對各個信號先分配確切的信號含義,即定義了DTE和DCE之間各個線路的功能;過程特性定義了利用信號線進行bit流傳輸的一組操作規程,是指在物理連接的建立、維護、交換信息時,DTE和DCE雙方在各電路上的動作系列。

  在這一層,數據的單位稱爲比特(bit)。

  屬於物理層定義的典型規範代表包括:EIA/TIA RS-232、EIA/TIA RS-449、V.35、RJ-45等。

  物理層的主要功能: 

   爲數據端設備提供傳送數據的通路,數據通路可以是一個物理媒體,也可以是多個物理媒體連接而成.一次完整的數據傳輸,包括激活物理連接,傳送數據,終止物理連接.所謂激活,就是不管有多少物理媒體參與,都要在通信的兩個數據終端設備間連接起來,形成一條通路.

  傳輸數據.物理層要形成適合數據傳輸需要的實體,爲數據傳送服務.一是要保證數據能在其上正確通過,二是要提供足夠的帶寬(帶寬是指每秒鐘內能通過的比特(BIT)數),以減少信道上的擁塞.傳輸數據的方式能滿足點到點,一點到多點,串行或並行,半雙工或全雙工,同步或異步傳輸的需要.

  完成物理層的一些管理工作.

物理層的主要設備:中繼器、集線器。

  產品代表:

TP-LINK TL-HP8MU 集線器

第二層:數據鏈路層(DataLinkLayer)
   在物理層提供比特流服務的基礎上,建立相鄰結點之間的數據鏈路,通過差錯控制提供數據幀(Frame)在信道上無差錯的傳輸,並進行各電路上的動作系列。 

  數據鏈路層在不可靠的物理介質上提供可靠的傳輸。該層的作用包括:物理地址尋址、數據的成幀、流量控制、數據的檢錯、重發等。

  在這一層,數據的單位稱爲幀(frame)。

  數據鏈路層協議的代表包括:SDLC、HDLC、PPP、STP、幀中繼等。

  鏈路層的主要功能:

  鏈路層是爲網絡層提供數據傳送服務的,這種服務要依靠本層具備的功能來實現。鏈路層應具備如下功能:

  鏈路連接的建立,拆除,分離。

  幀定界和幀同步。鏈路層的數據傳輸單元是幀,協議不同,幀的長短和界面也有差別,但無論如何必須對幀進行定界。

  順序控制,指對幀的收發順序的控制。

  差錯檢測和恢復。還有鏈路標識,流量控制等等.差錯檢測多用方陣碼校驗和循環碼校驗來檢測信道上數據的誤碼,而幀丟失等用序號檢測.各種錯誤的恢復則常靠反饋重發技術來完成。

數據鏈路層主要設備:二層交換機、網橋

產品代表:

D-Link DES-1024D

第三層:網絡層(Network layer)
在計算機網絡中進行通信的兩個計算機之間可能會經過很多個數據鏈路,也可能還要經過很多通信子網。網絡層的任務就是選擇合適的網間路由和交換結點, 確保數據及時傳送。網絡層將數據鏈路層提供的幀組成數據包,包中封裝有網絡層包頭,其中含有邏輯地址信息- -源站點和目的站點地址的網絡地址。

  如果你在談論一個IP地址,那麼你是在處理第3層的問題,這是“數據包”問題,而不是第2層的“幀”。IP是第3層問題的一部分,此外還有一些路由協議和地址解析協議(ARP)。有關路由的一切事情都在第3層處理。地址解析和路由是3層的重要目的。網絡層還可以實現擁塞控制、網際互連等功能。

  在這一層,數據的單位稱爲數據包(packet)。

  網絡層協議的代表包括:IP、IPX、RIP、OSPF等。

  網絡層主要功能:

   網絡層爲建立網絡連接和爲上層提供服務,應具備以下主要功能:

  路由選擇和中繼

  激活,終止網絡連接

  在一條數據鏈路上覆用多條網絡連接,多采取分時複用技術

  差錯檢測與恢復

  排序,流量控制

  服務選擇

  網絡管理

  網絡層標準簡介

網絡層主要設備:路由器

產品代表:

TP-LINK TL-R4148

第四層:處理信息的傳輸層(Transport layer)

   第4層的數據單元也稱作數據包(packets)。但是,當你談論TCP等具體的協議時又有特殊的叫法,TCP的數據單元稱爲段(segments)而UDP協議的數據單元稱爲“數據報(datagrams)”。這個層負責獲取全部信息,因此,它必須跟蹤數據單元碎片、亂序到達的數據包和其它在傳輸過程中可能發生的危險。第4層爲上層提供端到端(最終用戶到最終用戶)的透明的、可靠的數據傳輸服務。所謂透明的傳輸是指在通信過程中傳輸層對上層屏蔽了通信傳輸系統的具體細節。

  傳輸層協議的代表包括:TCP、UDP、SPX等。

  傳輸層是兩臺計算機經過網絡進行數據通信時,第一個端到端的層次,具有緩衝作用。當網絡層服務質量不能滿足要求時,它將服務加以提高,以滿足高層的要求;當網絡層服務質量較好時,它只用很少的工作。傳輸層還可進行復用,即在一個網絡連接上創建多個邏輯連接。 傳輸層也稱爲運輸層.傳輸層只存在於端開放系統中,是介於低3層通信子網系統和高3層之間的一層,但是很重要的一層.因爲它是源端到目的端對數據傳送進行控制從低到高的最後一層.

  有一個既存事實,即世界上各種通信子網在性能上存在着很大差異.例如電話交換網,分組交換網,公用數據交換網,局域網等通信子網都可互連,但它們提供的吞吐量,傳輸速率,數據延遲通信費用各不相同.對於會話層來說,卻要求有一性能恆定的界面.傳輸層就承擔了這一功能.它採用分流/合流,複用/介複用技術來調節上述通信子網的差異,使會話層感受不到.

此外傳輸層還要具備差錯恢復,流量控制等功能,以此對會話層屏蔽通信子網在這些方面的細節與差異.傳輸層面對的數據對象已不是網絡地址和主機地址,而是和會話層的界面端口.上述功能的最終目的是爲會話提供可靠的,無誤的數據傳輸.傳輸層的服務一般要經歷傳輸連接建立階段,數據傳送階段,傳輸連接釋放階段3個階段纔算完成一個完整的服務過程.而在數據傳送階段又分爲一般數據傳送和加速數據傳送兩種。傳輸層服務分成5種類型.基本可以滿足對傳送質量,傳送速度,傳送費用的各種不同需要.

產品代表:

NETGEAR GS748TS

第五層:會話層(Session layer)

   這一層也可以稱爲會晤層或對話層,在會話層及以上的高層次中,數據傳送的單位不再另外命名,統稱爲報文。會話層不參與具體的傳輸,它提供包括訪問驗證和會話管理在內的建立和維護應用之間通信的機制。如服務器驗證用戶登錄便是由會話層完成的。

  會話層提供的服務可使應用建立和維持會話,並能使會話獲得同步。會話層使用校驗點可使通信會話在通信失效時從校驗點繼續恢復通信。這種能力對於傳送大的文件極爲重要。會話層,表示層,應用層構成開放系統的高3層,面對應用進程提供分佈處理,對話管理,信息表示,恢復最後的差錯等. 會話層同樣要擔負應用進程服務要求,而運輸層不能完成的那部分工作,給運輸層功能差距以彌補.主要的功能是對話管理,數據流同步和重新同步。要完成這些功能,需要由大量的服務單元功能組合,已經制定的功能單元已有幾十種.現將會話層主要功能介紹如下.

  爲會話實體間建立連接。爲給兩個對等會話服務用戶建立一個會話連接,應該做如下幾項工作:

  將會話地址映射爲運輸地址

  選擇需要的運輸服務質量參數(QOS)

  對會話參數進行協商

  識別各個會話連接

  傳送有限的透明用戶數據

  數據傳輸階段

  這個階段是在兩個會話用戶之間實現有組織的,同步的數據傳輸.用戶數據單元爲SSDU,而協議數據單元爲SPDU.會話用戶之間的數據傳送過程是將SSDU轉變成SPDU進行的.

  連接釋放

  連接釋放是通過”有序釋放”,”廢棄”,”有限量透明用戶數據傳送”等功能單元來釋放會話連接的.會話層標準爲了使會話連接建立階段能進行功能協商,也爲了便於其它國際標準參考和引用,定義了12種功能單元.各個系統可根據自身情況和需要,以核心功能服務單元爲基礎,選配其他功能單元組成合理的會話服務子集.會話層的主要標準有”DIS8236:會話服務定義”和”DIS8237:會話協議規範”.

第六層:表示層(Presentation layer)

   這一層主要解決用戶信息的語法表示問題。它將欲交換的數據從適合於某一用戶的抽象語法,轉換爲適合於OSI系統內部使用的傳送語法。即提供格式化的表示和轉換數據服務。數據的壓縮和解壓縮, 加密和解密等工作都由表示層負責。例如圖像格式的顯示,就是由位於表示層的協議來支持。

第七層:應用層(Application layer)
   應用層爲操作系統或網絡應用程序提供訪問網絡服務的接口。

  應用層協議的代表包括:Telnet、FTP、HTTP、SNMP等。

  通過 OSI 層,信息可以從一臺計算機的軟件應用程序傳輸到另一臺的應用程序上。例如,計算機 A 上的應用程序要將信息發送到計算機 B 的應用程序,則計算機 A 中的應用程序需要將信息先發送到其應用層(第七層),然後此層將信息發送到表示層(第六層),表示層將數據轉送到會話層(第五層),如此繼續,直至物理層(第一層)。在物理層,數據被放置在物理網絡媒介中並被髮送至計算機 B 。計算機 B 的物理層接收來自物理媒介的數據,然後將信息向上發送至數據鏈路層(第二層),數據鏈路層再轉送給網絡層,依次繼續直到信息到達計算機 B 的應用層。最後,計算機 B 的應用層再將信息傳送給應用程序接收端,從而完成通信過程。下面圖示說明了這一過程。

  OSI 的七層運用各種各樣的控制信息來和其他計算機系統的對應層進行通信。這些控制信息包含特殊的請求和說明,它們在對應的 OSI 層間進行交換。每一層數據的頭和尾是兩個攜帶控制信息的基本形式。

  對於從上一層傳送下來的數據,附加在前面的控制信息稱爲頭,附加在後面的控制信息稱爲尾。然而,在對來自上一層數據增加協議頭和協議尾,對一個 OSI 層來說並不是必需的。

  當數據在各層間傳送時,每一層都可以在數據上增加頭和尾,而這些數據已經包含了上一層增加的頭和尾。協議頭包含了有關層與層間的通信信息。頭、尾以及數據是相關聯的概念,它們取決於分析信息單元的協議層。例如,傳輸層頭包含了只有傳輸層可以看到的信息,傳輸層下面的其他層只將此頭作爲數據的一部分傳遞。對於網絡層,一個信息單元由第三層的頭和數據組成。對於數據鏈路層,經網絡層向下傳遞的所有信息即第三層頭和數據都被看作是數據。換句話說,在給定的某一 OSI 層,信息單元的數據部分包含來自於所有上層的頭和尾以及數據,這稱之爲封裝。

  例如,如果計算機 A 要將應用程序中的某數據發送至計算機 B ,數據首先傳送至應用層。 計算機 A 的應用層通過在數據上添加協議頭來和計算機 B 的應用層通信。所形成的信息單元包含協議頭、數據、可能還有協議尾,被髮送至表示層,表示層再添加爲計算機 B 的表示層所理解的控制信息的協議頭。信息單元的大小隨着每一層協議頭和協議尾的添加而增加,這些協議頭和協議尾包含了計算機 B 的對應層要使用的控制信息。在物理層,整個信息單元通過網絡介質傳輸。

  計算機 B 中的物理層收到信息單元並將其傳送至數據鏈路層;然後 B 中的數據鏈路層讀取計算機 A 的數據鏈路層添加的協議頭中的控制信息;然後去除協議頭和協議尾,剩餘部分被傳送至網絡層。每一層執行相同的動作:從對應層讀取協議頭和協議尾,並去除,再將剩餘信息發送至上一層。應用層執行完這些動作後,數據就被傳送至計算機 B 中的應用程序,這些數據和計算機 A 的應用程序所發送的完全相同 。

  一個 OSI 層與另一層之間的通信是利用第二層提供的服務完成的。相鄰層提供的服務幫助一 OSI 層與另一計算機系統的對應層進行通信。一個 OSI 模型的特定層通常是與另外三個 OSI 層聯繫:與之直接相鄰的上一層和下一層,還有目標聯網計算機系統的對應層。例如,計算機 A 的數據鏈路層應與其網絡層,物理層以及計算機 B 的數據鏈路層進行通信。

四、 OSI分層的優點

1)人們可以很容易的討論和學習協議的規範細節。

  (2)層間的標準接口方便了工程模塊化。

  (3)創建了一個更好的互連環境。

  (4)降低了複雜度,使程序更容易修改,產品開發的速度更快。

  (5)每層利用緊鄰的下層服務,更容易記住個層的功能。

  OSI是一個定義良好的協議規範集,並有許多可選部分完成類似的任務。

  它定義了開放系統的層次結構、層次之間的相互關係以及各層所包括的可能的任務。是作爲一個框架來協調和組織各層所提供的服務。

  OSI參考模型並沒有提供一個可以實現的方法,而是描述了一些概念,用來協調進程間通信標準的制定。即OSI參考模型並不是一個標準,而是一個在制定標準時所使用的概念性框架。

五、 OSI模型與TCP/IP模型的比較
TCP/IP模型實際上是OSI模型的一個濃縮版本,它只有四個層次:

  1.應用層

  2.運輸層

  3.網際層

  4.網絡接口層

  與OSI功能相比:

  應用層對應着OSI的 應用層 表示層 會話層

  運輸層對應着OSI的傳輸層

  網際層對應着OSI的網絡層

網絡接口層對應着OSI的數據鏈路層和物理層

網絡編程中的幾個概念

  • 客戶端(client):移動應用(iOS,android等應用)
  • 服務器(server):爲客戶端提供服務,提供數據,提供資源的機器
  • 請求(request):客戶端向服務器索取數據的一種行爲
  • 響應(response):服務器對客戶端的請求做出的反應,一般指返回數據給客戶端

    在網絡開發中主要有如下幾種方式

  • GET請求:get是獲取數據的意思,數據以明文在URL中傳遞,受限於URL長度,多以傳輸的數據數據量比較小.

  • POST請求:post是向服務器提交數據的意思,提交的數據以實際內容形式存放到請求頭中進行傳遞,無法再瀏覽器URL中查看到,大小沒有限制.
  • HEAD請求:請求頭信息,並不返回請求數據,而只返回請求頭信息,常用於在文件下載中去的文件大小,類型等信息.

GET請求和POST請求的區別

  1. GET請求的接口會包含參數部分,參數會作爲網址的一部分,服務器地址與參數之間通過?間隔.POST請求會將服務器地址與參數分開,請求接口中只有服務器地址,而地址會作爲請求的一部分,提交後臺服務器.

  2. GET請求參數會出現在接口中,不安全,而POST請求相對安全.

    1. 雖然GET請求和POST請求都可以用來請求和提交數據,但是一般的GET多用於從後臺請求數據,POST多用於向後臺提交數據.

使用NSURLSession發送請求

發送GET請求

  1. 確定請求路徑(一般有公司的後臺開發人員以接口文檔的方式提供),GET請求參數直接跟在URL後面
  2. 創建請求對象(默認包含了請求頭和請求方法[GET]),這步可以省略
  3. 創建會話對象(NSURLSession)
  4. 根據繪畫對象創建請求任務(NSURLSessionDataTask)
  5. 執行Task
  6. 當得到服務器返回的響應後,解析數據
-(void)get1
{
    //對請求路徑的說明
    //http://120.25.226.186:32812/login?username=520it&pwd=520&type=JSON
    //協議頭+主機地址+接口名稱+?+參數1&參數2&參數3
    //協議頭(http://)+主機地址(120.25.226.186:32812)+接口名稱(login)+?+參數1(username=520it)&參數2(pwd=520)&參數3(type=JSON)
    //GET請求,直接把請求參數跟在URL的後面以?隔開,多個參數之間以&符號拼接

    //1.確定請求路徑
    NSURL *url = [NSURL URLWithString:@"http://120.25.226.186:32812/login?username=520it&pwd=520it&type=JSON"];

    //2.創建請求對象
    //請求對象內部默認已經包含了請求頭和請求方法(GET)
    NSURLRequest *request = [NSURLRequest requestWithURL:url];

    //3.獲得會話對象
    NSURLSession *session = [NSURLSession sharedSession];

    //4.根據會話對象創建一個Task(發送請求)
    /*
     第一個參數:請求對象
     第二個參數:completionHandler回調(請求完成【成功|失敗】的回調)
               data:響應體信息(期望的數據)
               response:響應頭信息,主要是對服務器端的描述
               error:錯誤信息,如果請求失敗,則error有值
     */
    NSURLSessionDataTask *dataTask = [session dataTaskWithRequest:request completionHandler:^(NSData * _Nullable data, NSURLResponse * _Nullable response, NSError * _Nullable error) {

        if (error == nil) {
            //6.解析服務器返回的數據
            //說明:(此處返回的數據是JSON格式的,因此使用NSJSONSerialization進行反序列化處理)
            NSDictionary *dict = [NSJSONSerialization JSONObjectWithData:data options:kNilOptions error:nil];

            NSLog(@"%@",dict);
        }
    }];

    //5.執行任務
    [dataTask resume];
}

發送GET請求的第一種方法
-(void)get2
{
    //1.確定請求路徑
    NSURL *url = [NSURL URLWithString:@"http://120.25.226.186:32812/login?username=520it&pwd=520it&type=JSON"];

    //2.獲得會話對象
    NSURLSession *session = [NSURLSession sharedSession];

    //3.根據會話對象創建一個Task(發送請求)
    /*
     第一個參數:請求路徑
     第二個參數:completionHandler回調(請求完成【成功|失敗】的回調)
               data:響應體信息(期望的數據)
               response:響應頭信息,主要是對服務器端的描述
               error:錯誤信息,如果請求失敗,則error有值
     注意:
        1)該方法內部會自動將請求路徑包裝成一個請求對象,該請求對象默認包含了請求頭信息和請求方法(GET)
        2)如果要發送的是POST請求,則不能使用該方法
     */
    NSURLSessionDataTask *dataTask = [session dataTaskWithURL:url completionHandler:^(NSData * _Nullable data, NSURLResponse * _Nullable response, NSError * _Nullable error) {

        //5.解析數據
        NSDictionary *dict = [NSJSONSerialization JSONObjectWithData:data options:kNilOptions error:nil];
        NSLog(@"%@",dict);

    }];

    //4.執行任務
    [dataTask resume];
}

發送GET請求的第二種方法

發送POST請求

  1. 確定請求路徑(一般有公司的後臺開發人員以接口文檔的方式提供)
  2. 創建可變的請求對象(設置請求對象屬性)
  3. 修改請求方法爲POST
  4. 設置請求體,把參數轉換爲二進制數據並設置請求提
  5. 創建會話對象(NSURLSession)
  6. 根據會話對象創建請求任務(NSRULSessionDataTask)
  7. 執行Task
  8. 當得到服務器返回的響應後,解析數據
-(void)post
{
    //對請求路徑的說明
    //http://120.25.226.186:32812/login
    //協議頭+主機地址+接口名稱
    //協議頭(http://)+主機地址(120.25.226.186:32812)+接口名稱(login)
    //POST請求需要修改請求方法爲POST,並把參數轉換爲二進制數據設置爲請求體

    //1.創建會話對象
    NSURLSession *session = [NSURLSession sharedSession];

    //2.根據會話對象創建task
    NSURL *url = [NSURL URLWithString:@"http://120.25.226.186:32812/login"];

    //3.創建可變的請求對象
    NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];

    //4.修改請求方法爲POST
    request.HTTPMethod = @"POST";

    //5.設置請求體
    request.HTTPBody = [@"username=520it&pwd=520it&type=JSON" dataUsingEncoding:NSUTF8StringEncoding];

    //6.根據會話對象創建一個Task(發送請求)
    /*
     第一個參數:請求對象
     第二個參數:completionHandler回調(請求完成【成功|失敗】的回調)
                data:響應體信息(期望的數據)
                response:響應頭信息,主要是對服務器端的描述
                error:錯誤信息,如果請求失敗,則error有值
     */
    NSURLSessionDataTask *dataTask = [session dataTaskWithRequest:request completionHandler:^(NSData * _Nullable data, NSURLResponse * _Nullable response, NSError * _Nullable error) {

        //8.解析數據
        NSDictionary *dict = [NSJSONSerialization JSONObjectWithData:data options:kNilOptions error:nil];
        NSLog(@"%@",dict);

    }];

    //7.執行任務
    [dataTask resume];
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章