NSURLRequest setzt den HTTP-Header


85

Ich muss den HTTP-Header für eine Anfrage setzen. In der Dokumentation zur NSURLRequest-Klasse habe ich nichts zum HTTP-Header gefunden. Wie kann ich den HTTP-Header so einstellen, dass er benutzerdefinierte Daten enthält?

Antworten:


182

Sie müssen eine NSMutableURLRequest verwenden

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

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

oder um einen Header hinzuzufügen:

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

1
Genau das, wonach ich gesucht habe !! Daumen hoch bis zu dir !!
Apple_iOS0304

1
Gibt es eine API zum Hinzufügen eines Header-Wörterbuchs?
Paul Brewczynski

1
Hervorragende Antwort! Ich wollte darauf hinweisen, dass die Antwort von RamS eine schöne Dokumentation enthält.
Fskirschbaum

@larry können Sie dies auch beantworten: stackoverflow.com/questions/40342728/…
Chaudhry Talha

11

für 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")

Ich verwende ähnliche Art von Code , um einen Antrag zu stellen, aber es ist die Rückkehr Null - Daten. Ich habe versucht, was falsch ist, und das einzige, was ich herausfinden konnte, war, dass der Antwortwert, der zurückkommt, einen anderen Wert für "Content-Type" hat als das, was ich am Anfang des Codes anhängen möchte. request.setValue("Some value", forHTTPHeaderField: "Content-Type")funktioniert das für dich
Sashi

Versuchen Sie diesen Header request.addValue ("text / html", forHTTPHeaderField: "Content-Type")
Beslan Tularov

Ich habe das auch versucht, aber es hat nicht funktioniert. Schließlich hat die Verwendung von myParameters.dataUsingEncoding für mich funktioniert. Ich habe etwas anderes verwendet, weshalb ich denke, dass es nicht funktioniert hat. Danke für die Hilfe.
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
Sie sollten wahrscheinlich eine Erklärung für den Code hinzufügen, den Sie gepostet haben.
MasterAM

Was bedeutet setValue: @ "application / x-www-form-urlencoded", ist es etwas Brauches?
Dilara Albayrak

Bei eingeschränkter Unterstützung von POST in der HTTP-Client-Software, bei der reine Daten nicht im HTTP-Nachrichtentext übermittelt werden können, kann RESTfm Daten verarbeiten, die entweder in den Formaten application / x-www-form-urlencoded oder multipart / form-data codiert sind . Hinweis: Die Formate application / x-www-form-urlencoded und multipart / form-data gelten nur für die HTTP-POST-Methode. Hinweis 2: Dieses Format verwendet dasselbe 'URL-Codierungs'-Schema, das für die hier beschriebenen GET-Abfragezeichenfolgenparameter erforderlich ist . Vorteile Unterstützung für größere Datenmengen als mit einer GET-Abfragezeichenfolge möglich.
Ram S


1

Ich weiß, dass es spät ist, kann aber anderen helfen, für 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

Sie können einen Mehrwert NSMutableURLRequestfür HeaderField hinzufügen:

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

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

Das funktioniert bei mir.


0

Beispielcode

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


         }
     }];

}
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.