Yeshua Lagac
Yeshua Lagac

Reputation: 11

AFNetworking Header

This is my code to upload the photo using AFNetworking.

NSMutableURLRequest *request = [[AFHTTPRequestSerializer serializer] multipartFormRequestWithMethod:@"POST" URLString:urlString parameters:params constructingBodyWithBlock:^(id<AFMultipartFormData> formData) {
    [formData appendPartWithFileData:dataImage name:@"file" fileName:@"Photo" mimeType:@"image/jpeg"];


} error:nil];


AFURLSessionManager *manager = [[AFURLSessionManager alloc] initWithSessionConfiguration:[NSURLSessionConfiguration defaultSessionConfiguration]];

NSURLSessionUploadTask *uploadTask;
uploadTask = [manager
              uploadTaskWithStreamedRequest:request
              progress:^(NSProgress * _Nonnull uploadProgress) {
                  // This is not called back on the main queue.
                  // You are responsible for dispatching to the main queue for UI updates
                  dispatch_async(dispatch_get_main_queue(), ^{
                      //Update the progress view
                      NSLog(@"PROGRESS :%.2f", uploadProgress.fractionCompleted);
                      block(uploadProgress, nil);
                  });
              }
              completionHandler:^(NSURLResponse * _Nonnull response, id  _Nullable responseObject, NSError * _Nullable error) {
                  if (error) {
                      NSLog(@"Error: %@", error);
                  } else {
                      NSLog(@"%@ %@", response, responseObject);
                  }
              }];

[uploadTask resume];

But I need to add a header parameter type. My the header name is "GW-Token"

It returns error because it needs to check if the token is valid. And the token should be on header

I am using AFNetworking 3.0

THANKS!

Upvotes: 1

Views: 728

Answers (2)

Avinash Jadhav
Avinash Jadhav

Reputation: 501


@Yeshua, try following one to set header field.

  [request setValue:@"Your GW-Token Value" forHTTPHeaderField:@"GW-Token"];


then serialize request.

Upvotes: 0

Stefan
Stefan

Reputation: 1335

Hope this will help:

manager.requestSerializer = [AFJSONRequestSerializer serializer];
[manager.requestSerializer setValue:[NSString stringWithFormat:@"Bearer %@", [[NSUserDefaults standardUserDefaults] objectForKey:TOKEN]] forHTTPHeaderField:@"Authorization"];

UPDATE:

This is fully implemented code that is working for me:

AFHTTPSessionManager *manager = [AFHTTPSessionManager manager];
    manager.requestSerializer = [AFJSONRequestSerializer serializer];
    manager.responseSerializer = [AFJSONResponseSerializer serializer];
    [manager.requestSerializer setValue:[NSString stringWithFormat:@"Bearer %@", [[NSUserDefaults standardUserDefaults] objectForKey:TOKEN]] forHTTPHeaderField:@"Authorization"];
    [manager.requestSerializer setValue:@"application/json" forHTTPHeaderField:@"Accept"];
    [manager.requestSerializer setValue:@"application/json" forHTTPHeaderField:@"Content-Type"];
    [manager POST:[NSString stringWithFormat:@"%@/users/updateProfile", DEFAULT_URL] parameters:parameters constructingBodyWithBlock:^(id<AFMultipartFormData> formData) {
        [formData appendPartWithFileData:profileImage name:@"file" fileName:[NSString stringWithFormat:@"%@.jpg", imageName] mimeType:@"image/jpeg"];
    } progress:nil
          success:^(NSURLSessionDataTask *task, id responseObject) {
              completionHandler(responseObject);
          } failure:^(NSURLSessionDataTask *task, NSError *error) {
              NSData *errorData = error.userInfo[AFNetworkingOperationFailingURLResponseDataErrorKey];
              if (errorData) {

                  NSDictionary *serializedData = [NSJSONSerialization JSONObjectWithData: errorData options:kNilOptions error:nil];
                  errorHandler(serializedData);

              }else {
                  NSDictionary *noData = @{@"noData": @"No data!"};
                  errorHandler(noData);
              }
          }];

Upvotes: 1

Related Questions