ios - Cocoa 如何做一个 POST 请求?

标签 ios cocoa request http-post

我已经学习了一些教程,但我仍然坚持执行 Post 请求。我只想将 3 个参数发送到 URL 并处理响应。而且它必须是异步的,因为它会给我一些图像,我想在 View 中一张一张地显示。

你们能帮帮我吗?

最佳答案

这很好地涵盖了here .

但是我发现我这样做的方式更简单,正如我将向您展示的那样。在 SO 和其他提供此知识的地方仍然有很多问题。

首先我们用我们的参数设置我们的请求:

- (NSData *)executePostCall {
    NSURL *url = [NSURL URLWithString:[NSString stringWithFormat:@"%@", YOUR_URL]];
    NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];

    NSString *requestFields = [NSString stringWithString:@""];
    requestFields = [requestFields stringByAppendingFormat:@"parameter1=%@&", parameter1];
    requestFields = [requestFields stringByAppendingFormat:@"parameter2=%@&", parameter2];
    requestFields = [requestFields stringByAppendingFormat:@"parameter3=%@", parameter3];

    requestFields = [requestFields stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding];
    NSData *requestData = [requestFields dataUsingEncoding:NSUTF8StringEncoding];
    request.HTTPBody = requestData;
    request.HTTPMethod = @"POST";

    NSHTTPURLResponse *response = nil;
    NSError *error = nil;
    NSData *responseData = [NSURLConnection sendSynchronousRequest:request returningResponse:&response error:&error]; 
    if (error == nil && response.statusCode == 200) {
      NSLog(@"%i", response.statusCode);
    } else {
      //Error handling
    }

    return responseData;
}

这必须被包裹在一个 block 中,因为我们不能在主线程上执行它,因为它会锁定我们的应用程序,这是不受欢迎的,所以我们执行以下操作来包裹这个请求,我会剩下的细节由您决定:

dispatch_queue_t downloadQueue = dispatch_queue_create("downloader", NULL);

dispatch_async(downloadQueue, ^{
  NSData *result = [self executePostCall];
  dispatch_async(dispatch_get_main_queue(), ^{
    // Handle your resulting data
  });
});
dispatch_release(downloadQueue);

关于ios - Cocoa 如何做一个 POST 请求?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11331746/

相关文章:

ios - 如何将帖子字符串写入API swift 3

objective-c - Cocoa:我需要初始化值转换器才能在 IB 中使用吗?

objective-c - Objective-C 中的协议(protocol)是可继承的吗?

javascript - 从 node.js 解析 HTML 时如何确定 URL

request - 如何知道 Kohana 请求是否是内部请求?

标题中的 Android,类似 iphone 的后退按钮作为布局的一部分

ios - 如何从按钮中的第一行和第二行标题中获取文本

objective-c - NSThread 在失去焦点时停止

objective-c - 当 Core Data 对象被删除并且仍然有对其的引用时,会发生什么情况?

java - 请求映射 - Spring 4 - 不起作用