如何使用 AFNetworking 添加请求标头?

Posted

技术标签:

【中文标题】如何使用 AFNetworking 添加请求标头?【英文标题】:How can I add a request header with AFNetworking? 【发布时间】:2014-03-26 06:55:54 【问题描述】:

我想在我的应用程序中使用 AFNetworking 类来与服务器通信。

我是这个图书馆的新手。这是我的代码:

 NSDictionary *user=[[NSDictionary alloc]initWithObjectsAndKeys:@"hiteshp",@"userName",@"12345^",@"password", nil];
AFHTTPRequestOperationManager *manager = [AFHTTPRequestOperationManager manager];
AFHTTPRequestSerializer *requestSerializer = [AFHTTPRequestSerializer serializer];
[requestSerializer setValue:@"application/json" forHTTPHeaderField:@"Content-Type"];
manager.requestSerializer=requestSerializer;   //[AFJSONRequestSerializer serializer];
[manager POST:@"myURL" parameters:user success:^(AFHTTPRequestOperation *operation, id responseObject) 
    NSLog(@"JSON: %@ %@", responseObject);
 failure:^(AFHTTPRequestOperation *operation, NSError *error) 
    NSLog(@"Error: %@", error);
];

我想在这个请求中添加标头。我试过了,但它不起作用。如果我写了注释行,那么请求就完成了,但我还想再添加一个字段“授权”来请求设置。 以及如何打印请求头?

【问题讨论】:

【参考方案1】:

我知道为时已晚,但这里有一段代码可以满足您的需求

NSString *finalyToken = [[NSString alloc]initWithFormat:@"Bearer %@",user.token];
 AFHTTPRequestOperationManager *manager =
[[AFHTTPRequestOperationManager alloc] initWithBaseURL:[NSURL URLWithString:@"https://server1.appscserver.de/api"]];
[manager.requestSerializer setValue:finalyToken forHTTPHeaderField:@"Authorization"];

希望对某人有所帮助

【讨论】:

感谢 joan 的回复。我现在对 AFNetworking 有了很好的体验。 @vivek 我也在尝试发送授权承载标头,但不工作.. 401 Unathorized。我认为'[manager.requestSerializer setValue:finalyToken forHTTPHeaderField:@"Authorization"];'不是设置身份验证的正确方法。标题 @Nil 它一直对我有用,也许标题字段的名称不同,在我现在正在工作的项目上它被称为“X-Auth”。 “授权”是最常见的一种,但请确保您使用的是正确的。 @Nil 当然“Bearer”也是可选的,取决于您的网络服务。有时仅使用令牌就足够了。 这个错误实际上是设置不记名字符串 nil 的错误 setter 方法的原因。总之谢谢。干杯..【参考方案2】:

在您的代码中使用它:

AFHTTPRequestOperationManager *manager = [AFHTTPRequestOperationManager manager];
    manager.responseSerializer.acceptableContentTypes = [NSSet setWithObjects:@"text/html", @"application/json", nil];

//Authorization    
[manager.requestSerializer setAuthorizationHeaderFieldWithUsername:userName password:password];

【讨论】:

在“id”类型的对象上找不到属性“acceptableContentTypes”的错误【参考方案3】:
[request setValue:@"application/json" forHTTPHeaderField:@"Content-Type"];
[request setValue:@"application/json" forHTTPHeaderField:@"Accept"];

【讨论】:

【参考方案4】:

php 文件中添加: header('Content-type: application/json');

在 xcode 中: manager.responseSerializer = [AFJSONResponseSerializer serializer];

xcode 示例代码:

NSDictionary *parameters = @@"key1": @"value1",
                             @"key2": @"value2";

    AFHTTPRequestOperationManager *manager = [AFHTTPRequestOperationManager manager];

    manager.responseSerializer = [AFJSONResponseSerializer serializer];

    [manager POST:[NSString stringWithFormat:@"http://%@", Url] parameters:parameters success:^(AFHTTPRequestOperation *operation, id responseObject) 
        NSLog(@"JSON: %@", responseObject);

     failure:^(AFHTTPRequestOperation *operation, NSError *error) 
        NSLog(@"Error: %@", error);

    ];

【讨论】:

我认为您遇到了错误"Request failed: unacceptable content-type: text/html",如果是,那么此解决方案可以帮助您。当然,来自服务器的响应以 Json 格式发送,例如 json_encode($response)。如果没有,对不起。

以上是关于如何使用 AFNetworking 添加请求标头?的主要内容,如果未能解决你的问题,请参考以下文章

使用 AFNetworking 未获得完整的响应标头

使用 AFNetworking 2.0 签署 API 请求

AFNetworking 2.0 和请求标头

将自定义标头添加到 AFNetworking,我做错了啥?

如何使用数组作为标头和 AFNetworking 进行 POST

用于 POST 的 AFNetworking 2.0 自定义标头