使用NSURLSession的iOS POST请求

时间:2016-02-23 20:22:12

标签: ios post nsurlsession

我试图在iOS中发送一个简单的POST请求来测试我写的服务器。我的代码如下:

    NSURL *url = [NSURL URLWithString:@"http://localhost:8888/createUser"];
    NSMutableURLRequest *request = [[NSMutableURLRequest alloc] initWithURL:url];
    NSString *bodyData = @"username=johndoe";
    request.HTTPMethod = @"POST";
    request.HTTPBody = [bodyData dataUsingEncoding:NSUTF8StringEncoding];
    request.timeoutInterval = 5;
    [[NSURLSession sharedSession] dataTaskWithRequest:request completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) {
        NSLog(@"resp: %@, err: %@", response, error);
    }];

我一直试图调试这个并且非常困惑。 completionHandler中的代码永远不会运行,请求永远不会超时,服务器永远不会看到任何内容。似乎什么都没发生。我能够使用旧的NSURLConnection来执行请求,但是我希望避免使用它,因为它已被弃用。这里的问题是什么?

1 个答案:

答案 0 :(得分:0)

除了设置代码以便在您说要进行POST时进行GET(正如josemando在评论中指出的那样),您还没有开始执行任务。

您需要像这样更改最后一行:

NSURLSessionDataTask *task = [[NSURLSession sharedSession] 
  dataTaskWithRequest: request 
  completionHandler: ^(NSData *data, NSURLResponse *response, NSError *error)    
  {
    NSLog(@"resp: %@, err: %@", response, error);
  }];
[task resume];

(dataTaskWithRequest创建并返回一个数据任务对象,然后您必须使用resume方法提交该对象以执行。)