is there an example of AFHTTPClient posting json with AFNetworking?

前端 未结 3 743
长情又很酷
长情又很酷 2021-02-05 22:56

Looking for an example of how to post json with AFHTTPClient. I see that there is a postPath method which takes an NSDictionary and the AFJSONEncode me

3条回答
  •  广开言路
    2021-02-05 23:34

    The best and simple way to do that is to subclass AFHTTPClient.

    Use this code snippet

    MBHTTPClient

    #define YOUR_BASE_PATH @"http://sample.com"
    #define YOUR_URL @"post.json"
    #define ERROR_DOMAIN @"com.sample.url.error"
    
    /**************************************************************************************************/
    #pragma mark - Life and Birth
    
    + (id)sharedHTTPClient
    {
        static dispatch_once_t pred = 0;
        __strong static id __httpClient = nil;
        dispatch_once(&pred, ^{
            __httpClient = [[self alloc] initWithBaseURL:[NSURL URLWithString:YOUR_BASE_PATH]];
            [__httpClient setParameterEncoding:AFJSONParameterEncoding];
            [__httpClient registerHTTPOperationClass:[AFJSONRequestOperation class]];
            //[__httpClient setAuthorizationHeaderWithUsername:@"" password:@""];
        });
        return __httpClient;
    }
    
    /**************************************************************************************************/
    #pragma mark - Custom requests
    
    - (void) post<#Objects#>:(NSArray*)objects
    success:(void (^)(AFHTTPRequestOperation *request, NSArray *objects))success
    failure:(void (^)(AFHTTPRequestOperation *request, NSError *error))failure
    {
        [self postPath:YOUR_URL
           parameters:objects
              success:^(AFHTTPRequestOperation *request, id JSON){
                  NSLog(@"getPath request: %@", request.request.URL);
    
                  if(JSON && [JSON isKindOfClass:[NSArray class]])
                  {
                      if(success) {
                          success(request,objects);
                      }
                  }
                  else {
                      NSError *error = [NSError errorWithDomain:ERROR_DOMAIN code:1 userInfo:nil];
                      if(failure) {
                          failure(request,error);
                      }
                  }
              }
              failure:failure];
    }
    

    Then in your code just call

    [[MBHTTPClient sharedHTTPClient]  post<#Objects#>:objects
                                              success:^(AFHTTPRequestOperation *request, NSArray *objects) {
        NSLog("OK");
    }
                                              failure:(AFHTTPRequestOperation *request, NSError *error){
        NSLog("NOK %@",error);
    }
    

    objects is an NSArray (you can change it to NSDictonary) and will be encode in JSON format

提交回复
热议问题