AFNetworking 3.0 发送请求正文内容 [重复]

Posted

技术标签:

【中文标题】AFNetworking 3.0 发送请求正文内容 [重复]【英文标题】:AFNetworking 3.0 Send Request Body content [duplicate] 【发布时间】:2017-07-25 02:31:39 【问题描述】:

我正在开发一个使用 AFNetworking 连接 API 接口的项目。我的问题是如何向后端发送包含电子邮件、deviceId 的正文内容的请求。我发现了许多与 AFNetworking 2.0 而不是 3.0 兼容的解决方案。

现在我在使用 SessionManager,当我初始化请求时,如何添加内容正文上下文?

 NSData *jsonData = [NSJSONSerialization dataWithJSONObject:parameters options:NSJSONWritingPrettyPrinted error:nil];
NSString *stringData = [[NSString alloc]initWithData:jsonData encoding:NSASCIIStringEncoding];

AFHTTPSessionManager *manager = [AFHTTPSessionManager manager];
manager.responseSerializer = [AFHTTPResponseSerializer serializer];
[manager.requestSerializer setValue:@"application/x-www-form-urlencoded; charset=UTF-8" forHTTPHeaderField:@"Content-Type"];

manager.responseSerializer.acceptableContentTypes = [NSSet setWithObjects:@"application/json", @"text/json", @"text/javascript", @"text/html", nil];
[manager POST:_urlString parameters:nil progress:nil success:^(NSURLSessionTask *task, id responseObject) 
    NSString *link = [[NSString alloc] initWithData:responseObject encoding:NSUTF8StringEncoding];
    NSLog(@"JSON: %@",link);
 failure:^(NSURLSessionTask *operation, NSError *error) 
    NSLog(@"Error: %@", error);
];

我尝试将 email& deviceId 放入 [manager POST parameter: Dict],但它不起作用。

谁能告诉我如何将正文添加到 AFNetworking 3.0?谢谢

【问题讨论】:

你最好创建自己的单例而不是使用 AFNetworking 的管理器。我发现它的管理器在发送请求时会覆盖你的标头,并且管理器会导致内存泄漏。您可以实施您的经理。 @S.Jin 你能举个例子吗?我是 ios& 目标 c 的新手,我无法理解 @JaniceZhan 你可以继承AFHTTPSessionManager 并创建一个单例。像这样:+ (instancetype)sharedManager static MyManager *manager = nil; static dispatch_once_t pred; dispatch_once(&pred, ^ manager = [[self alloc] initWithBaseURL:[NSURL URLWithString:@"http://baseURL.org/"]]; ); return manager; 。您也可以在发送请求时或在 init 方法中设置您的标头字段。 【参考方案1】:

如果我正确地回答了您的问题,那应该不会那么难。它也类似于 2.0 版本。

NSDictionary *parameters = @@"username": _username.text,
                             @"deviceId": deviceIdString,

                             ;



NSMutableDictionary * parameters = [[NSMutableDictionary alloc]initWithDictionary:params];

    NSURL *baseURL = [NSURL URLWithString:@"http://url.com/ws/test.php"];

    AFHTTPSessionManager * manager = [[AFHTTPSessionManager alloc] initWithBaseURL:baseURL];
    manager.responseSerializer = [AFJSONResponseSerializer serializer];

    [manager POST:@"" parameters:parameters progress:nil success:^(NSURLSessionDataTask * _Nonnull task, id  _Nonnull responseObject) 

        //Response

     failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) 

        if(error.code==-1001)
            //Handle the error

        

    ];

【讨论】:

嗯。它不工作。结果为零。我在 Postman 上尝试了同样的请求,它有效。 我把它从工作代码中提取出来了。嗯,这很奇怪。 你没有得到任何异常吧? 没有。只是零响应

以上是关于AFNetworking 3.0 发送请求正文内容 [重复]的主要内容,如果未能解决你的问题,请参考以下文章

AFNetworking 2.x 带有 xml 正文的 POST 请求

请求正文中的 POST JSON 字符串(不在 URL-Form-Encoded 请求中) AFNetworking

我们如何使用 AFNetworking 3.0 记录请求

来自 GET 请求的 AFNetworking 3.0 404 响应

在 afnetworking 3.0 中发布请求?

基于AFNetworking 3.0的集约性网络请求API再封装