網(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í)行
第二種方式是初始化的時候設置代理虏等,默認的代理方法在主線程內