Ajouter des paires key / valeur à NSMutableURLRequest

Bien qu'il y ait beaucoup de questions connexes, je n'en vois pas une qui traite de l'addition de plusieurs paires key / valeur à une requête NSURLRequest.

Je souhaite append un nom d'user et un mot de passe simples à une request. Je ne suis pas sûr de savoir comment append plusieurs paires, et aussi de l'enencoding. J'obtiens une connection et une réponse valides, mais la réponse indique qu'elle n'a pas été capable d'interpréter correctement la request.

Voici ce que j'ai. Merci d'avance.

NSURL *authenticateURL = [[NSURL alloc] initWithSsortingng:@"https://www.the website.com/authenticate"]; NSMutableURLRequest *authenticateRequest = [[NSMutableURLRequest alloc] initWithURL:authenticateURL]; [authenticateRequest setHTTPMethod:@"POST"]; NSSsortingng *myRequestSsortingng = @"username="; [myRequestSsortingng ssortingngByAppendingSsortingng:username]; [myRequestSsortingng ssortingngByAppendingSsortingng:@"&"]; [myRequestSsortingng ssortingngByAppendingSsortingng:@"password="]; [myRequestSsortingng ssortingngByAppendingSsortingng:password]; NSData *requestData = [NSData dataWithBytes:[myRequestSsortingng UTF8Ssortingng] length:[myRequestSsortingng length]]; [authenticateRequest setValue:@"application/x-www-form-urlencoded" forHTTPHeaderField:@"content-type"]; [authenticateRequest setHTTPBody: requestData]; [authenticateRequest setTimeoutInterval:30.0]; connection = [[NSURLConnection alloc] initWithRequest:authenticateRequest delegate:self]; 

Vous n'utilisez pas correctement NSSsortingng (votre myRequestSsortingng , en fait, indiquera "username ="). Au lieu de cela, essayez ceci:

 NSMutableSsortingng *myRequestSsortingng = [NSMutableSsortingng ssortingngWithSsortingng:@"username="]; [myRequestSsortingng appendSsortingng:username]; [myRequestSsortingng appendSsortingng:@"&password="]; [myRequestSsortingng appendSsortingng:password]; 

Suite à cette excellente réponse, juste un exemple de code typique:

 -(NSSsortingng *)buildKeyValuePostSsortingng { NSSsortingng *username = @"[email protected]"; NSSsortingng *password = @"macintosh"; NSMutableSsortingng *r = [NSMutableSsortingng ssortingngWithSsortingng:@""]; [r appendSsortingng:@"command=listFileNames"]; [r appendSsortingng:@"&"]; [r appendSsortingng:@"name=blah"]; [r appendSsortingng:@"&"]; [r appendSsortingng:@"user="]; [r appendSsortingng: [username ssortingngByUrlEncoding] ]; [r appendSsortingng:@"&"]; [r appendSsortingng:@"password="]; [r appendSsortingng: [password ssortingngByUrlEncoding] ]; return r; } 

et voici la catégorie pour faire le travail difficile / ennuyeux de l'enencoding de l'URL

 -(NSSsortingng *)ssortingngByUrlEncoding { return (NSSsortingng *)CFBridgingRelease( CFURLCreateSsortingngByAddingPercentEscapes( NULL, (CFSsortingngRef)self, NULL, (CFSsortingngRef)@"!*'();:@&=+$,/?%#[]", kCFSsortingngEncodingUTF8) ); // with thanks to http://www.cocoanetics.com/2009/08/url-encoding/ // modified for ARC use 2014 } 

J'espère que ça aide quelqu'un.

En supposant que vous voulez dire que vous voulez append des champs d'en-tête HTTP à la requête, utilisez:

 -addValue:forHTTPHeaderField: