AFNetworking 2.0 add headers to GET request

后端 未结 7 1094
天命终不由人
天命终不由人 2020-12-07 12:20

I\'ve just started using AFNetworking 2.0 and I was wondering how I put in headers into a HTTP Get request. The documentation sets up a GET like this:

AFHTTP         


        
相关标签:
7条回答
  • 2020-12-07 12:30

    Here's an example using 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);
    }];
    

    The key are the following 2 lines:

    manager.requestSerializer = [AFJSONRequestSerializer serializer];
    [manager.requestSerializer setValue:@"calvinAndHobbessRock" forHTTPHeaderField:@"X-I-do-what-I-want"];
    
    0 讨论(0)
  • 2020-12-07 12:36

    Use the following code to put any type of header value:

    [[FRHTTPReqManager sharedManager].requestSerializer setValue:value forHTTPHeaderField:key];
    
    0 讨论(0)
  • 2020-12-07 12:37

    The fantastic documentation for AFNetworking 2.0 makes this a little hard to find, but it is there. On the AFHTTPRequestSerializer is -setValue:forHTTPHeaderField:.

    Alternatively, if you follow their recommended approach of creating a session manager that derives from AFHTTPSessionManager then that class can override a method to modify headers on each request -dataTaskWithRequest:completionHandler:. I use this to inspect requests and modify headers on a case-by-case basis, and prefer it to modifying the serializer as it keeps the responsibility for networking contained in that manager (and avoids mucking with singletons)

    - (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];
    }
    
    0 讨论(0)
  • 2020-12-07 12:39

    I did this...for those that are passing token

    [manager.requestSerializer setValue:[NSString stringWithFormat:@"Token token=\"%@\"", _userObj.oAuth] forHTTPHeaderField:@"Authorization"];
    
    0 讨论(0)
  • 2020-12-07 12:43

    Here's what i believe to be a best option. In a singleton somewhere, configure an AFHTTPSessionManager using an NSURLSessionConfiguration, and then use that AFHTTPSessionManager every time you want to make a request.

    NSURLSessionConfiguration *config = [NSURLSessionConfiguration defaultSessionConfiguration];
    config.HTTPAdditionalHeaders = @{@"Accepts": @"application/json"};
    
    mySingletonSessionManager = [[AFHTTPSessionManager alloc] initWithBaseURL:[NSURL URLWithString:kMyBaseUrl] sessionConfiguration:config];
    
    0 讨论(0)
  • 2020-12-07 12:47

    adding response and request serializer solved my problem.

    manager.responseSerializer = [AFJSONResponseSerializer serializer];
    manager.requestSerializer = [AFJSONRequestSerializer serializer];
    
    [manager.requestSerializer setValue:@"application/json" forHTTPHeaderField:@"Accept"];
    [manager.requestSerializer setValue:@"application/json" forHTTPHeaderField:@"Content-Type"];
    
    0 讨论(0)
提交回复
热议问题