日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

OC语言知识6

發布時間:2024/7/19 编程问答 26 豆豆
生活随笔 收集整理的這篇文章主要介紹了 OC语言知识6 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

本文目錄

  • 一、異步POST請求
  • 二、NSURLConnection的其他請求方法

上一講介紹了iOS中的異步GET請求,這講來看看異步POST請求。

回到頂部

一、異步POST請求

假如請求路徑是http://192.168.1.102:8080/MJServer/login,請求參數有2個:

  • username :母雞
  • pwd :123

1.POST請求細節分析

要想在iOS中發送一個POST請求,首先要了解POST請求的一些細節:

1> 跟GET請求不一樣的是,POST請求的請求參數不是拼接在請求路徑后面,而是以請求體的形式發送到服務器端。

2> POST請求需要發送兩部分的數據到服務器端:

*?請求體內容:所有的請求參數

username=%E6%AF%8D%E9%B8%A1&pwd=123

中文參數需要進行編碼,參數"母雞"被編碼成"%E6%AF%8D%E9%B8%A1"

?

*?請求頭信息:請求體長度、請求數據的類型

(這是我在FireBug中模擬POST請求的截圖)

Content-Length是指請求體長度,Content-Type是指請求數據類型

?

2.POST請求代碼實現

1 // 請求地址2 NSString *urlString = @"http://192.168.1.102:8080/MJServer/login";3 // 初始化一個NSURL對象4 NSURL *url = [NSURL URLWithString:urlString];5 6 // 初始化一個請求7 NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];8 // 設置請求方法9 request.HTTPMethod = @"POST"; 10 // 60秒請求超時 11 request.timeoutInterval = 60; 12 13 // 拼接請求參數 14 NSString *params = @"username=母雞&pwd=123"; 15 // 對字符串進行編碼后轉成NSData對象 16 NSData *data = [params dataUsingEncoding:NSUTF8StringEncoding]; 17 // 設置請求體 18 request.HTTPBody = data; 19 20 // 設置請求頭信息-請求體長度 21 NSString *contentLength = [NSString stringWithFormat:@"%i", data.length]; 22 [request setValue:contentLength forHTTPHeaderField:@"Content-Length"]; 23 // 設置請求頭信息-請求數據類型 24 [request setValue:@"application/x-www-form-urlencoded" forHTTPHeaderField:@"Content-Type"]; 25 26 // 初始化一個連接 27 NSURLConnection *conn = [NSURLConnection connectionWithRequest:request delegate:self]; 28 // 開始一個異步請求 29 [conn start];

1> 在18行設置了請求體內容

2> 從第21~24行設置了請求頭信息

3> 其實,第21~24行代碼可以省略。只要我們在第18行設置了請求體,系統在發送POST請求時,會自動根據請求體內容加上相應的請求頭信息

?

回到頂部

二、NSURLConnection的其他請求方法

除了start方法,NSURLConnection還提供了2個靜態方法幫助我們發送HTTP請求

1.異步請求

1 // 請求地址2 NSString *urlString = @"http://192.168.1.102:8080/MJServer/login?username=123&pwd=123";3 // 初始化一個NSURL對象4 NSURL *url = [NSURL URLWithString:urlString];5 6 // 初始化一個請求7 NSURLRequest *request = [NSURLRequest requestWithURL:url];8 9 // 初始化一個操作隊列 10 NSOperationQueue *queue = [[[NSOperationQueue alloc] init] autorelease]; 11 // 發送一個異步請求 12 [NSURLConnection sendAsynchronousRequest:request queue:queue completionHandler: 13 ^(NSURLResponse *response, NSData *data, NSError *error) { 14 // 解析成字符串數據 15 NSString *str = [[[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding] autorelease]; 16 NSLog(@"%@", str); 17 }];

在12行調用sendAsynchronousRequest:queue:completionHandler:方法發送一個異步HTTP請求,這個方法接收3個參數

* 第1個參數是一個NSURLRequest對象,封裝的是一個GET請求

* 第3個參數是一個Block,當服務器成功返回數據時會回調這個Block,Block中的NSData *data參數就是服務器返回的數據

* 第2個參數是一個操作隊列NSOperationQueue,當服務器成功返回數據時,系統會將第3個參數中傳入的Block放到這個操作隊列中執行

?

2.同步請求

前面說的都是異步請求,也是比較推薦的請求方式。NSURLConnection也提供了一個靜態方法可以發送一個同步請求。

1 // 請求地址2 NSString *urlString = @"http://192.168.1.102:8080/MJServer/login?username=123&pwd=123";3 // 初始化一個NSURL對象4 NSURL *url = [NSURL URLWithString:urlString];5 6 // 初始化一個請求7 NSURLRequest *request = [NSURLRequest requestWithURL:url];8 9 // 發送一個同步請求 10 NSData *data = [NSURLConnection sendSynchronousRequest:request returningResponse:nil error:nil]; 11 12 // 解析成字符串數據 13 NSString *str = [[[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding] autorelease]; 14 NSLog(@"%@", str);

在第10行調用了sendSynchronousRequest:returningResponse:error:方法發送了一個同步請求,這是一個阻塞式的方法,也就是等服務器返回所有數據后,這個方法才會返回,返回值是一個NSData對象,存放著服務器返回的所有數據

轉載于:https://www.cnblogs.com/jameslbj/p/4290482.html

總結

以上是生活随笔為你收集整理的OC语言知识6的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。