NSURLRequest HTTP başlığını ayarlıyor


87

Bir istek için HTTP başlığını ayarlamam gerekiyor. NSURLRequest sınıfının belgelerinde, HTTP başlığıyla ilgili hiçbir şey bulamadım. HTTP başlığını özel verileri içerecek şekilde nasıl ayarlayabilirim?

Yanıtlar:


183

NSMutableURLRequest kullanmanız gerekir

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

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

veya bir başlık eklemek için:

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

1
Tam da aradığım şey!! Yaşasın sana!
Apple_iOS0304

1
Başlık sözlüğü eklemek için herhangi bir API var mı?
Paul Brewczynski

1
Mükemmel cevap! RamS'nin cevabının güzel belgelere sahip olduğunu belirtmek istedim .
fskirschbaum

@larry buna da cevap verebilir misin: stackoverflow.com/questions/40342728/…
Chaudhry Talha

11

Swift için

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

Bir istekte bulunmak için benzer türde bir kod kullanıyorum, ancak sıfır veri döndürüyor . Neyin yanlış olduğunu denedim ve bulabildiğim tek şey, geri gelen yanıt değerinin kodun başına eklemeye çalıştığımdan farklı olarak "İçerik Türü" için farklı bir değere sahip olmasıydı. request.setValue("Some value", forHTTPHeaderField: "Content-Type")bu senin için çalışıyor mu
Sashi

bu başlığı deneyin request.addValue ("text / html", forHTTPHeaderField: "Content-Type")
Beslan Tularov

Ben de denedim ama işe yaramadı. Sonunda myParameters.dataUsingEncoding'i kullanmak benim için çalıştı, başka bir şey kullanıyordum, bu yüzden çalışmadığını düşünüyorum. Yardım için teşekkürler.
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
Muhtemelen gönderdiğiniz kod için bazı açıklamalar eklemelisiniz.
MasterAM

SetValue: @ "application / x-www-form-urlencoded" ne anlama geliyor, bu özel mi?
Dilara Albayrak

Salt verilerin HTTP mesaj gövdesine gönderilemediği HTTP istemci yazılımında sınırlı POST desteği olması durumunda, RESTfm application / x-www-form-urlencoded veya multipart / form-data formatlarında kodlanmış verileri işleyebilir. . Not: application / x-www-form-urlencoded ve multipart / form-data biçimleri yalnızca HTTP POST yöntemi için geçerlidir Not 2: Bu biçim, burada açıklandığı gibi GET sorgu dizesi parametreleri için gereken aynı 'URL kodlama' şemasını kullanır . Avantajlar GET sorgu dizesi kullanılarak mümkün olandan daha büyük veri boyutu desteği.
Ram S

Daha fazla ayrıntı için bu bağlantıya bakın restfm.com/restfm-manual/web-api-reference-documentation/…
Ram S

2

Geç olduğunu biliyorum ama başkalarına yardımcı olabilir, SWIFT 3.0 için

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

NSMutableURLRequestHeaderField için değer ekleyebilirsiniz :

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

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

Bu benim için çalışıyor.


0

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


         }
     }];

}
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.