文章出處
文章列表
ASIHTTPRequest類庫中的ASIFormDataRequest是實現HTTP協議中的處理POST表單的很好的類庫。使用起來非常簡單。
在說明之前先需要了解HTTP請求的Get和Post方法。
Get方法一般是從服務器獲取數據,而Post方法主要是向服務器傳輸一些數據。
Get是把參數數據隊列加到提交表單的ACTION屬性所指的URL中,值和表單內各個字段一一對應,在URL中可以看到完整的URL請求。ASIHTTPRequest類主要完成Get請求。
Post方法是將表單內各個字段與其內容放置在HTML HEADER內傳送到ACTION屬性所指的URL地址。用戶看不到這個過程。ASIFormDataRequest類主要完成Post請求。
關于ASIHTTPRequest類庫的安裝配置詳見《ASIHTTPRequest的環境配置和使用示例》
1,構造請求
需要包含頭文件:#import "ASIFormDataRequest.h"
ASIFormDataRequest *request;
request=[ASIFormDataRequest requestWithURL:[NSURL URLWithString:@"http://www.tekuba.net"]];
//構造請求
[request setPostValue:emailFiled.text forKey:@"Mail"];
[request setPostValue:accountFiled.text forKey:@"UserAccount"];//帳戶
[request setPostValue:[self md5:passwordFiled.text] forKey:@"PassWord"];//密碼
[request setDelegate:self];
//配置代理為本類
[request setTimeOutSeconds:10];
//設置超時
[request setDidFailSelector:@selector(urlRequestFailed:)];
[request setDidFinishSelector:@selector(urlRequestSucceeded:)];
[request startSynchronous];//同步傳輸
//[request startAsynchronous];//異步傳輸
2,實現數據處理方法
//連接失敗
-(void)urlRequestFailed:(ASIHTTPRequest *)request
{
NSError *error =[request error];
NSLog(@"%@",error);
NSLog(@"連接失敗!");
UIAlertView * alt=[[UIAlertView alloc] initWithTitle:@"提示" message:@"連接失敗" delegate:nil cancelButtonTitle:@"確定" otherButtonTitles:nil, nil];
[alt show];
[alt release];
}
//請求成功
-(void)urlRequestSucceeded:(ASIHTTPRequest *)request
{
NSData *data=[request responseData];
NSXMLParser *parser=[[NSXMLParser alloc] initWithData:data];
NSLog(@"data length = %d",[data length]);
NSLog(@"xml data = %@",[[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding]);
[parser setDelegate:self];
[parser parse];//進入解析
}
轉載本文請注明來自特酷吧并注明本文鏈接,本文地址:www.tekuba.net/program/269/
推薦閱讀:
實例:
IPhone之ASIFormDataRequest POST操作架構設計
//開啟iphone網絡開關
[UIApplication sharedApplication].networkActivityIndicatorVisible = YES;
ASIFormDataRequest *request = [[ASIFormDataRequest alloc] initWithURL:[NSURL URLWithString:host]];
//超時時間
request.timeOutSeconds = 30;
//定義異步方法
[request setDelegate:self];
[request setDidFailSelector:@selector(requestDidFailed:)];
[request setDidFinishSelector:@selector(requestDidSuccess:)];
//用戶自定義數據 字典類型 (可選)
request.userInfo = [NSDictionary dictionaryWithObject:method forKey:@"Method"];
//post的數據
[request appendPostData:[body dataUsingEncoding:NSUTF8StringEncoding]];
//開始執行
[request startAsynchronous];
//執行成功
- (void)requestDidSuccess:(ASIFormDataRequest *)request
{
//獲取頭文件
NSDictionary *headers = [request responseHeaders];
//獲取http協議執行代碼
NSLog(@"Code:%d",[request responseStatusCode]);
if ([delegate respondsToSelector:@selector(OARequestSuccessed:withResponse:WithData:withHeaders:)])
{
//執行委托操作 (架構設計 自選)
[delegate OARequestSuccessed:method withResponse:[request responseString] WithData:[request responseData] withHeaders:headers];
}
//清空
if (request)
{
[request release];
}
//關閉網絡
[UIApplication sharedApplication].networkActivityIndicatorVisible = NO;
}
//執行失敗
- (void)requestDidFailed:(ASIFormDataRequest *)request{
//獲取的用戶自定義內容
NSString *method = [request.userInfo objectForKey:@"Method"];
//獲取錯誤數據
NSError *error = [request error];
if ([delegate respondsToSelector:@selector(OARequestFailed:withError:)])
{
//執行委托 將錯誤數據傳其他方式(架構設計 自選)
[delegate OARequestFailed:method withError:error];
}
if (request)
{
[request release];
}
[UIApplication sharedApplication].networkActivityIndicatorVisible = NO
}
//執行成功函數
- (void)OARequestSuccessed:(NSString *)method withResponse:(NSString *)response WithData:(NSData *)data withHeaders:(NSDictionary *)headers
{
NSString *responseStr = [[[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding] autorelease];
//服務返回post后的數據
NSLog(@"response:\n%@",responseStr);
}
//執行失敗函數
- (void)OARequestFailed:(NSString *)method withError:(NSError *)error
{
NSLog(@"Error:%@",error);
UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"出錯了" message:@"網絡連接失敗, 請稍后重試." delegate:nil cancelButtonTitle:@"好的" otherButtonTitles:nil];
[alert show];
[alert release];
}
文章列表
全站熱搜