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?

Raphael
quelle

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"];
Larry Hipp
quelle
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")
Beslan Tularov
quelle
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];
Ram S.
quelle
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
Weitere Informationen finden
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)
Umair Khalid
quelle
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.

Saroj Kumar ojha
quelle
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;


         }
     }];

}
Binoy Jose
quelle