使用 NSMutableURLRequest 提交表单

557 阅读1分钟
    NSURL *postUsfrl = [NSURL URLWithString:url];
    NSMutableURLRequest *mutableRequest = [NSMutableURLRequest requestWithURL:postUsfrl];
    NSString *boundary = @"wfWiEWrgEFA9A78512weF7106A";//自定义分隔符
    mutableRequest.allHTTPHeaderFields = @{
        @"Content-Type":[NSString stringWithFormat:@"multipart/form-data; boundary=%@",boundary]
    };
    NSMutableData *postData = [[NSMutableData alloc]init];//请求体数据
    for (NSString *key in Params.allKeys) {
        //循环构建每部分数据
        NSString *pair 
         = [NSString stringWithFormat:@"--%@\r\nContent-Disposition: form-data; name=\"%@\"\r\n\r\n",boundary,key];
        [postData appendData:[pair dataUsingEncoding:NSUTF8StringEncoding]];
        id value = [obf_netParams_fuc objectForKey:key];
        if ([value isKindOfClass:[NSString class]]) {
            [postData appendData:[value dataUsingEncoding:NSUTF8StringEncoding]];
        }else if ([value isKindOfClass:[NSData class]]){
            [postData appendData:value];
        }else{
            NSString *str = [NSString stringWithFormat:@"%@",value];
            [postData appendData:[str dataUsingEncoding:NSUTF8StringEncoding]];
        }
        [postData appendData:[@"\r\n" dataUsingEncoding:NSUTF8StringEncoding]];
    }
    [postData appendData:[@"\r\n" dataUsingEncoding:NSUTF8StringEncoding]];
    //设置结尾
    [postData appendData:[[NSString stringWithFormat:@"--%@--\r\n",boundary] dataUsingEncoding:NSUTF8StringEncoding]];
    mutableRequest.HTTPBody = postData;
    //设置请求头总数据长度
    [mutableRequest setValue:
       [NSString stringWithFormat:@"%lu",(unsigned long)postData.length] forHTTPHeaderField:@"Content-Length"];
    [mutableRequest setHTTPMethod:@"POST"];
    NSURLSession *session = [NSURLSession sharedSession];
    NSURLSessionTask *task = [session dataTaskWithRequest:mutableRequest 
         completionHandler:^(NSData * _Nullable data, NSURLResponse * _Nullable response, NSError * _Nullable error) {
         dispatch_async(dispatch_get_main_queue(), ^{

         });
    }];
    [task resume];