【问题标题】:iOS POST request using NSURLSession使用 NSURLSession 的 iOS POST 请求
【发布时间】:2017-10-31 00:38:59
【问题描述】:

我正在尝试在 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 来提出请求,但我想避免这种情况,因为它已被弃用。这里有什么问题?

【问题讨论】:

  • 您是在尝试发送 POST 还是 GET?您共享的代码正在使用 GET
  • 我的错误 - 在我搞砸之后复制/粘贴错误。我正在尝试发送 POST。修复了我上面的代码。

标签: ios post nsurlsession


【解决方案1】:

除了设置代码以在您说要执行 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 方法执行。)

【讨论】:

  • 谢谢。我更改了代码以反映这一点,但仍然一无所获 - 如果请求被发送,我至少应该在 5 秒后获得超时,但这没有发生。
  • 糟糕。我觉得自己像个白痴——我通过设置断点并单步执行来进行调试,然后执行被暂停,直到我继续。这工作得很好。谢谢。
猜你喜欢
  • 2013-10-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-09-26
相关资源
最近更新 更多