iOS開發之網絡編程篇二:Get,Post請求差異及用法 -开发者知识库

iOS開發之網絡編程篇二:Get,Post請求差異及用法 -开发者知识库,第1张

客戶端向服務器發送請求,請求方式有兩種:一種get請求,一種post請求。get請求是將信息直接拼接在URL后面,在真正開發中用到比較多;post請求是將一些比較重要的信息轉化為二進制流。

一、get請求

在iOS下進行網絡編程主要分為以下三步

  •      客戶端向服務器發送請求,請求方式有兩種:一種get請求,一種post請求。 get請求是將信息直接拼接在URL后面,在真正開發中用到比較多。post請求是將一些比較重要的信息轉化為二進制流。在真正開發中post請求常見於驗證用戶名密碼是否正確,給服務器上傳數據等。 注意不管是get請求還是post請求都是由后台決定的,程序員可以通過接口文檔知道當前的請求方式是get還是post。請求方式不僅僅限於get和post,還有delete和put等,除了get請求可以使用NSUrlRequest之外,其他請求必須使用NSMutableURLRequset,明確的指定當前的HTTPMethod是什么請求。
  •      和服務器建立連接
  •      服務器做出響應
 
 
  1. #pragma mark - get請求
  2. // 1.URL
  3. NSURL *url = [NSURL URLWithString:@"http://ipad-bjwb.bjd.com.cn/DigitalPublication/publish/Handler/APINewsList.ashx?date=20131129&startRecord=1&len=5&udid=1234567890&terminalType=Iphone&cid=213"];
  4. // 2.封裝請求
  5. NSURLRequest *request = [NSURLRequest requestWithURL:url cachePolicy:NSURLRequestReturnCacheDataElseLoad timeoutInterval:10];
  6. // 3.發送請求
  7. NSURLResponse *response = nil;
  8. NSError *error = nil;
  9. // 該方法在iOS9.0之后被廢棄
  10. // 下面的方法有3個參數,參數分別為NSURLRequest,NSURLResponse**,NSError**,后面兩個參數之所以傳地址進來是為了在執行該方法的時候在方法的內部修改參數的值。這種方法相當於讓一個方法有了多個返回值
  11. NSData *data = [NSURLConnection sendSynchronousRequest:request returningResponse:&response error:&error];
  12. // 錯誤信息
  13. if(error)
  14. {
  15. NSLog(@"%@", [error localizedDescription]);
  16. // 此處需要解決iOS9.0之后,HTTP不能正常使用的問題,若不做任何處理,會打印“The resource could not be loaded because the App Transport Security policy requires the use of a secure connection” 錯誤信息。
  17. }
  18. NSError *newError = nil;
  19. NSDictionary *dictionary = [NSJSONSerialization JSONObjectWithData:data options:NSJSONReadingMutableContainers error:&newError];
  20. // 獲取對應的數據信息
  21. NSArray *array = dictionary[@"news"];
  22. NSDictionary *dic = array[0];
  23. NSLog(@"%@", dic[@"title"]);

iOS9之后http的適配方法(千萬記得,不然你會一直納悶鏈接是對的,為什么就是會崩或者沒有數據):

iOS開發之網絡編程篇二:Get,Post請求差異及用法 -开发者知识库,ios9,第2张

二、post請求

post請求和get請求的區別在於,post會將請求參數以請求體的形式存儲起來,在向服務器發送請求時,我們不會看到里面的具體參數,例如當我們填寫私密表單,或者登錄什么賬號的時候,自然是不希望別人能看到我們的賬號密碼,所以這時候采用post請求更為安全。

 
 
  1. #pragma mark - post請求
  2. // 1.獲取請求網址
  3. NSURL *url = [NSURL URLWithString:@"http://ipad-bjwb.bjd.com.cn/DigitalPublication/publish/Handler/APINewsList.ashx?"];
  4. // 2.封裝請求
  5. NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url cachePolicy:NSURLRequestUseProtocolCachePolicy timeoutInterval:10]; // post
  6. // 設置請求方式
  7. [request setHTTPMethod:@"POST"];
  8. // 設置請求體(會把請求的數據轉成data,達到用戶信息保密的目的)
  9. NSData *data = [@"date=20131129&startRecord=1&len=5&udid=1234567890&terminalType=Iphone&cid=213" dataUsingEncoding:NSUTF8StringEncoding];
  10. [request setHTTPBody:data];
  11.  
  12. // 3.發送請求
  13. NSURLResponse *response = nil;
  14. NSError *error = nil;
  15. NSData *content = [NSURLConnection sendSynchronousRequest:request returningResponse:&response error:&error];
  16. NSError *newError = nil;
  17. // 獲取數據
  18. NSDictionary *dict = [NSJSONSerialization JSONObjectWithData:content options:NSJSONReadingMutableContainers error:&newError];
  19.  
  20. NSArray *array = dict[@"news"];
  21. NSDictionary *dic = array[0];
  22. NSLog(@"%@", dic[@"title"]);

以上兩種請求所獲取的數據一致,只是采用了不同的方式而已。

三、總結

關於這節代碼里面的細節,比如JSon數據的解析,這一塊會在后面講解里介紹,現在只需要知道它是一種數據結構,可以獲取我們需要的數據。

文章轉自:宏創學院 » iOS開發之網絡編程篇二:Get,Post請求差異及用法

最佳答案:

DABAN RP主题是一个优秀的主题,极致后台体验,无插件,集成会员系统
U19学习网站 » iOS開發之網絡編程篇二:Get,Post請求差異及用法 -开发者知识库