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?

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"];

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")

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];

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)

0

Vous pouvez ajouter de la valeur à NSMutableURLRequestHeaderField:

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

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

Cela fonctionne pour moi.


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;


         }
     }];

}
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.