浅谈IOS中AFNetworking网络请求的get和post步骤

1.首先通过第三方:CocoaPods下载AFNetworking

1.1.先找到要查找的三方库:pod search + AFNetworking

1.2.出来一堆列表页面,选择三方库最新版本命令,例如: pod ‘MBProgressHUD','~>0.8'  (:q 返回)

1.3.创建工程,进入工程: cd + 工程路径

1.4.编辑工程的Podfile文件: vim Podfile

1.5.(platform :iOS, ‘8.0'
target “工程名” do
pod ‘AFNetworking', ‘~> 3.1.0'
end)新版本 (编辑键i)->(Esc键: 输入:wq返回)

1.6.6.保存Podfile的设置,然后进行更新下载三方库: pod update

2.进入工程进行相关操作

// 网络请求的头文件
#import <AFNetworking.h>
@interface ViewController ()

{
  // 进行网络监测判断的bool值
  BOOL isOpen;
}

// 用于网络请求的Session对象
@property (nonatomic, strong) AFHTTPSessionManager *session;

@end

@implementation ViewController

- (void)viewDidLoad {
  [super viewDidLoad];
  // 初始化Session对象
  self.session = [AFHTTPSessionManager manager];
  // 设置请求接口回来的时候支持什么类型的数据
  self.session.responseSerializer.acceptableContentTypes = [NSSet setWithObjects:@"application/json", @"text/json", @"text/javascript",@"application/x-json",@"text/html", nil];
}

#pragma mark - 网络监测按钮的响应方法
- (IBAction)NetworkmonitoringAction:(id)sender {

  if (!isOpen) {
    //打开网络监测
    [[AFNetworkReachabilityManager sharedManager] startMonitoring];

    isOpen = YES;

  } else {
    // 关闭网络监测
    [[AFNetworkReachabilityManager sharedManager] stopMonitoring];

    isOpen = NO;

  }

  // 接下来会判断当前是WiFi状态还是3g状态,网络不可用状态
  [[AFNetworkReachabilityManager sharedManager] setReachabilityStatusChangeBlock:^(AFNetworkReachabilityStatus status) {
    switch (status) {
      case AFNetworkReachabilityStatusUnknown:
        NSLog(@"当前网络处于未知状态");
        break;
      case AFNetworkReachabilityStatusNotReachable:
        NSLog(@"当前网络处于未链接状态");
        break;
      case AFNetworkReachabilityStatusReachableViaWWAN:
        NSLog(@"手机流量网络");
        break;
      case AFNetworkReachabilityStatusReachableViaWiFi:
        NSLog(@"wifi状态");
        break;
      default:
        break;
    }
  }];

}

#pragma mark - get请求
- (IBAction)getRequestAction:(id)sender {

  // 参数1: get请求的网址
  // 参数2: 拼接参数
  // 参数3: 当前的进度
  // 参数4: 请求成功
  // 参数5: 请求失败
  [self.session GET:@"http://api.yhouse.com/m/city/dynmiclist" parameters:nil progress:^(NSProgress * _Nonnull downloadProgress) {
    NSLog(@"下载的进度");
  } success:^(NSURLSessionDataTask * _Nonnull task, id _Nullable responseObject) {
    NSLog(@"请求成功:%@", responseObject);
  } failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) {
    NSLog(@"请求失败:%@", error);
  }];

}

#pragma mark - post请求
- (IBAction)postRequestAction:(id)sender {

  /*{
   do = "pri_memberlist";
   "member_id" = zpHr2dsRvQQxYJxo2;
   "workspace_id" = ILfYpE4Dhs2gWcuQx;
   }*/
  NSString *urlString = @"http://m.taskwedo.com/API/wedo1/wedo.php";

  NSMutableDictionary *dict = [NSMutableDictionary dictionary];
  [dict setObject:@"pri_memberlist" forKey:@"do"];

  [dict setObject:@"zpHr2dsRvQQxYJxo2" forKey:@"member_id"];
  [dict setObject:@"ILfYpE4Dhs2gWcuQx" forKey:@"workspace_id"];
  // 参数1: url
  // 参数2: body体
  [self.session POST:urlString parameters:dict progress:^(NSProgress * _Nonnull uploadProgress) {
    NSLog(@"上传的进度");
  } success:^(NSURLSessionDataTask * _Nonnull task, id _Nullable responseObject) {
    NSLog(@"post请求成功%@", responseObject);
  } failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) {
    NSLog(@"post请求失败:%@", error);
  }];
}

#pragma mark - post2请求
- (IBAction)postTwoRequestAction:(id)sender {

  /*address = "";
      comment = "\U7c7b\U6a21\U5757\U8ba1\U5212\U7528\U5230\U7b2c\U4e09\U90e8\U5206\U4e2d\Uff0c\U5f85\U63d0\U95ee\U3001\U56de\U7b54\U79ef\U7d2f\U5230\U4e00\U5b9a\U6570\U91cf\U65f6\Uff0c\U4fbf\U4e8e\U5927\U5bb6\U7684\U95ee\U9898\U7684\U5feb\U901f\U67e5\U627e\Uff0c\U6240\U4ee5\U63d0\U95ee\U90e8\U5206\U6682\U65f6\U4e0d\U52a0\U5165\U8fd9\U4e2a";
      do = "add_comment";
      kind = task;
      "member_id" = zpHr2dsRvQQxYJxo2;
      other = "";
      "task_id" = 55a47e79ec25e3641;*/

  NSString *urlString = @"http://m.taskwedo.com/API/wedo1/wedo.php";

  NSString *commonContent = @"类模块计划用到第三部分中,待提问、回答积累到一定数量时,便于大家的问题的快速查找,所以提问部分暂时不加入这个";
  // 把汉字进行编码
  commonContent = [commonContent stringByAddingPercentEncodingWithAllowedCharacters:[NSCharacterSet URLQueryAllowedCharacterSet]];
  NSMutableDictionary *dict = [NSMutableDictionary dictionary];
  [dict setValue:@"" forKey:@"address"];
  [dict setValue:commonContent forKey:@"comment"];
  [dict setValue:@"add_comment" forKey:@"do"];
  [dict setValue:@"task" forKey:@"kind"];
  [dict setValue:@"zpHr2dsRvQQxYJxo2" forKey:@"member_id"];
  [dict setValue:@"" forKey:@"other"];
  [dict setValue:@"55a47e79ec25e3641" forKey:@"task_id"];

  [self.session POST:urlString parameters:dict progress:^(NSProgress * _Nonnull uploadProgress) {
    NSLog(@"上传的进度");
  } success:^(NSURLSessionDataTask * _Nonnull task, id _Nullable responseObject) {
    NSLog(@"post请求成功:%@", responseObject);
  } failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) {
    NSLog(@"post请求失败:%@", error);
  }];
}

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我们。

(0)

相关推荐

  • IOS AFNetworking的Post失败及requestSerializer的正确使用

    IOS  AFNetworking的Post失败及requestSerializer的正确使用 前言: 最近接手一个项目,因为之前的项目里面POST请求用的是ASI的,我就想着给替换成AFNetworking,但是在替换过程中遇到了一个大坑,解决了半天才发现是一个小问题,下面将我的问题给大家分享一下: 错误描述和发现过程 Error Domain=NSCocoaErrorDomain Code=3840 "JSON text did not start with array or object

  • 浅谈IOS中AFNetworking网络请求的get和post步骤

    1.首先通过第三方:CocoaPods下载AFNetworking 1.1.先找到要查找的三方库:pod search + AFNetworking 1.2.出来一堆列表页面,选择三方库最新版本命令,例如: pod 'MBProgressHUD','~>0.8'  (:q 返回) 1.3.创建工程,进入工程: cd + 工程路径 1.4.编辑工程的Podfile文件: vim Podfile 1.5.(platform :iOS, '8.0'
target "工程名" do
po

  • 浅谈Jquery中Ajax异步请求中的async参数的作用

    之前不知道这个参数的作用,上网找了前辈的博客,在此收录到自己的博客,希望能帮到更多的朋友: test.html <a href="javascript:void(0)" onmouseover="testAsync()"> asy.js function testAsync{ var temp; $.ajax({ async: false, type : "GET", url : 'tet.php', complete: functi

  • 浅谈iOS中几个常用协议 NSCopying/NSMutableCopying

    1.几点说明 说到NSCopying和NSMutableCopying协议,不得不说的就是copy和mutableCopy. 如果类想要支持copy操作,则必须实现NSCopying协议,也就是说实现copyWithZone方法; 如果类想要支持mutableCopy操作,则必须实现NSMutableCopying协议,也就是说实现mutableCopyWithZone方法; iOS系统中的一些类已经实现了NSCopying或者NSMutableCopying协议的方法,如果向未实现相应方法的系

  • 浅谈iOS中的锁的介绍及使用

    在平时的开发中经常使用到多线程,在使用多线程的过程中,难免会遇到资源竞争的问题,那我们怎么来避免出现这种问题那? 线程安全是什么? 当一个线程访问数据的时候,其他的线程不能对其进行访问,直到该线程访问完毕.简单来讲就是在同一时刻,对同一个数据操作的线程只有一个.只有确保了这样,才能使数据不会被其他线程影响.而线程不安全,则是在同一时刻可以有多个线程对该数据进行访问,从而得不到预期的结果. 比如写文件和读文件,当一个线程在写文件的时候,理论上来说,如果这个时候另一个线程来直接读取的话,那么得到的结

  • iOS中多网络请求的线程安全详解

    前言 在iOS 网络编程有一种常见的场景是:我们需要并行处理二个请求并且在都成功后才能进行下一步处理.下面是部分常见的处理方式,但是在使用过程中也很容易出错: DispatchGroup:通过 GCD 机制将多个请求放到一个组内,然后通过 DispatchGroup.wait() 和 DispatchGroup.notify() 进行成功后的处理. OperationQueue:为每一个请求实例化一个 Operation 对象,然后将这些对象添加到 OperationQueue ,并且根据它们之

  • 浅谈iOS中三种生成随机数方法

    ios 有如下三种随机数方法: //第一种 srand((unsigned)time(0)); //不加这句每次产生的随机数不变 int i = rand() % 5; //第二种 srandom(time(0)); int i = random() % 5; //第三种 int i = arc4random() % 5 ; 注: ① rand()和random()实际并不是一个真正的伪随机数发生器,在使用之前需要先初始化随机种子,否则每次生成的随机数一样. ② arc4random() 是一个

  • 浅谈iOS开发中static变量的三大作用

    (1)先来介绍它的第一条也是最重要的一条:隐藏 当我们同时编译多个文件时,所有未加static前缀的全局变量和函数都具有全局可见性.为理解这句话,我举例来说明.我们要同时编译两个源文件,一个是a.c,另一个是main.c. 下面是a.c的内容 char a = 'A'; // global variable void msg() { printf("Hello\n"); } 下面是main.c的内容 int main(void) { extern char a; // extern v

  • IOS开发中异步网络请求上实现同步逻辑

    IOS开发中异步网络请求上实现同步逻辑 前提: 可能遇到一些问题,比如上传多个数据,需要等多个数据上传成功后做一定的处理,而且一个个上传,万一哪个上传失败了,后面就不需要上传了,直接报错. 之前ASI的网络库中是有同步请求的接口,所以很好处理,AFNetwork的网络库只有异步的网络请求,该怎么实现呢? 1.循环异步拼组 - (void)uploadFile:(NSArray *)imageArray atIndex:(NSInteger)index imagesCount:(NSInteger

  • 浅谈iOS应用中的相关正则及验证

    1.手机号码的验证正则 正则表达式: ^((13[0-9])|(15[^4,\\D])|(18[0,0-9]))\\d{8}$ 详细解释 解释: •^...$: ^:开始 $:结束 中间为要处理的字串 •(13[0-9]): 以13开头接下来一位为0-9之间的数 13 : 以13开头 [0-9]:分割语法,13后面是0-9之间的数 •| : 或(or), 将前后两个匹配条件进行or运算 • (15[^4\\D]) : 以15开头接下来一位是除4之外的0-9数字 15 : 以15开头 [^4\\D

  • 浅谈jquery中ajax跨域提交的时候会有2次请求的问题

    我们平时在同域中请求页面什么的时候不会有这种情况,这种情况大多发生在移动端的跨域请求中发生的. 解决方法就是在服务端中加一层过滤HTTP请求的类型,把OPTION等不用的类型过滤掉.就是当请求为非 HTTP中的 GET 和 POST的时候就不执行下面的代码,这样就可以只执行一次请求了. 在ASP.NET中我们用 Request.ServerVariables["REQUEST_METHOD"] == "POST" 或者 Request.ServerVariables

随机推荐