NSURLRequest définition de l'en-tête HTTP

86

J'ai besoin de définir l'en-tête HTTP pour une demande. Dans la documentation de la classe NSURLRequest, je n'ai rien trouvé concernant l'en-tête HTTP. Comment puis-je définir l'en-tête HTTP pour qu'il contienne des données personnalisées?

Raphael
la source

Réponses:

182

Vous devez utiliser un NSMutableURLRequest

NSMutableURLRequest* request = [[[NSMutableURLRequest alloc] initWithURL:url]
                                autorelease];

[request setValue:VALUE forHTTPHeaderField:@"Field You Want To Set"];

ou pour ajouter un en-tête:

[request addValue:VALUE forHTTPHeaderField:@"Field You Want To Set"];
Larry Hipp
la source
1
Exactement ce que je cherchais!! Bravo à vous !!
Apple_iOS0304
1
Existe-t-il une API pour ajouter un dictionnaire d'en-têtes?
Paul Brewczynski
1
Excellente réponse! Je voulais souligner que la réponse de RamS a une belle documentation.
fskirschbaum
@larry pouvez-vous répondre à cela aussi: stackoverflow.com/questions/40342728/…
Chaudhry Talha
11

pour Swift

let url: NSURL = NSURL(string: APIBaseURL + "&login=1951&pass=1234")!
var params = ["login":"1951", "pass":"1234"]
request = NSMutableURLRequest(URL:url)
request.HTTPMethod = "POST"
var err: NSError?
request.HTTPBody = NSJSONSerialization.dataWithJSONObject(params, options: nil, error: &err)
request.addValue("application/json", forHTTPHeaderField: "Content-Type")
request.addValue("application/json", forHTTPHeaderField: "Accept")
Beslan Tularov
la source
J'utilise un type de code similaire pour faire une demande, mais il renvoie des données nulles . J'ai essayé ce qui ne va pas et la seule chose que j'ai pu trouver était la valeur de la réponse qui revient a une valeur différente pour "Content-Type" par opposition à ce que j'essaie d'ajouter au début du code. request.setValue("Some value", forHTTPHeaderField: "Content-Type")est-ce que cela fonctionne pour vous?
Sashi
essayez cet en-tête request.addValue ("text / html", forHTTPHeaderField: "Content-Type")
Beslan Tularov
J'ai essayé cela aussi, mais cela n'a pas fonctionné. Enfin, l'utilisation de myParameters.dataUsingEncoding a fonctionné pour moi, j'utilisais autre chose, c'est la raison pour laquelle je pense que cela ne fonctionnait pas. Merci pour l'aide.
Sashi
6
 NSMutableURLRequest *request=[NSMutableURLRequest requestWithURL:url cachePolicy:NSURLRequestReloadIgnoringCacheData timeoutInterval:60];

[request setHTTPMethod:@"POST"];
[request setValue:postLength forHTTPHeaderField:@"Content-Length"];
[request setValue:@"application/x-www-form-urlencoded" forHTTPHeaderField:@"Content-Type"];
[request setValue:@"your value" forHTTPHeaderField:@"for key"];//change this according to your need.
[request setHTTPBody:postData];
Bélier S
la source
2
Vous devriez probablement ajouter une explication pour le code que vous avez publié.
MasterAM
Que signifie setValue: @ "application / x-www-form-urlencoded", est-ce qch personnalisé?
Dilara Albayrak
Dans le cas d'une prise en charge limitée de POST dans le logiciel client HTTP où les données pures ne peuvent pas être soumises dans le corps du message HTTP, RESTfm est capable de gérer les données encodées au format application / x-www-form-urlencoded ou multipart / form-data. . Remarque: les formats application / x-www-form-urlencoded et multipart / form-data ne sont applicables qu'à la méthode HTTP POST Remarque 2: Ce format utilise le même schéma de `` codage d'URL '' que celui requis pour les paramètres de chaîne de requête GET comme décrit ici . Avantages Prise en charge d'une taille de données plus grande que ce qui est possible à l'aide d'une chaîne de requête GET.
Ram S
Reportez-vous à ce lien pour plus de détails restfm.com/restfm-manual/web-api-reference-documentation
Ram S
2

Je sais que c'est tard mais peut aider les autres, pour SWIFT 3.0

let url = NSURL(string: "http://www.yourwebsite.com")
    let mutAbleRequest = NSMutableURLRequest(URL: url!)
    mutAbleRequest.setValue("YOUR_HEADER_VALUE", forHTTPHeaderField:"YOUR_HEADER_NAME")
    myWebView.loadRequest(mutAbleRequest)
Umair Khalid
la source
0

Vous pouvez ajouter de la valeur à NSMutableURLRequestHeaderField:

NSMutableURLRequest* request = [[NSMutableURLRequest alloc] initWithURL:url];

[request setValue:VALUE forHTTPHeaderField:@"cookie"];

Cela fonctionne pour moi.

Saroj Kumar ojha
la source
0

Exemple de code

 - (void)reqUserBalance:(NSString*)reward_scheme_id id:(NSString*)user_id success:(void (^)(id responseObject))success failure:(void (^)(id responseObject))failure{

    NSURL *url = [NSURL URLWithString:[NSString stringWithFormat:@"%@reward/%@/user/%@/balance",URL_SERVER,reward_scheme_id,user_id]];
    NSLog(@"%@",url);
    NSMutableURLRequest *request = [[NSMutableURLRequest alloc] initWithURL:url];

    [request setValue:@"application/json" forHTTPHeaderField:@"Content-Type"];
    [request setValue:@"true" forHTTPHeaderField:@"Bypass"];

    [NSURLConnection sendAsynchronousRequest:request
                                       queue:[NSOperationQueue mainQueue]
                           completionHandler:^(NSURLResponse *response,
                                               NSData *data, NSError *connectionError)
     {
                         options:kNilOptions error:NULL];

         if (data.length > 0 && connectionError == nil)
         {
             NSDictionary * userPoints = [NSJSONSerialization JSONObjectWithData:data
                                                                      options:0
                                                                        error:NULL];

             NSString * points = [[userPoints objectForKey:@"points"] stringValue];
             NSLog(@"%@",points);
             [SecuritySetting sharedInstance].usearAvailablePoints = points;


         }
     }];

}
Binoy jose
la source