AFNetwork

http://www.cnblogs.com/YouXianMing/p/4291959.html


#import "ViewController.h"

#import?"AFNetworking.h"

@interface?MJViewController?()

@end

@implementation ViewController

/**

要使用常規(guī)的AFN網(wǎng)絡(luò)訪問

1.?AFHTTPRequestOperationManager?*manager?=?[AFHTTPRequestOperationManager?manager];

所有的網(wǎng)絡(luò)請求,均有manager發(fā)起

2.需要注意的是,默認(rèn)提交請求的數(shù)據(jù)是二進(jìn)制的,返回格式是JSON

1>如果提交數(shù)據(jù)是JSON的,需要將請求格式設(shè)置為AFJSONRequestSerializer

2>如果返回格式不是JSON的,

3.請求格式

AFHTTPRequestSerializer ?二進(jìn)制格式

AFJSONRequestSerializer????????????JSON

AFPropertyListRequestSerializer????PList(是一種特殊的XML,解析起來相對容易)

4.返回格式

AFHTTPResponseSerializer二進(jìn)制格式

AFJSONResponseSerializer???????????JSON

AFXMLParserResponseSerializer??????XML,只能返回XMLParser,還需要自己通過代理方法解析

AFXMLDocumentResponseSerializer?(Mac?OS?X)

AFPropertyListResponseSerializer???PList

AFImageResponseSerializer??????????Image

AFCompoundResponseSerializer組合

*/

-?(void)viewDidLoad

{

[super?viewDidLoad];

[self?reach];

}

#pragma?mark?-演練

#pragma?mark?-檢測網(wǎng)絡(luò)連接

-?(void)reach

{

/**

AFNetworkReachabilityStatusUnknown??????????=?-1,??//未知

AFNetworkReachabilityStatusNotReachable?????=?0,???//無連接

AFNetworkReachabilityStatusReachableViaWWAN?=?1,???//?3G花錢

AFNetworkReachabilityStatusReachableViaWiFi?=?2,???//局域網(wǎng)絡(luò),不花錢

*/

//如果要檢測網(wǎng)絡(luò)狀態(tài)的變化,必須用檢測管理器的單例的startMonitoring

[[AFNetworkReachabilityManager?sharedManager]?startMonitoring];

//檢測網(wǎng)絡(luò)連接的單例,網(wǎng)絡(luò)變化時(shí)的回調(diào)方法

[[AFNetworkReachabilityManager?sharedManager]?setReachabilityStatusChangeBlock:^(AFNetworkReachabilityStatus?status)?{

NSLog(@"%d",?status);

}];

}

#pragma?mark?-?Session下載

-?(void)sessionDownload

{

NSURLSessionConfiguration?*config?=?[NSURLSessionConfiguration?defaultSessionConfiguration];

AFURLSessionManager?*manager?=?[[AFURLSessionManager?alloc]?initWithSessionConfiguration:config];

NSString?*urlString?=?@"http://localhost/itcast/videos/01.C語言-語法預(yù)覽.mp4";

urlString?=?[urlString?stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding];

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

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

NSURLSessionDownloadTask?*task?=?[manager?downloadTaskWithRequest:request?progress:nil?destination:^NSURL?*(NSURL?*targetPath,?NSURLResponse?*response)?{

//指定下載文件保存的路徑

//????????NSLog(@"%@?%@",?targetPath,?response.suggestedFilename);

//將下載文件保存在緩存路徑中

NSString?*cacheDir?=?NSSearchPathForDirectoriesInDomains(NSCachesDirectory,?NSUserDomainMask,?YES)[0];

NSString?*path?=?[cacheDir?stringByAppendingPathComponent:response.suggestedFilename];

//?URLWithString返回的是網(wǎng)絡(luò)的URL,如果使用本地URL,需要注意

NSURL?*fileURL1?=?[NSURL?URLWithString:path];

NSURL?*fileURL?=?[NSURL?fileURLWithPath:path];

NSLog(@"==?%@?||||?%@",?fileURL1,?fileURL);

return?fileURL;

}?completionHandler:^(NSURLResponse?*response,?NSURL?*filePath,?NSError?*error)?{

NSLog(@"%@?%@",?filePath,?error);

}];

[task?resume];

}

#pragma?mark?-?POST?JSON

-?(void)postJSON

{

AFHTTPRequestOperationManager?*manager?=?[AFHTTPRequestOperationManager?manager];

NSDictionary?*dict?=?@{@"name":?@"zhangsan"};

NSDictionary?*dict1?=?@{@"name":?@"wangwu"};

NSArray?*array?=?@[dict,?dict1];

//設(shè)置請求格式

manager.requestSerializer?=?[AFJSONRequestSerializer?serializer];

//設(shè)置返回格式

manager.responseSerializer?=?[AFHTTPResponseSerializer?serializer];

[manager?POST:@"http://localhost/postjson.php"?parameters:array?success:^(AFHTTPRequestOperation?*operation,?id?responseObject)?{

NSString?*result?=?[[NSString?alloc]?initWithData:responseObject?encoding:NSUTF8StringEncoding];

NSLog(@"%@",?result);

}?failure:^(AFHTTPRequestOperation?*operation,?NSError?*error)?{

}];

}

#pragma?mark?-隨機(jī)文件名上傳

-?(void)postUpload1

{

//本地上傳給服務(wù)器時(shí),沒有確定的URL,不好用MD5的方式處理

AFHTTPRequestOperationManager?*manager?=?[AFHTTPRequestOperationManager?manager];

manager.responseSerializer?=?[AFHTTPResponseSerializer?serializer];

[manager?POST:@"http://localhost/demo/upload.php"?parameters:nil?constructingBodyWithBlock:^(id?formData)?{

NSURL?*fileURL?=?[[NSBundle?mainBundle]?URLForResource:@"頭像1.png"?withExtension:nil];

//要上傳保存在服務(wù)器中的名稱

//使用時(shí)間來作為文件名2014-04-30?14:20:57.png

//讓不同的用戶信息,保存在不同目錄中

NSDateFormatter?*formatter?=?[[NSDateFormatter?alloc]?init];

//設(shè)置日期格式

formatter.dateFormat?=?@"yyyy-MM-dd?HH:mm:ss";

NSString?*fileName?=?[formatter?stringFromDate:[NSDate?date]];

[formData?appendPartWithFileURL:fileURL?name:@"uploadFile"?fileName:fileName?mimeType:@"image/png"?error:NULL];

}?success:^(AFHTTPRequestOperation?*operation,?id?responseObject)?{

NSLog(@"OK");

}?failure:^(AFHTTPRequestOperation?*operation,?NSError?*error)?{

NSLog(@"error");

}];

}

#pragma?mark?-?POST上傳

-?(void)postUpload

{

AFHTTPRequestOperationManager?*manager?=?[AFHTTPRequestOperationManager?manager];

//?AFHTTPResponseSerializer就是正常的HTTP請求響應(yīng)結(jié)果:NSData

//當(dāng)請求的返回?cái)?shù)據(jù)不是JSON,XML,PList,UIImage之外,使用AFHTTPResponseSerializer

//例如返回一個(gè)html,text...

//

//實(shí)際上就是AFN沒有對響應(yīng)數(shù)據(jù)做任何處理的情況

manager.responseSerializer?=?[AFHTTPResponseSerializer?serializer];

//?formData是遵守了AFMultipartFormData的對象

[manager?POST:@"http://localhost/demo/upload.php"?parameters:nil?constructingBodyWithBlock:^(id?formData)?{

//將本地的文件上傳至服務(wù)器

NSURL?*fileURL?=?[[NSBundle?mainBundle]?URLForResource:@"頭像1.png"?withExtension:nil];

[formData?appendPartWithFileURL:fileURL?name:@"uploadFile"?error:NULL];

}?success:^(AFHTTPRequestOperation?*operation,?id?responseObject)?{

NSString?*result?=?[[NSString?alloc]?initWithData:responseObject?encoding:NSUTF8StringEncoding];

NSLog(@"完成%@",?result);

}?failure:^(AFHTTPRequestOperation?*operation,?NSError?*error)?{

NSLog(@"錯(cuò)誤%@",?error.localizedDescription);

}];

}

#pragma?mark?-?POST登錄

-?(void)postLogin

{

AFHTTPRequestOperationManager?*manager?=?[AFHTTPRequestOperationManager?manager];

//原本需要拼接get訪問URL???&?=

NSDictionary?*dict?=?@{@"username":?@"wangwu",?@"password"?:?@"wang"};

//網(wǎng)絡(luò)訪問是異步的,回調(diào)是主線程的,因此程序員不用管在主線程更新UI的事情

[manager?POST:@"http://localhost/login.php"?parameters:dict?success:^(AFHTTPRequestOperation?*operation,?id?responseObject)?{

NSLog(@"%@",?responseObject);

//提問:NSURLConnection異步方法回調(diào),是在子線程

//得到回調(diào)之后,通常更新UI,是在主線程

NSLog(@"%@",?[NSThread?currentThread]);

}?failure:^(AFHTTPRequestOperation?*operation,?NSError?*error)?{

NSLog(@"%@",?error);

}];

}

#pragma?mark?-?GET登錄

-?(void)getLogin

{

AFHTTPRequestOperationManager?*manager?=?[AFHTTPRequestOperationManager?manager];

//原本需要拼接get訪問URL???&?=

NSDictionary?*dict?=?@{@"username":?@"wangwu",?@"password"?:?@"wang"};

//網(wǎng)絡(luò)訪問是異步的,回調(diào)是主線程的,因此程序員不用管在主線程更新UI的事情

[manager?GET:@"http://localhost/login.php"?parameters:dict?success:^(AFHTTPRequestOperation?*operation,?id?responseObject)?{

NSLog(@"%@",?responseObject);

//提問:NSURLConnection異步方法回調(diào),是在子線程

//得到回調(diào)之后,通常更新UI,是在主線程

NSLog(@"%@",?[NSThread?currentThread]);

}?failure:^(AFHTTPRequestOperation?*operation,?NSError?*error)?{

NSLog(@"%@",?error);

}];

}

@end

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市闯团,隨后出現(xiàn)的幾起案子左冬,更是在濱河造成了極大的恐慌饶深,老刑警劉巖匾鸥,帶你破解...
    沈念sama閱讀 222,946評論 6 518
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件数尿,死亡現(xiàn)場離奇詭異被冒,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)蠕搜,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 95,336評論 3 399
  • 文/潘曉璐 我一進(jìn)店門怎茫,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人妓灌,你說我怎么就攤上這事轨蛤。” “怎么了虫埂?”我有些...
    開封第一講書人閱讀 169,716評論 0 364
  • 文/不壞的土叔 我叫張陵祥山,是天一觀的道長。 經(jīng)常有香客問我掉伏,道長缝呕,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 60,222評論 1 300
  • 正文 為了忘掉前任斧散,我火速辦了婚禮岳颇,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘颅湘。我一直安慰自己,他們只是感情好栗精,可當(dāng)我...
    茶點(diǎn)故事閱讀 69,223評論 6 398
  • 文/花漫 我一把揭開白布闯参。 她就那樣靜靜地躺著,像睡著了一般悲立。 火紅的嫁衣襯著肌膚如雪鹿寨。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 52,807評論 1 314
  • 那天薪夕,我揣著相機(jī)與錄音脚草,去河邊找鬼。 笑死原献,一個(gè)胖子當(dāng)著我的面吹牛馏慨,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播姑隅,決...
    沈念sama閱讀 41,235評論 3 424
  • 文/蒼蘭香墨 我猛地睜開眼写隶,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了讲仰?” 一聲冷哼從身側(cè)響起慕趴,我...
    開封第一講書人閱讀 40,189評論 0 277
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后冕房,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體躏啰,經(jīng)...
    沈念sama閱讀 46,712評論 1 320
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,775評論 3 343
  • 正文 我和宋清朗相戀三年耙册,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了给僵。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 40,926評論 1 353
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡觅玻,死狀恐怖想际,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情溪厘,我是刑警寧澤胡本,帶...
    沈念sama閱讀 36,580評論 5 351
  • 正文 年R本政府宣布,位于F島的核電站畸悬,受9級特大地震影響侧甫,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜蹋宦,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 42,259評論 3 336
  • 文/蒙蒙 一披粟、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧冷冗,春花似錦守屉、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,750評論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至思灌,卻和暖如春俺叭,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背泰偿。 一陣腳步聲響...
    開封第一講書人閱讀 33,867評論 1 274
  • 我被黑心中介騙來泰國打工熄守, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人耗跛。 一個(gè)月前我還...
    沈念sama閱讀 49,368評論 3 379
  • 正文 我出身青樓裕照,卻偏偏與公主長得像,于是被迫代替她去往敵國和親调塌。 傳聞我的和親對象是個(gè)殘疾皇子牍氛,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,930評論 2 361

推薦閱讀更多精彩內(nèi)容