使用NSURLSession的iOS POST请求

使用NSURLSession的iOS POST请求,ios,post,nsurlsession,Ios,Post,Nsurlsession,我正在尝试在iOS中发送一个简单的POST请求,以测试我编写的服务器。我的代码如下: NSURL *url = [NSURL URLWithString:@"http://localhost:8888/createUser"]; NSMutableURLRequest *request = [[NSMutableURLRequest alloc] initWithURL:url]; NSString *bodyData = @"username=johndoe";

我正在尝试在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
执行请求,但我希望避免这种情况,因为它已被弃用。这里的问题是什么?

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

您需要更改最后一行,如下所示:

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

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

您是要发送POST还是GET?您共享的代码使用了GETMy error-copy/paste error,因为我弄错了。我想发一封信。修正了上面的代码。谢谢。我修改了代码以反映这一点,但仍然没有得到任何结果-如果请求被发送,我至少应该在5秒后得到一个超时,但这并没有发生。我觉得自己像个白痴——我通过设置断点和单步执行来进行调试,执行被暂停,直到我继续。这很有效。非常感谢。