【问题标题】:NSURLRequest HTTPBody is nullNSURLRequest HTTPBody 为空
【发布时间】:2014-09-30 01:34:14
【问题描述】:

我一直在尝试使用 NSURLSession 将 POST 请求发送到服务器(我知道可以使用 Postman)。

我创建一个请求如下:

NSMutableURLRequest *request = [self createRequestWithPath:[self getPathForEndpoint:endpoint]];
[request setHTTPMethod:@"POST"];
[request setHTTPBody:params];

params是从一个序列化的参数字符串(我知道是合法的参数字符串)创建的,如下:

NSData *params = [[self serialiseParameters:data] dataUsingEncoding:NSUTF8StringEncoding];

(作为参考,序列化的参数字符串类似于@"title=MyTitle&somethingElse=0"

通过搜索 SO 和其他地方,这似乎是设置请求的正确方法,以便 NSURLSession 可以发布数据,但服务器在 HTTP 正文中没有显示任何内容。

还有另一种 POST 数据的方法吗?

【问题讨论】:

    标签: ios objective-c post nsurlrequest nsurlsession


    【解决方案1】:

    通过完全不使用设置器setHTTPBody 并改用NSJSONSerialization 来解决此问题。工作代码如下所示:

    // Encode parameters
    NSData *postData = [NSJSONSerialization dataWithJSONObject:data options:0 error:nil];
    
    // Construct request
    NSMutableURLRequest *request = [self createRequestWithPath:[self getPathForEndpoint:endpoint]];
    request.HTTPMethod = @"POST";
    request.HTTPBody   = postData;
    

    我之前尝试过使用这个,但是由于某种原因在我使用[request setHTTPBody]时它不能正常工作,设置属性直接解决了这个问题。

    【讨论】:

    • setHTTPBody:.HTTPBody = 之间没有区别,这可能导致前者无法工作。 - (NSString *)serialiseParameters:(NSDictionary *)parameters 出了点问题。
    • 我检查了参数,结果如我所愿(但现在我只是将它用于 GET 参数)。
    猜你喜欢
    • 1970-01-01
    • 2016-09-20
    • 1970-01-01
    • 2011-03-25
    • 1970-01-01
    • 2015-12-23
    • 2020-04-06
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多