Objective-C équivalent de demande curl
Je suis en train de manipuler cette demande curl en Objective-C:
curl -u username:password "http://www.example.com/myapi/getdata"
J'ai mis en place la suite et je suis de données d'erreur Domain=kCFErrorDomainCFNetwork Code=303
avec NSErrorFailingURLKey=http://www.example.com/myapi/getdata
:
//Make a call to the API to pull out the categories
NSURL *url = [NSURL URLWithString:@"http://www.example.com/myapi/getdata"];
NSMutableURLRequest *request = [[NSMutableURLRequest alloc] init];
//Create the username:password string for the request
NSString *loginString = [NSString stringWithFormat:@"%@:%@", API_USERNAME, API_PASSWORD];
//Create the authorisation string from the username password string
NSData *postData = [loginString dataUsingEncoding:NSUTF8StringEncoding allowLossyConversion:YES];
NSString *postLength = [NSString stringWithFormat:@"%d", [postData length]];
[request setURL:url];
[request setHTTPMethod:@"GET"];
[request setValue:postLength forHTTPHeaderField:@"Content-Length"];
[request setValue:@"application/json" forHTTPHeaderField:@"Content-Type"];
[request setHTTPBody:postData];
NSError *error;
NSURLResponse *response;
NSData *data = [NSURLConnection sendSynchronousRequest:request returningResponse:&response error:&error];
J'espérais que quelqu'un pourrait spot où je vais mal avec ma tentative de manipuler la demande curl et me pointer dans la bonne direction. Il est évident que je suis absent? Les données renvoyées par l'API est dans un format JSON.
Veuillez modifier votre demande à la méthode de "POTEAU" [demande setHTTPMethod:@"POST"];
Aussi, vous avez créé le mauvais paramètre demande NSString *loginString = [NSString stringWithFormat:@"%@:%@", API_USERNAME, API_PASSWORD]; il devrait en être ainsi NSString *loginString = [NSString stringWithFormat:@"nom d'utilisateur=%@&mot de passe=%@", API_USERNAME, API_PASSWORD];
J'ai essayé les deux, vos suggestions, mais même erreur malheureusement.
essayez cette NSURLRequest *demande = [NSURLRequest requestWithURL:[NSURL URLWithString:@"username:[email protected]"]]; [NSURLConnection sendSynchronousRequest:demande returningResponse:NULL error:NULL]; et aussi supprimé les HTTPBody Mthod
curieusement, j'ai essayé juste avant votre commentaire et cela a fonctionné avec succès. Vous savez ce qu'ils disent. Vous attendez les âges de un et ensuite ils viennent tous ensemble! Coller dans une réponse et je vais le prix pour vous.
Aussi, vous avez créé le mauvais paramètre demande NSString *loginString = [NSString stringWithFormat:@"%@:%@", API_USERNAME, API_PASSWORD]; il devrait en être ainsi NSString *loginString = [NSString stringWithFormat:@"nom d'utilisateur=%@&mot de passe=%@", API_USERNAME, API_PASSWORD];
J'ai essayé les deux, vos suggestions, mais même erreur malheureusement.
essayez cette NSURLRequest *demande = [NSURLRequest requestWithURL:[NSURL URLWithString:@"username:[email protected]"]]; [NSURLConnection sendSynchronousRequest:demande returningResponse:NULL error:NULL]; et aussi supprimé les HTTPBody Mthod
curieusement, j'ai essayé juste avant votre commentaire et cela a fonctionné avec succès. Vous savez ce qu'ils disent. Vous attendez les âges de un et ensuite ils viennent tous ensemble! Coller dans une réponse et je vais le prix pour vous.
OriginalL'auteur ThePower | 2012-07-12
Vous devez vous connecter pour publier un commentaire.
J'ai trouvé que la meilleure chose à faire était de ne pas tenter l'authentification dans le code et de le mettre directement dans l'URL elle-même. Le code de travail se présente comme suit:
OriginalL'auteur ThePower
Ce guide semble faire ce que vous cherchez:
http://deusty.blogspot.co.uk/2006/11/sending-http-get-and-post-from-cocoa.html
Juste comme pour info, beaucoup de classes accepter initWithData, et
NSData
a une méthodedataWithContentsOfURL
, si vous voulez éviter de mettre en placeNSURLConnections
vous-même, cela pourrait être un moyen plus facile de réaliser ce que vous cherchez.OriginalL'auteur lyptt