HTTP POST请求并将请求参数设置成请求体添加到请求中

- (void)post:(NSString *)URL param:(NSDictionary *)param finishBlock:(void (^) (NSURLResponse *response, NSData *data, NSError *connectionError)) block {
    //网络请求字符串
    NSString *urlString = @"";
    //UTF-8转码
    NSString *urlStr = [urlString stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding];
    //把传进来的URL字符串变为URL地址
    NSURL *url = [NSURL URLWithString:urlStr];
    //请求初始化
    NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url cachePolicy:NSURLRequestReloadIgnoringCacheData timeoutInterval:20];
    //解析请求参数,用NSDictionary来存参数,通过自定义的函数把它解析成post格式的字符串
    NSString *parseParam = [self setDictionaryToString:param];
    //将字符串转化成data数据
    NSData *postData = [parseParam dataUsingEncoding:NSUTF8StringEncoding];
    //设置请求体
    [request setHTTPBody:postData];
    //设置请求方法
    [request setHTTPMethod:@"POST"];
    //创建一个新的队列
    NSOperationQueue *queue = [NSOperationQueue new];
    //发送异步请求,请求完以后返回的数据,通过completionHandler参数来调用
    [NSURLConnection sendAsynchronousRequest:request queue:queue completionHandler:block];
}

//字典转字符串
- (NSString *)setDictionaryToString:(NSDictionary *)dic {

    NSString *keyValueFormat;
    NSMutableString *result = [NSMutableString new];
    //实例化一个key枚举器用来存放dictionary的key
    NSEnumerator *keyEnum = [dic keyEnumerator];
    id key;
    while (key = [keyEnum nextObject]) {
        keyValueFormat = [NSString stringWithFormat:@"%@=%@&",key,[dic valueForKey:key]];
        [result appendString:keyValueFormat];
    }
    return result;
}

你可能感兴趣的:(网络请求)