NSURLRequest ustawienie nagłówka HTTP

86

Muszę ustawić nagłówek HTTP dla żądania. W dokumentacji klasy NSURLRequest nie znalazłem nic na temat nagłówka HTTP. Jak ustawić nagłówek HTTP, aby zawierał dane niestandardowe?

Raphael
źródło

Odpowiedzi:

182

Musisz użyć NSMutableURLRequest

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

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

lub aby dodać nagłówek:

[request addValue:VALUE forHTTPHeaderField:@"Field You Want To Set"];
Larry Hipp
źródło
1
Właśnie tego szukałem !! Kciuki w górę!
Apple_iOS0304,
1
Czy istnieje API do dodawania słownika nagłówków?
Paul Brewczyński
1
Doskonała odpowiedź! Chciałem zaznaczyć, że odpowiedź RamSa zawiera niezłą dokumentację.
fskirschbaum
@larry, czy możesz odpowiedzieć na to pytanie: stackoverflow.com/questions/40342728/…
Chaudhry Talha
11

dla 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
źródło
Do wysyłania żądań używam podobnego kodu, ale zwraca on zero danych. Próbowałem znaleźć błąd i jedyną rzeczą, jaką mogłem wymyślić, była wartość zwracanej odpowiedzi, która ma inną wartość dla „Content-Type” w przeciwieństwie do tego, co próbuję dołączyć na początku kodu. request.setValue("Some value", forHTTPHeaderField: "Content-Type")czy to działa dla Ciebie?
Sashi
wypróbuj ten nagłówek request.addValue ("text / html", forHTTPHeaderField: "Content-Type")
Beslan Tularov
Ja też tego próbowałem, ale nie zadziałało. Wreszcie użycie myParameters.dataUsingEncoding zadziałało dla mnie, używałem czegoś innego, dlatego myślę, że to nie działa. Dzięki za pomoc.
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
źródło
2
Prawdopodobnie powinieneś dodać wyjaśnienie do wysłanego kodu.
MasterAM
Co to znaczy setValue: @ "application / x-www-form-urlencoded" oznacza, czy to jest coś niestandardowego?
Dilara Albayrak
W przypadku ograniczonej obsługi POST w oprogramowaniu klienta HTTP, gdzie nie można przesłać czystych danych w treści wiadomości HTTP, RESTfm jest w stanie obsłużyć dane zakodowane w formatach application / x-www-form-urlencoded lub multipart / form-data . Uwaga: formaty application / x-www-form-urlencoded i multipart / form-data mają zastosowanie tylko do metody POST HTTP Uwaga 2: ten format wykorzystuje ten sam schemat „kodowania adresu URL”, który jest wymagany dla parametrów ciągu zapytania GET, jak opisano tutaj . Zalety Obsługa większego rozmiaru danych niż jest to możliwe przy użyciu ciągu zapytania GET.
Ram S
Skorzystaj z tego linku, aby uzyskać więcej szczegółów restfm.com/restfm-manual/web-api-reference-documentation/ ...
Ram S
2

Wiem, że jest późno, ale może pomóc innym, dla 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
źródło
0

Możesz dodać wartość NSMutableURLRequestdla HeaderField:

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

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

To działa dla mnie.

Saroj Kumar ojha
źródło
0

Przykładowy kod

 - (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
źródło