欧美一区二区三区老妇人-欧美做爰猛烈大尺度电-99久久夜色精品国产亚洲a-亚洲福利视频一区二区

ios開發(fā)網(wǎng)絡(luò)請(qǐng)求,ios網(wǎng)絡(luò)請(qǐng)求加密

iOS開發(fā) GET、POST請(qǐng)求方法(NSURLConnection篇)

Web Service使用的主要協(xié)議是HTTP協(xié)議,即 超文本傳輸協(xié)議 。

創(chuàng)新互聯(lián)建站專業(yè)為企業(yè)提供新邱網(wǎng)站建設(shè)、新邱做網(wǎng)站、新邱網(wǎng)站設(shè)計(jì)、新邱網(wǎng)站制作等企業(yè)網(wǎng)站建設(shè)、網(wǎng)頁設(shè)計(jì)與制作、新邱企業(yè)網(wǎng)站模板建站服務(wù),10多年新邱做網(wǎng)站經(jīng)驗(yàn),不只是建網(wǎng)站,更提供有價(jià)值的思路和整體網(wǎng)絡(luò)服務(wù)。

HTTP/1.1協(xié)議共定義了8種請(qǐng)求方法(OPTIONS、HEAD、GET、POST、PUT、DELETE、TRACE、CONNECT)作為Web服務(wù)器。

GET方法 ,是向指定的資源發(fā)送請(qǐng)求,請(qǐng)求的參數(shù)“顯式”地在URL的后面。有點(diǎn)像明信片,把內(nèi)容“顯式”寫在外面,因此安全性比較差。一般使用于讀取數(shù)據(jù)、例如從服務(wù)器讀取靜態(tài)圖片、或查詢數(shù)據(jù)等。

POST方法 ,是向指定資源提交數(shù)據(jù),請(qǐng)求服務(wù)器進(jìn)行處理,數(shù)據(jù)包含在 請(qǐng)求體 中。參數(shù)和地址分開,放在body里面。有點(diǎn)像把信內(nèi)容放在信封中,接觸的人看不到,安全性比較高。一般用于例如提交表單、上傳文件等(請(qǐng)求的的動(dòng)態(tài)資源,與查詢類似,每個(gè)方法調(diào)用都要傳遞很多參數(shù),因此需要使用NSMutableURLRequest創(chuàng)建請(qǐng)求。 )

iOS SDK中為HTTP請(qǐng)求提供了同步和異步請(qǐng)求這兩種不同的API,

同步請(qǐng)求,可以從因特網(wǎng)請(qǐng)求數(shù)據(jù),一旦發(fā)送同步請(qǐng)求,程序?qū)⑼V褂脩艚换ィ敝练?wù)器返回?cái)?shù)據(jù)完成,才可以進(jìn)行下一步操作,意味著線程阻塞;

異步請(qǐng)求,不會(huì)阻塞主線程,而會(huì)建立一個(gè)新的線程來操作,用戶發(fā)出異步請(qǐng)求后,依然可以對(duì)UI進(jìn)行操作,程序可以繼續(xù)運(yùn)行;

它們的主要區(qū)別在于連接方式的不同。

下面通過請(qǐng)求一個(gè)登陸接口介紹有關(guān)于網(wǎng)絡(luò)請(qǐng)求中的不同情況。

【本次開發(fā)環(huán)境: Xcode:7.2 ? ??iOS Simulator:iphone6 ? By:啊左】

一、GET方法

1.同步get方法:

//1.創(chuàng)建一個(gè)web路徑?

NSString*webPath=[NSString?stringWithFormat:@";pass=%@btn=login",yourname,yourpass]; ? ? ?

webPath=[webPath stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding];?//url不允許為中文等特殊字符,需要進(jìn)行字符串的轉(zhuǎn)碼為URL字符串,例如空格轉(zhuǎn)換后為“%20”;? ? ?

NSURL *url=[NSURL URLWithString:webPath];? ? ??

//2.根據(jù)WEB路徑創(chuàng)建一個(gè)請(qǐng)求? ? ?

NSURLRequest? *request=[NSURLRequest requestWithURL:url];? ? ? ? ?

NSURLResponse *respone;//獲取連接的響應(yīng)信息,可以為nil? ? ?

NSError *error;? ? ? ? //獲取連接的錯(cuò)誤時(shí)的信息,可以為nil? ??

//3.得到服務(wù)器數(shù)據(jù)? ??

NSData*data=[NSURLConnection sendSynchronousRequest: request returningResponse: respone error: error];? ??

if(data==nil)? ? {? ? ? ? NSLog(@"登陸失敗:%@,請(qǐng)重試",error);? ? ? ? return;? ? }?

/*? ? ? ? 4.對(duì)服務(wù)器獲取的數(shù)據(jù)data進(jìn)行相應(yīng)的處理;? */

2.異步get方法:

異步請(qǐng)求與同步請(qǐng)求的不同在于使用NSURLConnectionDataDelegate委托協(xié)議,指定代理.

@interface ViewController : UIViewController // 遵循協(xié)議

@property (weak,nonatomic) NSMutableData *receiveData;? //創(chuàng)建一個(gè)可變data,用于異步接收服務(wù)器的數(shù)據(jù)

@end

創(chuàng)建網(wǎng)絡(luò)請(qǐng)求:

//1.創(chuàng)建一個(gè)web路徑

NSString*webPath=[NSString stringWithFormat: @";pass=%@btn=login",yourname,yourpass];

webPath=[webPath stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding];

NSURL? *url=[NSURL URLWithString:webPath];

//2.根據(jù)WEB路徑創(chuàng)建一個(gè)請(qǐng)求

NSURLRequest *request=[NSURLRequest requestWithURL:url];

//3.指定代理 以異步的方式接收數(shù)據(jù)NSURLConnectionDataDelegate

NSURLConnection? *con=[NSURLConnection connectionWithRequest:request delegate:self];

if(con==nil)

{

NSLog(@"創(chuàng)建連接失敗.");

return;

}

else//成功 準(zhǔn)備接數(shù)據(jù)

{

if(self.receiveData==nil)

{

self.receiveData=[[NSMutableData alloc] init];

}

}

異步的代理行為:

-(void)connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response{? ??

NSLog(@"已經(jīng)響應(yīng)成功.");

//清空 為當(dāng)前連接做準(zhǔn)備? ??

self.receiveData.length=0;

}

-(void) connection:(NSURLConnection *)connection didReceiveData:(NSData *)data{? ? NSLog(@"已經(jīng)接收到了數(shù)據(jù).");? ??

//追加接收到的數(shù)據(jù)? ??

[self.receiveData appendData:data];

}

-(void)connectionDidFinishLoading:(NSURLConnection *)connection{? ??

NSLog(@"接收數(shù)據(jù)已經(jīng)完成.");?

/*? ? ? 對(duì)服務(wù)器獲取的數(shù)據(jù)receiveData進(jìn)行相應(yīng)的處理;? */

}

-(void) connection:(NSURLConnection *)connection didFailWithError:(NSError *)error{? ? NSLog(@"連接失敗.");

}

二、POST方法

1.同步post方法:

//1.創(chuàng)建一個(gè)web路徑? ??

NSString? *webPath=@""; ??

webPath = [webPath stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding];? ? NSURL *url=[NSURL URLWithString:webPath];

//2.建立一個(gè)帶協(xié)議緩存類型的請(qǐng)求 (使用NSMutableURLRequest,是post方法的關(guān)鍵)? ? NSMutableURLRequest? *request=[NSMutableURLRequest requestWithURL:url cachePolicy:(NSURLRequestUseProtocolCachePolicy) timeoutInterval:10];? ? ? ? //3.設(shè)置表單提交的方法(默認(rèn)為get)? ? [request setHTTPMethod: @"post"];

//4.設(shè)置要提交的參數(shù)? ? NSString? *args=[NSString stringWithFormat:@"uname=%@upas=%@btn=login",uname,upas];? ? [request setHTTPBody: [args dataUsingEncoding:NSUTF8StringEncoding]];

NSData *recvData=[NSURLConnection sendSynchronousRequest:request returningResponse:nil error:nil];? ? if(recvData!=nil)? ? {

/*

對(duì)服務(wù)器獲取的數(shù)據(jù)recvData進(jìn)行相應(yīng)的處理

*/

}

else

{

NSLog(@"連接失敗,請(qǐng)重試!");

}

2.post方法的異步與同步的區(qū)別在于使用NSURLConnectionDataDelegate委托協(xié)議,指定代理.

這一點(diǎn)與get方法一致,所以就不進(jìn)行長(zhǎng)篇幅的演示了。

以上就是關(guān)于部分網(wǎng)絡(luò)同步異步請(qǐng)求,get、post請(qǐng)求方法的演示,由于UI控件還有其他的處理沒有附上,具體的讀者可以進(jìn)行相應(yīng)細(xì)節(jié)的調(diào)整,進(jìn)行完整的網(wǎng)絡(luò)請(qǐng)求項(xiàng)目開發(fā)。

由于iOS開始,引入了新的網(wǎng)絡(luò)接口NSURLSession,而在iOS9中NSURLConnection被宣布棄用,因此關(guān)于NSURLSession發(fā)送GET和POST請(qǐng)求的資料部分,有興趣的可以參考:

iOS開發(fā) GET、POST請(qǐng)求方法(NSURLSession篇)

? by:啊左~

[iOS 開發(fā)]如何處理 iOS 原生網(wǎng)絡(luò)請(qǐng)求中的 cookie ?

1.什么是 cookie?cookie 和 token 有何區(qū)別?

cookie 是什么呢?cookie 在英語中通常是指餅干,當(dāng)然,我這里指的不是,而是 HTTP 網(wǎng)絡(luò)請(qǐng)求中用來記錄用戶信息的一種數(shù)據(jù)形式或者說一種機(jī)制。

cookie :在客戶端發(fā)送登錄操作的網(wǎng)絡(luò)請(qǐng)求時(shí),服務(wù)器在登陸成功返回的 response header 中會(huì)添加一個(gè) set-cookie 的值,作為用戶的身份認(rèn)證,如果是瀏覽器的話,后面每一次發(fā)請(qǐng)求時(shí),瀏覽器都會(huì)自動(dòng)將之前獲取到的 cookie 值插入到 request header 的 cookie 字段中,而且 cookie 本身包括多個(gè)屬性,比如有效期 expires、域 domain等,因此采用 cookie 的登錄機(jī)制需要考慮到對(duì) cookie 本身的管理。cookie 主要是在 web 領(lǐng)域使用。

token :相比 cookie,token 令牌的登錄機(jī)制要更輕,直觀的感受是,登錄認(rèn)證成功后,服務(wù)器返回 token 值,然后在請(qǐng)求的 url 中拼接一段 “token=%^%#%#” 就完事了,至于什么跨域、安全策略什么的,根本沒他什么事,客戶端管理 token 也非常簡(jiǎn)單,只要看好這個(gè)字符串就行了,所以 token 一般在移動(dòng)端用的比較多。當(dāng)然,移動(dòng)應(yīng)用中的 web view 還是要處理 cookie 的。

2.iOS 中的網(wǎng)絡(luò)請(qǐng)求中如何處理 cookie?

在開始處理 cookie 時(shí),需要了解兩個(gè)類,NSHTTPCookie 和 NSHTTPCookieStorage,在用的時(shí)候要注意幾點(diǎn):

下面切入正題吧,我是如何做的呢?

首先是登錄。登錄成功后,服務(wù)器在 HTTP response header 中的 set-cookie 字段中返回了 cookie 的值,我們可已通過多種方式獲取到我們想要的 cookie 值,我是采用了下面這種方式來讀取的,因?yàn)槲覀兊姆?wù)器沒有設(shè)置 expireDate,所以我就自己做持久化存儲(chǔ)了。

然后是請(qǐng)求時(shí)添加 cookie 到 request header。實(shí)際上這一步系統(tǒng)(NSURLSession / NSURLConnection)已經(jīng)自動(dòng)幫我們處理了,具體細(xì)節(jié)我也不太清楚。

還要考慮重啟應(yīng)用后的操作,由于我們的服務(wù)器沒有設(shè)置 expireDate 以及上面提到的其他原因,在程序重啟時(shí),NSHTTPCookieStorage 并不會(huì)保存上一次使用應(yīng)用時(shí)的 cookie,所以我們需要在程序啟動(dòng)時(shí)讀取自己保存的 cookie,同時(shí)更新 NSHTTPCookieStorage 的 cookie。

關(guān)于 cookie 的有效期處理,在使用 cookie 時(shí)需要自己判斷 cookie 是否過期,NSHTTPCookieStorage 是不會(huì)自動(dòng)幫我們處理的,更何況我們自己還做了本地存儲(chǔ),所以我們?cè)谟玫?cookie 時(shí)還需要檢查 cookie 是否過期,如果過期了,就要廢棄掉失效的 cookie。我是在用戶的登錄狀態(tài)方法中做的處理:

最后還要記得在退出登錄時(shí)也要?jiǎng)h除 cookie:

3.iOS 中的原生網(wǎng)絡(luò)請(qǐng)求如何與 webView 實(shí)現(xiàn) cookie 共享?

遺留問題:

1.服務(wù)器是在什么時(shí)候更新/生成cookie ?

2.登陸成功后,系統(tǒng)是如何自動(dòng)添加 cookie 到 request header 中去的?

3.服務(wù)器是怎么識(shí)別客戶端的 cookie 的?

iOS網(wǎng)絡(luò)請(qǐng)求隊(duì)列簡(jiǎn)單實(shí)現(xiàn)

翻遍百度沒事找到合適的參考文章,最終找到了這篇以圖片加載講解隊(duì)列的文章

1、保存請(qǐng)求的類

2、隊(duì)列,及隊(duì)列中Operation實(shí)現(xiàn)

3、網(wǎng)絡(luò)請(qǐng)求

4、viewController里發(fā)起網(wǎng)絡(luò)請(qǐng)求

5、請(qǐng)求結(jié)果

失敗時(shí)

成功時(shí)

基本解決了文章開頭提出的問題。

有什么改進(jìn)意見或者好的想法,歡迎大家提出。

網(wǎng)站標(biāo)題:ios開發(fā)網(wǎng)絡(luò)請(qǐng)求,ios網(wǎng)絡(luò)請(qǐng)求加密
文章位置:http://chinadenli.net/article35/dsejspi.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供做網(wǎng)站網(wǎng)站設(shè)計(jì)網(wǎng)站內(nèi)鏈網(wǎng)站改版品牌網(wǎng)站制作網(wǎng)站導(dǎo)航

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)

網(wǎng)站建設(shè)網(wǎng)站維護(hù)公司