Mac*_*y18 78 iphone objective-c ios afnetworking afnetworking-2
我刚刚开始使用AFNetworking 2.0,我想知道如何将标头放入HTTP Get请求中.文档设置了这样的GET:
AFHTTPRequestOperationManager *manager = [AFHTTPRequestOperationManager manager];
NSDictionary *parameters = @{@"foo": @"bar"};
[manager POST:@"http://example.com/resources.json" parameters:parameters success:^(AFHTTPRequestOperation *operation, id responseObject) {
NSLog(@"JSON: %@", responseObject);
} failure:^(AFHTTPRequestOperation *operation, NSError *error) {
NSLog(@"Error: %@", error);
}];
Run Code Online (Sandbox Code Playgroud)
但由于我们没有处理,NSURLRequests我不知道如何设置HTTP标头.
任何帮助,将不胜感激.
问候,
迈克
Sha*_*ssy 145
以下是使用AFNetworking 2.0的示例
AFHTTPRequestOperationManager *manager = [AFHTTPRequestOperationManager manager];
manager.responseSerializer = [AFJSONResponseSerializer serializer];
manager.requestSerializer = [AFJSONRequestSerializer serializer];
[manager.requestSerializer setValue:@"calvinAndHobbesRock" forHTTPHeaderField:@"X-I do what I want"];
[manager GET:@"http://localhost:3000" parameters:nil success:^(AFHTTPRequestOperation *operation, id responseObject) {
NSLog(@"JSON: %@", responseObject);
} failure:^(AFHTTPRequestOperation *operation, NSError *error) {
NSLog(@"Error: %@", error);
}];
Run Code Online (Sandbox Code Playgroud)
关键是以下两行:
manager.requestSerializer = [AFJSONRequestSerializer serializer];
[manager.requestSerializer setValue:@"calvinAndHobbessRock" forHTTPHeaderField:@"X-I-do-what-I-want"];
Run Code Online (Sandbox Code Playgroud)
Rya*_*anR 84
AFNetworking 2.0的精彩文档使这有点难以找到,但它就在那里.在AFHTTPRequestSerializer是-setValue:forHTTPHeaderField:.
或者,如果您按照他们推荐的方法创建会话管理器,AFHTTPSessionManager那么该类可以覆盖每个请求上修改标头的方法-dataTaskWithRequest:completionHandler:.我使用它来检查请求并根据具体情况修改标头,并且更喜欢修改序列化程序,因为它保留了该管理器中包含的网络的责任(并避免与单例相关)
- (NSURLSessionDataTask *)dataTaskWithRequest:(NSURLRequest *)request completionHandler:(void (^)(NSURLResponse *, id, NSError *))completionHandler
{
static NSString *deviceId;
if(!deviceId)
{
deviceId = [[[UIDevice currentDevice] identifierForVendor] UUIDString];
}
NSMutableURLRequest *req = (NSMutableURLRequest *)request;
// Give each request a unique ID for tracing
NSString *reqId = [NSString stringWithFormat:@"%@+%@", deviceId, [[NSUUID UUID] UUIDString] ];
[req setValue:reqId forHTTPHeaderField:"x-myapp-requestId"];
return [super dataTaskWithRequest:req completionHandler:completionHandler];
}
Run Code Online (Sandbox Code Playgroud)
use*_*541 17
添加响应和请求序列化器解决了我的问题.
manager.responseSerializer = [AFJSONResponseSerializer serializer];
manager.requestSerializer = [AFJSONRequestSerializer serializer];
[manager.requestSerializer setValue:@"application/json" forHTTPHeaderField:@"Accept"];
[manager.requestSerializer setValue:@"application/json" forHTTPHeaderField:@"Content-Type"];
Run Code Online (Sandbox Code Playgroud)
我已使用此表单预约特定标题.
AFHTTPRequestOperationManager *operationManager = [AFHTTPRequestOperationManager manager];
[operationManager.requestSerializer setValue:@"application/json" forHTTPHeaderField:@"Accept"];
[operationManager.requestSerializer setValue:@"application/x-www-form-urlencoded" forHTTPHeaderField:@"Content-Type"];
[operationManager POST:url
parameters:params
success:^(AFHTTPRequestOperation *operation, id responseObject) {
if (success) {
success(responseObject);
}
}
failure:^(AFHTTPRequestOperation *operation, NSError *error) {
NSLog(@"Error: %@", [error description]);
}
];
Run Code Online (Sandbox Code Playgroud)
这就是我认为最好的选择.在某个单独的地方,配置一个AFHTTPSessionManager使用an NSURLSessionConfiguration,然后在AFHTTPSessionManager每次要发出请求时使用它.
NSURLSessionConfiguration *config = [NSURLSessionConfiguration defaultSessionConfiguration];
config.HTTPAdditionalHeaders = @{@"Accepts": @"application/json"};
mySingletonSessionManager = [[AFHTTPSessionManager alloc] initWithBaseURL:[NSURL URLWithString:kMyBaseUrl] sessionConfiguration:config];
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
69690 次 |
| 最近记录: |