afnetworking 3.0 Migration: comment POSTER avec les en-têtes HTTP et les Corps
Je suis en train de faire une requête POST qui a HTTPHeader des Champs et d'un corps HTTP pour l'API youtube.
Précédemment dans la version 2.0 de AFNetworking, j'ai utilisé de faire de cette façon qui ont travaillé:
NSDictionary *parameters = @{@"snippet": @{@"textOriginal":self.commentToPost.text,@"parentId":self.commentReplyingTo.commentId}};
NSString *url = [NSString stringWithFormat:@"https://www.googleapis.com/youtube/v3/comments?part=snippet&access_token=%@",[[LoginSingleton sharedInstance] getaccesstoken]];
NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:[NSURL URLWithString:url]];
[request setHTTPMethod:@"POST"];
[request setValue:@"application/json" forHTTPHeaderField:@"Content-Type"];
NSError *error;
NSData *jsonData = [NSJSONSerialization dataWithJSONObject:parameters
options:0
error:&error];
NSString *jsonString = [[NSString alloc] initWithData:jsonData encoding:NSUTF8StringEncoding];
//And finally, add it to HTTP body and job done.
[request setHTTPBody:[jsonString dataUsingEncoding:NSUTF8StringEncoding]];
AFHTTPRequestOperationManager *manager = [AFHTTPRequestOperationManager manager];
manager.requestSerializer.timeoutInterval=[[[NSUserDefaults standardUserDefaults] valueForKey:@"timeoutInterval"] longValue];
manager.requestSerializer = [AFJSONRequestSerializer serializer];
AFHTTPRequestOperation *operation = [manager HTTPRequestOperationWithRequest:request progress:nil success:^(NSURLSessionTask *task, id responseObject) {
NSLog(@"Reply JSON: %@", responseObject);
}
} failure:^(NSURLSessionTask *operation, NSError *error) {
NSLog(@"Error: %@, %@, %@, %@, %@", error, operation.responseObject, operation.responseData, operation.responseString, operation.request);
}];
[operation start];
La migration docs pour la version 3.0 remplace AFHTTPRequestOperationManager
avec AFHTTPSessionManager
Cependant, je n'arrive pas à trouver un HTTPRequestOperationWithRequest
méthode pour la AFHTTPSessionManager
.
J'ai essayé d'utiliser le constructingBodyWithBlock
mais cela ne fonctionne pas, peut-être parce que je ne suis pas la faire correctement.
C'est ce que j'ai à ce jour qui ne fonctionne pas:
NSDictionary *body = @{@"snippet": @{@"topLevelComment":@{@"snippet":@{@"textOriginal":self.commentToPost.text}},@"videoId":self.videoIdPostingOn}};
NSError *error;
NSData *jsonData = [NSJSONSerialization dataWithJSONObject:body
options:0
error:&error];
NSString *jsonString = [[NSString alloc] initWithData:jsonData encoding:NSUTF8StringEncoding];
AFHTTPSessionManager *manager = [AFHTTPSessionManager manager];
AFJSONRequestSerializer *serializer = [AFJSONRequestSerializer serializer];
serializer.timeoutInterval= [[[NSUserDefaults standardUserDefaults] valueForKey:@"timeoutInterval"] longValue];
[serializer setValue:@"application/json" forHTTPHeaderField:@"Content-Type"];
[serializer setValue:@"application/json" forHTTPHeaderField:@"Accept"];
[manager POST:[NSString stringWithFormat:@"https://www.googleapis.com/youtube/v3/commentThreads?part=snippet&access_token=%@",[[LoginSingleton sharedInstance] getaccesstoken]] parameters:nil constructingBodyWithBlock:^(id<AFMultipartFormData> _Nonnull formData) {
[formData appendPartWithHeaders:nil body:[jsonString dataUsingEncoding:NSUTF8StringEncoding]];
} progress:nil success:^(NSURLSessionDataTask * _Nonnull task, id _Nullable responseObject) {
NSLog(@"Reply JSON: %@", responseObject);
} failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) {
NSLog(@"Error: %@, %@, %@, %@, %@", error, operation.responseObject, operation.responseData, operation.responseString, operation.request);
}];
- puis-je connaître votre corps de message que tu veux poster des url et de le u r de la frappe. c'est sûr que je peux donner u exemple de code de travail.
- Merci pour la réponse! C'est dans mon post au dessus. Le "corps" du dictionnaire est ce que je veux poster. Auparavant, je voudrais la convertir en une Chaîne JSON et puis le dataUsingEncoding qui, je le défini comme le HTTPBody. Le Code est inclus ci-dessus.
- besoin d'une aide, il permettrait d'économiser mon temps il suffit de faire un exemple de code de afnetwork avec 2.0 et uplaod dropbox ou github. si u pourrait faire qu'il serait assez bon. J'ai pu voir certains de jeton d'authentification. il me faudrait comprendre votre scénario d'abord, plutôt que u pu faire un exemple de travail en 2.0. hope u comprendre
- avez-vous un youtube api clé? Si oui, alors je peux le faire
- non je n'ai pas cette clé, vous pourriez donne ur de travail secondaire clés. plus tard, vous pouvez le changer
Vous devez vous connecter pour publier un commentaire.
Une autre façon d'appeler une méthode POST avec AFNetworking 3.0 est:
Espère que cela aide!
NSDictionary *body = @{@"snippet": @{@"topLevelComment":@{@"snippet":@{@"textOriginal":self.commentToPost.text}},@"videoId":self.videoIdPostingOn}}; NSError *error; NSData *jsonData = [NSJSONSerialization dataWithJSONObject:body options:0 error:&error]; NSString *jsonString = [[NSString alloc] initWithData:jsonData encoding:NSUTF8StringEncoding];
donc, ici, je veux envoyer le[jsonString dataUsingEncoding:NSUTF8StringEncoding]
dans la demande de HTTPBodyJ'ai été capable de comprendre cela par moi-même.
Voici la solution.
Tout d'abord, vous devez créer le
NSMutableURLRequest
deAFJSONRequestSerializer
où vous pouvez définir le type de méthode à la POSTE.Sur cette demande, vous obtenez à
setHTTPBody
après avoir défini votreHTTPHeaderFields
. Assurez-vous de définir le corps après avoir défini les champs d'en-Tête de type de contenu, ou encore l'api donnera une erreur 400.Puis sur le gestionnaire de créer un
dataTaskWithRequest
à l'aide de laNSMutableURLRequest
. N'oubliez pas deresume
la dataTask à la fin, ou autre, rien ne sera envoyé encore. Voici ma solution code, j'espère que quelqu'un arrive à utiliser ce avec succès:AFJSONRequestSerializer
est à serialise la demande pour vous. Si vous n'avez pas besoin de tout leNSJSONSerialization
trucs au début, il suffit de passer votrebody
dictionnaire en tant que les paramètres derequestWithMethod:URLString:parameters:error:
Content-Type
ceci est fait pour vous.Pour
HTTPBody
avec JSONPour
HTTPBody
personnalisé pour le format de la Chaîne deCette méthode fonctionne bien pour AFNetworking 3.0.
Utilisation commune
NSObject
méthode de Classe pour Appeler Wenservices avec AFNetworking 3.0C'est mon Double Réponse, mais il a été mis à Jour avec AFNetworking 3.0
D'abord faire
NSObject
Classe Comme Webservice.h et Webservice.mWebservice.h
Webservice.m votre nsobject.m fichier est ressembler à ceci.(ajouter deux fonctions .m fichier)
Utiliser comme cette appeler cette méthode commune de toute viewcontroller.m et toutes les méthodes de toutes les
viewControllers
. temporaire, je suis en utilisantviewDidLoad
pour l'appel de Cette WS.ajouter votre Paramètre, les valeurs et les webservice de l'URL dans la méthode ci-dessus. vous pouvez facilement utiliser ce
NSObjcet
Classe. pour plus de détails, veuillez visiter AFNetworking 3.0 ou mon vieux answear avec AFNetworking 2.0.Accepté de répondre à de #Pranoy C est converti pour AFNetworking 3.0
NetworkManager.m
ajoutez ensuite la demande au contrôleur de
https://github.com/Rita5969/afnetwork3.0-for-webservice