如何使用 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 添加请求标头?的主要内容,如果未能解决你的问题,请参考以下文章