NSURLRequest che imposta l'intestazione HTTP


86

Devo impostare l'intestazione HTTP per una richiesta. Nella documentazione per la classe NSURLRequest non ho trovato nulla riguardo all'intestazione HTTP. Come posso impostare l'intestazione HTTP per contenere dati personalizzati?

Risposte:


182

Devi utilizzare un NSMutableURLRequest

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

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

o per aggiungere un'intestazione:

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

1
Proprio quello che stavo cercando!! Complimenti a te !!
Apple_iOS0304

1
Esiste un'API per l'aggiunta del dizionario delle intestazioni?
Paul Brewczynski

1
Ottima risposta! Volevo sottolineare che la risposta di RamS ha una bella documentazione.
fskirschbaum

@larry puoi rispondere anche a questo: stackoverflow.com/questions/40342728/…
Chaudhry Talha

11

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

Sto usando un tipo di codice simile per effettuare una richiesta, ma restituisce dati nulli . Ho cercato di capire cosa non andava e l'unica cosa che sono riuscita a trovare è che il valore di risposta che torna ha un valore diverso per "Content-Type" rispetto a quello che sto cercando di aggiungere all'inizio del codice. request.setValue("Some value", forHTTPHeaderField: "Content-Type")funziona per te?
Sashi

prova questa intestazione request.addValue ("text / html", forHTTPHeaderField: "Content-Type")
Beslan Tularov

Ho provato anche quello, ma non ha funzionato. Finalmente usando myParameters.dataUsingEncoding ha funzionato per me, stavo usando qualcos'altro che è il motivo per cui penso che non funzionasse. Grazie per l'aiuto.
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
Probabilmente dovresti aggiungere qualche spiegazione per il codice che hai pubblicato.
MasterAM

Cosa significa setValue: @ "application / x-www-form-urlencoded", è qc personalizzato?
Dilara Albayrak

In caso di supporto limitato per POST nel software client HTTP in cui i dati puri non possono essere inviati nel corpo del messaggio HTTP, RESTfm è in grado di gestire i dati codificati nei formati application / x-www-form-urlencoded o multipart / form-data . Nota: i formati application / x-www-form-urlencoded e multipart / form-data sono applicabili solo al metodo HTTP POST Nota 2: questo formato utilizza lo stesso schema di 'codifica URL' richiesto per i parametri della stringa di query GET come descritto qui . Vantaggi Supporto per dimensioni dei dati maggiori rispetto a quanto possibile utilizzando una stringa di query GET.
Ram S

Fare riferimento a questo link per maggiori dettagli restfm.com/restfm-manual/web-api-reference-documentation/…
Ram S

2

So che è tardi ma potrebbe aiutare gli altri, per 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

Puoi aggiungere valore NSMutableURLRequestper HeaderField:

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

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

Questo sta funzionando per me.


0

Codice d'esempio

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


         }
     }];

}
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.