programing tip

AFNetworking 2.0은 GET 요청에 헤더 추가

itbloger 2020. 10. 11. 09:15
반응형

AFNetworking 2.0은 GET 요청에 헤더 추가


방금 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);
}];

그러나 우리가 처리하지 않기 때문에 NSURLRequestsHTTP 헤더를 설정하는 방법을 잘 모르겠습니다.

어떤 도움을 주시면 감사하겠습니다.
감사합니다,
Mike


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];
}

다음은 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);
}];

핵심은 다음 두 줄입니다.

manager.requestSerializer = [AFJSONRequestSerializer serializer];
[manager.requestSerializer setValue:@"calvinAndHobbessRock" forHTTPHeaderField:@"X-I-do-what-I-want"];

응답 및 요청 직렬 변환기를 추가하면 내 문제가 해결되었습니다.

manager.responseSerializer = [AFJSONResponseSerializer serializer];
manager.requestSerializer = [AFJSONRequestSerializer serializer];

[manager.requestSerializer setValue:@"application/json" forHTTPHeaderField:@"Accept"];
[manager.requestSerializer setValue:@"application/json" forHTTPHeaderField:@"Content-Type"];

이 양식을 사용하여 특정 헤더로 약속을 잡았습니다.

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]);

               }
 ];

여기에 제가 최선의 선택이라고 생각하는 것이 있습니다. 싱글 톤 어딘가에서를 AFHTTPSessionManager사용하여 구성한 NSURLSessionConfiguration다음 AFHTTPSessionManager요청할 때마다 사용하십시오 .

NSURLSessionConfiguration *config = [NSURLSessionConfiguration defaultSessionConfiguration];
config.HTTPAdditionalHeaders = @{@"Accepts": @"application/json"};

mySingletonSessionManager = [[AFHTTPSessionManager alloc] initWithBaseURL:[NSURL URLWithString:kMyBaseUrl] sessionConfiguration:config];

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

[manager.requestSerializer setValue:[NSString stringWithFormat:@"Token token=\"%@\"", _userObj.oAuth] forHTTPHeaderField:@"Authorization"];

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

[[FRHTTPReqManager sharedManager].requestSerializer setValue:value forHTTPHeaderField:key];

참고URL : https://stackoverflow.com/questions/19466291/afnetworking-2-0-add-headers-to-get-request

반응형