網(wǎng)絡基礎和NSURLConnection的使用

網(wǎng)絡基礎

-客戶端(就是手機或者ipad等手持設備上面的APP)
-服務器(遠程服務器-本地服務器)
-請求(客戶端索要數(shù)據(jù)的方式)
-響應(需要客戶端解析數(shù)據(jù))
-數(shù)據(jù)庫(服務器的數(shù)據(jù)從哪里來)

URL

 稱為統(tǒng)一資源定位符 url格式(協(xié)議\主機地址\路徑)
協(xié)議:不同的協(xié)議烘苹,代表著不同的資源查找方式窄驹、資源傳輸方式
主機地址:存放資源的主機(服務器)的IP地址(域名)
路徑:資源在主機(服務器)中的具體位置

不同的協(xié)議

【file】訪問的是本地計算機上的資源汽纤,格式是file://(不用加主機地址)
【ftp】訪問的是共享主機的文件資源帝际,格式是ftp://
 [mailto】訪問的是電子郵件地址您单,格式是mailto:
【http】超文本傳輸協(xié)議广料,訪問的是遠程的網(wǎng)絡資源疼阔,格式是http://(網(wǎng)絡請求中最常用的協(xié)議)
[XMPP](及時處理協(xié)議)是基于可擴展標記語言(XML)的協(xié)議纫版,它用于即時消息(IM)以及在線現(xiàn)場探測。它在促進服務器之間的準即時操作机杜。

http協(xié)議

一次HTTP操作稱為一個事務帜讲,其工作過程可分為四步:
1)首先客戶機與服務器需要建立連接。只要單擊某個超級鏈接椒拗,HTTP的工作開始似将。
2)建立連接后,客戶機發(fā)送一個請求給服務器蚀苛,請求方式的格式為:統(tǒng)一資源標識符(URL)在验、協(xié)議版本號,后邊是MIME信息包括請求修飾符堵未、客戶機信息和可能的內容腋舌。
3)服務器接到請求后,給予相應的響應信息渗蟹,其格式為一個狀態(tài)行块饺,包括信息的協(xié)議版本號、一個成功或錯誤的代碼雌芽,后邊是MIME信息包括服務器信息授艰、實體信息和可能的內容。
4)客戶端接收服務器所返回的信息通過瀏覽器顯示在用戶的顯示屏上世落,然后客戶機與服務器斷開連接淮腾。

http協(xié)議優(yōu)缺點

a.簡單快速(協(xié)議簡單,服務器端程序規(guī)模小,通信速度快)
b.靈活(允許傳輸各種數(shù)據(jù))
c.非持續(xù)性連接(1.1之前版本是非持續(xù)的谷朝,即限制每次連接只處理一個請求篮灼,服務器對客戶端的請求做出響應后,馬上斷開連接徘禁,這種方式可以節(jié)省傳輸時間)

GET和POST請求

http里面發(fā)送請求的方法
GET(常用 查)诅诱、POST(常用 增)DELETE(刪除) PUT(提交 改) HEADER REACE OPTION
 狀態(tài)碼
 [200]:請求成功
 [400]:客戶端請求的語法錯誤,服務器無法解析
 [404]:無法找到資源
 [500]:服務器內部錯誤送朱,無法完成請求

NSURLConnection 03年推出的古老技術

        一位情懷妹子如是說,經(jīng)典
有的程序員老了,還沒聽過NSURLSession
有的程序員還嫩,沒用過NSURLConnection
有的程序員很單純,他只知道AFN.
  • NSURLConnection同步請求(GET)
    • 一般情況下不會使用 sendSynchronousRequest 阻塞式的方法娘荡,會卡住線程驶沼,應該和同步+主隊列會死鎖不同沒有嘗試過
  • ** NSURLConnection異步請求(GET-SendAsync)**
    • 發(fā)送異步請求 在block中傳入的隊列是指block的回調在當前隊列里回怜,如果有UI的操作要傳入主隊列翔试。

[NSURLConnection sendAsynchronousRequest:request queue: [[NSOperationQueue alloc]init] completionHandler:^(NSURLResponse * __nullable response, NSData * __nullable data, NSError * __nullable connectionError) { //4.解析服務器返回的數(shù)據(jù) NSString *str = [[NSString alloc]initWithData:data encoding:NSUTF8StringEncoding]; //轉換并打印響應頭信息 NSHTTPURLResponse *r = (NSHTTPURLResponse *)response; NSLog(@"--%zd---%@--",r.statusCode,r.allHeaderFields); }];

NSURLConnection異步請求(GET-代理)第二種方式

設置代理的第一種方式:自動發(fā)送網(wǎng)絡請求 connection不需要start

 [[NSURLConnection alloc]initWithRequest:request delegate:self];

設置代理的第二種方式: 第三個參數(shù):是否馬上發(fā)送網(wǎng)絡請求驹碍,如果該值為YES則立刻發(fā)送志秃,如果為NO則不會發(fā)送網(wǎng)路請求竟坛,可以對發(fā)送進行控制

NSURLConnection *conn = [[NSURLConnection alloc]initWithRequest:request delegate:self startImmediately:NO];

調用該方法控制網(wǎng)絡請求的發(fā)送 取消

 [conn start]; [conn cancel];

NSURLConnectionDataDelegate 的主要方法

1.當接收到服務器響應的時候調用
    第一個參數(shù)connection:監(jiān)聽的是哪個NSURLConnection對象
    第二個參數(shù)response:接收到的服務器返回的響應頭信息

- (void)connection:(nonnull NSURLConnection *)connection didReceiveResponse:(nonnull NSURLResponse *)response

 2.當接收到數(shù)據(jù)的時候調用,該方法會被調用多次 
    第一個參數(shù)connection:監(jiān)聽的是哪個NSURLConnection對象 
    第二個參數(shù)data:本次接收到的服務端返回的二進制數(shù)據(jù)(可能是片段)

-(void)connection:(nonnull NSURLConnection *)connection didReceiveData:(nonnull NSData *)data

 3.當服務端返回的數(shù)據(jù)接收完畢之后會調用 通常在該方法中解析服務器返回的數(shù)據(jù)

-(void)connectionDidFinishLoading:(nonnull NSURLConnection *)connection

4.當請求錯誤的時候調用(比如請求超時)
 第一個參數(shù)connection:NSURLConnection對象
 第二個參數(shù):網(wǎng)絡請求的錯誤信息六敬,如果請求失敗普泡,則error有值

(void)connection:(nonnull NSURLConnection *)connection didFailWithError:(nonnull NSError *)error

NSURLConnection發(fā)送POST請求

發(fā)送POST請求步驟

    a.確定URL路徑
    b.創(chuàng)建請求對象(可變對象)
    c.修改請求對象的方法為POST撼班,設置請求體(Data)
    d.發(fā)送一個異步請求
    e.補充:設置請求超時件炉,處理錯誤信息,設置請求頭(如獲取客戶端的版本等等,請求頭是可設置可不設置的)

代碼

NSURL *url = [NSURL URLWithString:@"http://120.25.226.186:32812/login"] 2.創(chuàng)建請求對象 NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url]; //2.1更改請求方法 request.HTTPMethod = @"POST"; //2.2設置請求體 request.HTTPBody = [@"username=520it&pwd=520it" dataUsingEncoding:NSUTF8StringEncoding]; //2.3請求超時 request.timeoutInterval = 5; //2.4設置請求頭 [request setValue:@"ios 9.0" forHTTPHeaderField:@"User-Agent"];

創(chuàng)建請求方式倆種,

第一種是使用類方法創(chuàng)建異步請求秀撇,使用Block進行回調,但是如果在block中涉及UI操作需要在主線程內部執(zhí)行
第二種方式是初始化的時候設置代理虏等,默認的代理方法在主線程內
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市敦跌,隨后出現(xiàn)的幾起案子柠傍,更是在濱河造成了極大的恐慌惧笛,老刑警劉巖拜效,帶你破解...
    沈念sama閱讀 218,122評論 6 505
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,070評論 3 395
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來已烤,“玉大人鸠窗,你說我怎么就攤上這事】杈浚” “怎么了稍计?”我有些...
    開封第一講書人閱讀 164,491評論 0 354
  • 文/不壞的土叔 我叫張陵,是天一觀的道長裕循。 經(jīng)常有香客問我臣嚣,道長,這世上最難降的妖魔是什么剥哑? 我笑而不...
    開封第一講書人閱讀 58,636評論 1 293
  • 正文 為了忘掉前任硅则,我火速辦了婚禮,結果婚禮上株婴,老公的妹妹穿的比我還像新娘怎虫。我一直安慰自己,他們只是感情好困介,可當我...
    茶點故事閱讀 67,676評論 6 392
  • 文/花漫 我一把揭開白布大审。 她就那樣靜靜地躺著,像睡著了一般座哩。 火紅的嫁衣襯著肌膚如雪徒扶。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,541評論 1 305
  • 那天八回,我揣著相機與錄音酷愧,去河邊找鬼驾诈。 笑死缠诅,一個胖子當著我的面吹牛溶浴,可吹牛的內容都是我干的。 我是一名探鬼主播管引,決...
    沈念sama閱讀 40,292評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼士败,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了褥伴?” 一聲冷哼從身側響起谅将,我...
    開封第一講書人閱讀 39,211評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎重慢,沒想到半個月后饥臂,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,655評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡似踱,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 37,846評論 3 336
  • 正文 我和宋清朗相戀三年隅熙,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片核芽。...
    茶點故事閱讀 39,965評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡囚戚,死狀恐怖,靈堂內的尸體忽然破棺而出轧简,到底是詐尸還是另有隱情驰坊,我是刑警寧澤,帶...
    沈念sama閱讀 35,684評論 5 347
  • 正文 年R本政府宣布哮独,位于F島的核電站拳芙,受9級特大地震影響,放射性物質發(fā)生泄漏皮璧。R本人自食惡果不足惜舟扎,卻給世界環(huán)境...
    茶點故事閱讀 41,295評論 3 329
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望恶导。 院中可真熱鬧浆竭,春花似錦、人聲如沸惨寿。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,894評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽裂垦。三九已至顺囊,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間蕉拢,已是汗流浹背特碳。 一陣腳步聲響...
    開封第一講書人閱讀 33,012評論 1 269
  • 我被黑心中介騙來泰國打工诚亚, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人午乓。 一個月前我還...
    沈念sama閱讀 48,126評論 3 370
  • 正文 我出身青樓站宗,卻偏偏與公主長得像,于是被迫代替她去往敵國和親益愈。 傳聞我的和親對象是個殘疾皇子梢灭,可洞房花燭夜當晚...
    茶點故事閱讀 44,914評論 2 355

推薦閱讀更多精彩內容