web-dev-qa-db-fra.com

Ajouter un en-tête HTTP à NSURLRequest

Existe-t-il un moyen d'ajouter un en-tête HTTP à l'objet NSURLRequest? Je les ajoutais dans NSMutableURLRequest en utilisant:

[request addValue:@"PC" forHTTPHeaderField:@"machineName"]
51
Ahmad Kayyali

Je ne pense pas que vous puissiez modifier les en-têtes HTTP d'un NSURLRequest. Je pense que vous essayez de modifier un objet NSURLRequest que vous n'avez pas initialisé?

Vous pouvez créer un mutableCopy de votre demande, puis définir les champs d'en-tête avec la méthode suivante:

 -(void)setValue:(NSString *)value forHTTPHeaderField:(NSString *)field.

Après cela, vous pouvez copy la demande modifiable revenir sur votre variable NSURLRequest.

MODIFIER : Exemple ajouté ci-dessous

/* Create request variable containing our immutable request
 * This could also be a paramter of your method */
NSURLRequest *request = [NSURLRequest requestWithURL:[NSURL URLWithString:@"http://www.stackoverflow.com"]];

// Create a mutable copy of the immutable request and add more headers
NSMutableURLRequest *mutableRequest = [request mutableCopy];
[mutableRequest addValue:@"Hless" forHTTPHeaderField:@"X-user-nick"];

// Now set our request variable with an (immutable) copy of the altered request
request = [mutableRequest copy];

// Log the output to make sure our new headers are there    
NSLog(@"%@", request.allHTTPHeaderFields);
80
Hless

Déjà répondu (et grâce à ces réponses), mais voici un exemple plus simple:

NSMutableURLRequest* request = [[NSMutableURLRequest alloc] initWithURL:[NSURL URLWithString:url]];
[request setValue:@"es" forHTTPHeaderField:@"Accept-Language"];
7
Ferran Maylinch
NSString *urlString = @"http://10.28.79.63:3000/testing";

NSMutableURLRequest *imageRequest = [[NSMutableURLRequest alloc] init] ;
[imageRequest setURL:[NSURL URLWithString:urlString]];
[imageRequest setHTTPMethod:@"POST"];

NSString *boundary = [NSString stringWithString:@"---------------------------14737809831466499882746641449"];
NSString *contentType = [NSString stringWithFormat:@"multipart/form-data; boundary=%@",boundary];

[imageRequest setValue:contentType forHTTPHeaderField: @"content-Type"]; 
NSMutableData *body = [NSMutableData dataWithCapacity:[imageData length] + 512];
[body appendData:[[NSString stringWithFormat:@"--%@\r\n",boundary]dataUsingEncoding:NSUTF8StringEncoding]]; 

//Here u adds the Headers which will be posted in body 

[body appendData:[[NSString stringWithString:@"Content-Disposition: form-data; content-type: application/octet-stream; name=\"userfile\"; filename=\"inLove.mp4\"\r\n\r\n"] dataUsingEncoding:NSUTF8StringEncoding]];


[body appendData:[NSData dataWithData:imageData]];
[body appendData:[[NSString stringWithFormat:@"\r\n--%@--\r\n",boundary] dataUsingEncoding:NSUTF8StringEncoding]];

[imageRequest setHTTPBody:body];
NSURLConnection * theConnection = [[NSURLConnection alloc] initWithRequest:imageRequest 
                                                delegate:self];
5
Zubair