【问题标题】:Minimal POST example for NSURLSessionNSURLSession 的最小 POST 示例
【发布时间】:2014-12-12 08:27:25
【问题描述】:

我一定遗漏了一些基本的东西,因为我根本无法使用 POST 获得任何 NSURLSession 示例。我将服务器设置为打印出(到我尾随的文件)所有接收到的 POST 参数,并且我在 POST 正文中放置的任何内容都没有显示。我已经尝试过Send POST request using NSURLSession 的解决方案以及the Ray Wenderlich Cookbook for using NSURLSession 等在线教程。

例如,这里的代码几乎直接来自 Stackoverflow thread, mentioned above,只是 URL 和 post 参数发生了变化:

-(void)postTest {
    NSString *textContent = @"XXXXX";
    NSString *noteDataString = [NSString stringWithFormat:@"x=%@", textContent];

    NSURLSessionConfiguration *sessionConfiguration = [NSURLSessionConfiguration defaultSessionConfiguration];
    sessionConfiguration.HTTPAdditionalHeaders = @{
                                               @"a"       : @"YYYYY"
                                               };
    NSURLSession *session = [NSURLSession sessionWithConfiguration:sessionConfiguration];
    NSURL *url = [NSURL URLWithString:@"[MY URL with PHP script]"];
    NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];
    request.HTTPBody = [noteDataString dataUsingEncoding:NSUTF8StringEncoding];
    request.HTTPMethod = @"POST";
    NSURLSessionDataTask *postDataTask = [session dataTaskWithRequest:request    completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) {
    outputLabel.text = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
    }];
    [postDataTask resume];
}

PHP 脚本显示“XXXXX”参数已正确接收 - 但它不是 POST 正文的一部分;相反,它是 URL 本身的一部分。 POST 正文中的唯一参数是“YYYYY”参数,但它根本不显示。

Ray Wenderlich 示例也不起作用:PHP 脚本没有显示任何内容。

-(void)testPost {
    NSURL *url = [NSURL URLWithString:@"[MY URL with PHP script]"];
    NSURLSessionConfiguration *config = [NSURLSessionConfiguration defaultSessionConfiguration];
    NSURLSession *session = [NSURLSession sessionWithConfiguration:config];

    NSMutableURLRequest *request = [[NSMutableURLRequest alloc] initWithURL:url];
    request.HTTPMethod = @"POST";

    NSDictionary *dictionary = @{@"a": @"YYYYY"};
    NSError *error = nil;
    NSData *data = [NSJSONSerialization dataWithJSONObject:dictionary options:kNilOptions error:&error];
    if (!error) {
        NSURLSessionUploadTask *uploadTask =
          [session uploadTaskWithRequest:request
                            fromData:data completionHandler:^(NSData *data,NSURLResponse *response,NSError *error) {
                            }];
        [uploadTask resume];
    }
}

有什么我没有设置的地方吗?我没想到转向 NSURLSession 会有如此微妙的陷阱,我想知道我做错了还是错过了一些愚蠢的事情。感谢您的帮助!

【问题讨论】:

    标签: post nsurlsession


    【解决方案1】:

    Apple Documentation关于uploadTaskWithRequest:fromData:completionHandler的请求参数:

    提供 URL、缓存策略、请求的 NSURLRequest 对象 类型等等。此请求对象中的正文流和正文数据 被忽略。

    【讨论】:

      猜你喜欢
      • 2019-05-23
      • 2017-06-18
      • 1970-01-01
      • 2021-08-19
      • 1970-01-01
      • 2019-09-08
      • 2016-04-18
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多