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

  

object-c的http post请求之 ASIFormDataRequest使用的更多相关文章

  1. AndroidInject项目使用动态代理增加对网络请求的支持

    以下内容为原创,欢迎转载,转载请注明 来自天天博客:http://www.cnblogs.com/tiantianbyconan/p/3540427.html AndroidInject项目是我写的一 ...

  2. springmvc处理ajax请求

    1.controller将数据封装成json格式返回页面 @RequestMapping("/dataList") public void datalist(CsoftCunsto ...

  3. dojo(四):ajax请求

    储备知识 1.在介绍新版本的ajax请求之前,需要先了解一些dojo/Deferreds. 初次听到“Deferred”这个概念,可能会觉得这是一个神秘的东西.实际上它在执行异步操作的时候非常强大,例 ...

  4. ASIHTTPRequest异步请求

    我们运行程序,如果网速很慢,查询的时候会一直黑屏,直到请求结束画面才出现,这样用户体验很不好.因此同步请求一般只是在某个子线 程中使用,而不在主线程中使用.异步请求的用户体验要比同步请求好,因此一般情 ...

  5. ASIHTTPRequest异步请求 分类: ios技术 2015-03-01 09:33 48人阅读 评论(0) 收藏

    我们运行程序,如果网速很慢,查询的时候会一直黑屏,直到请求结束画面才出现,这样用户体验很不好.因此同步请求一般只是在某个子线 程中使用,而不在主线程中使用.异步请求的用户体验要比同步请求好,因此一般情 ...

  6. springMVC源码分析--访问请求执行ServletInvocableHandlerMethod和InvocableHandlerMethod

    在之前一篇博客中springMVC源码分析--RequestMappingHandlerAdapter(五)我们已经简单的介绍到具体请求访问的执行某个Controller中的方法是在RequestMa ...

  7. Axios发送AJAX请求

    目录 Axios 特征 axios提供主要三种发起请求的方式 方式一:直接axios实例直接call方式 方式二:通过axios实例提供的不同http请求方式的方法 方式三:其实是从第二种方式中单独提 ...

  8. springboot springmvc拦截器 拦截POST、PUT、DELETE请求参数和响应数据,并记录操作日志

    1.操作日志实体类 @Document(collection = "operation_log") @Getter @Setter @ToString public class O ...

  9. VUE 数据请求和响应(axios)

    1. 概述 1.1 简介 axios是一个基于Promise(本机支持ES6 Promise实现) 的HTTP库,用于浏览器和 nodejs 的 HTTP 客户端.具有以下特征: 从浏览器中创建 XM ...

随机推荐

  1. 夜神安卓模拟器adb命令详解

    https://www.yeshen.com/faqs/H15tDZ6YW 一.如何找到adb? 安装夜神安卓模拟器后,电脑桌面会有"夜神模拟器"的启动图标,鼠标右键--打开文件所 ...

  2. C基础 如何让代码只执行一次

    1.0 最简单, 最高效的方式 C 代码运行起点 main 就是个大单例函数. 如果把函数注册在其里面, 那么一定很可以 :) // 某个库需要初始化的函数 void log_init(void) { ...

  3. c++鼠标点点,获取坐标值,放入到txt文件中

    // oj3.cpp : Defines the entry point for the console application.// #include "stdafx.h"#in ...

  4. npm install 装本地一直安装全局问题

    想用npm安装一些模块,不管怎么装,一直装作全局. 以为是node有问题,重装了N次,却还发现这个问题. 困惑几天无果, 偶然间通过此文章发现,npm存在配置文件:https://www.sitepo ...

  5. (My)SQL

    1.SQL语句分类 DDL(Data Definition Languages)语句:用来创建 删除 修改数据库.表.列.索引等数据库对象.常用的语句关键字主要包括create.drop.alter等 ...

  6. python selenium自动化测试之路(1)--分层测试概念、selenium工具介绍

    1.分层自动化测试概念 传统的自动化市场更关注产品UI层的自动化测试,而分层的自动化测试倡导产品开发的不同阶段都需要自动化测试 大多公司与研发团队其实是忽略了单元测试与集成测试阶段的自动化测试工作,所 ...

  7. csu 1555(线段树经典插队模型-根据逆序数还原序列)

    1555: Inversion Sequence Time Limit: 2 Sec  Memory Limit: 256 MBSubmit: 469  Solved: 167[Submit][Sta ...

  8. linux shell 一些命令

    https://stackoverflow.com/questions/918886/how-do-i-split-a-string-on-a-delimiter-in-bash wc: https: ...

  9. [实战]MVC5+EF6+MySql企业网盘实战(22)——图片列表

    写在前面 实现逻辑是:单击图片节点,加载所有的当前用户之前上传的图片,分页,按时间倒序加载. 系列文章 [EF]vs15+ef6+mysql code first方式 [实战]MVC5+EF6+MyS ...

  10. merc_timer_handle_t函数的使用

    merc_timer_handle_t,是定义一个时间类型,这个时间类型可以用来接收2个函数之间的wasted time 但是在项目中出现这个情况: 因为在脚本中添加了该函数: