IOS使用Object-c执行POST提交JSON方法

年爸 1年前 ⋅ 1711 阅读

说明:最近公司有个急活需要封装一个IOS的接口并提供出去,对于我这种不会IOS的人简直是要了命啊,现将写好的方法逐一记录吧,以后如果有更好的再做更新!特别说明下面的方法是比较老的编写方式且是同步的,异步的已经有更好的编写方式,之后在更新吧!

/**
 * POST提交方法
 * @param url 接口请求地址
 * @param mulDic 请求参数(JSON)
*/
+ (NSString *) post:(NSString *) url mulDic:(NSMutableDictionary *) mulDic{
    @try{
        // 接口请求的URL
        NSURL *uri = [NSURL URLWithString:url];
        
        // 接口请求的json数据承载
        NSData *postDatas = nil;
        NSString *reqData = @"";

        // NSJSONSerialization 组json字符串
        if ([NSJSONSerialization isValidJSONObject:mulDic]) {
            postDatas = [NSJSONSerialization dataWithJSONObject:mulDic options:NSJSONWritingPrettyPrinted error:nil];
            NSString *str = [[NSString alloc] initWithData:postDatas encoding:NSUTF8StringEncoding];
            reqData = [reqData stringByAppendingString:str];
            // NSData *postData = [reqData dataUsingEncoding:NSASCIIStringEncoding allowLossyConversion:YES];
            postDatas = [NSData dataWithBytes:[reqData UTF8String] length:[reqData length]];
        }

        // 请求体
        NSMutableURLRequest *request = [[NSMutableURLRequest alloc]init];
        [request setHTTPMethod:@"POST"];    // 指定请求方式
        [request setURL:uri];               // 设置请求的地址
        [request setHTTPBody:postDatas];    // 设置请求的参数
        [request setTimeoutInterval:15000]; // 请求超时时间
        
        //[request setValue:@"application/x-www-form-urlencoded" forHTTPHeaderField:@"Content-Type"];
        [request setValue:@"application/json" forHTTPHeaderField:@"Content-Type"];

        // 请求结果
        NSURLResponse *response;
        NSError *error;
        NSData *backData = [NSURLConnection sendSynchronousRequest:request returningResponse:&response error:&error];
        if (error) {
            NSLog(@"error : %@", [error localizedDescription]);
            return nil;
        }

        NSString *result  =[[NSString alloc] initWithData:backData encoding:NSUTF8StringEncoding];
        return result;
    }
    @catch(NSException *ex){
        NSLog(@"NSMutableURLRequest请求错误:%@", ex);
        @throw ex;
    }
}

全部评论: 0

    我有话说: