방금 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);
}];
그러나 우리가 처리하지 않기 때문에 NSURLRequests
HTTP 헤더를 설정하는 방법을 잘 모르겠습니다.
어떤 도움을 주시면 감사하겠습니다.
감사합니다,
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];
답변
나는 이것을 … 토큰을 전달하는 사람들을 위해
[manager.requestSerializer setValue:[NSString stringWithFormat:@"Token token=\"%@\"", _userObj.oAuth] forHTTPHeaderField:@"Authorization"];
답변
다음 코드를 사용하여 모든 유형의 헤더 값을 입력하십시오.
[[FRHTTPReqManager sharedManager].requestSerializer setValue:value forHTTPHeaderField:key];
