programing

AF Networking 2.0 GET 요청에 헤더 추가

padding 2023. 7. 27. 21:41
반응형

AF Networking 2.0 GET 요청에 헤더 추가

저는 방금 AF네트워킹 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 헤더를 설정하는 방법을 잘 모르겠습니다.

어떤 도움이라도 주시면 감사하겠습니다.
안부 전해요,
마이크

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

AFNetworking 2.0에 대한 환상적인 문서는 이것을 찾기가 조금 어렵지만, 실제로 있습니다.에서AFHTTPRequestSerializer입니다.

또는 세션 관리자를 생성하는 권장 접근 방식을 따르는 경우 다음을 수행합니다.AFHTTPSessionManager그러면 해당 클래스가 각 요청의 헤더를 수정하는 메서드를 재정의할 수 있습니다.저는 이를 사용하여 요청을 검사하고 사례별로 헤더를 수정하며, 해당 관리자에 포함된 네트워킹에 대한 책임을 유지하기 때문에 시리얼라이저를 수정하는 것을 선호합니다(싱글톤과의 충돌을 피함).

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

응답 및 직렬화 요청을 추가하여 문제를 해결했습니다.

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

내가 한 짓은...토큰을 전달하는 사람들을 위해.

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

다음 코드를 사용하여 모든 유형의 헤더 값을 입력합니다.

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

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

반응형