文章出處

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];
}

  


文章列表


不含病毒。www.avast.com
arrow
arrow
    全站熱搜
    創作者介紹
    創作者 大師兄 的頭像
    大師兄

    IT工程師數位筆記本

    大師兄 發表在 痞客邦 留言(0) 人氣()