1. ホーム
  2. iphone

AFNetworking 2.0 GETリクエストへのヘッダ追加

2023-07-06 08:28:39

質問

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 Headersを設定する方法がよくわかりません。

何か手助けがあれば、よろしくお願いします。

よろしくお願いします。

マイク

どのように解決するのですか?

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