NSURLRequest встановлення заголовка HTTP


86

Мені потрібно встановити заголовок HTTP для запиту. У документації до класу NSURLRequest я не знайшов нічого щодо заголовка HTTP. Як я можу встановити заголовок HTTP, щоб він містив власні дані?

Відповіді:


182

Вам потрібно використовувати NSMutableURLRequest

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

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

або щоб додати заголовок:

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

1
Тільки те, що я шукав !! Великі пальці до вас !!
Apple_iOS0304

1
Чи існує API для додавання словника заголовків?
Paul Brewczynski

1
Відмінна відповідь! Я хотів зазначити, що у відповіді RamS є приємна документація.
fskirschbaum

@larry ви можете відповісти і на це: stackoverflow.com/questions/40342728/…
Chaudhry Talha

11

для Свіфта

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

Я використовую подібний тип коду, щоб зробити запит, але він повертає нульові дані. Я намагався зрозуміти, що не так, і єдине, що я міг придумати, - це значення відповіді, яке повертається, має інше значення для "Content-Type" на відміну від того, що я намагаюся додати на початку коду. request.setValue("Some value", forHTTPHeaderField: "Content-Type")це працює для вас?
Саші

спробуйте цей заголовок request.addValue ("text / html", forHTTPHeaderField: "Content-Type")
Беслан Туларов,

Я теж спробував це, але це не спрацювало. Нарешті, використання myParameters.dataUsingEncoding працювало для мене, я використовував щось інше, тому я вважаю, що це не спрацювало. Дякую за допомогу.
Саші

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
Ймовірно, слід додати пояснення коду, який ви опублікували.
MasterAM

Що означає setValue: @ "application / x-www-form-urlencoded", чи є це спеціальним?
Ділара Албайрак

У випадку обмеженої підтримки POST у клієнтському програмному забезпеченні HTTP, коли чисті дані не можуть бути подані в тілі повідомлення HTTP, RESTfm може обробляти дані, закодовані у форматах application / x-www-form-urlencoded або multipart / form-data . Примітка: Формати application / x-www-form-urlencoded та multipart / form-data застосовуються лише до методу HTTP POST Примітка 2: Цей формат використовує ту саму схему "кодування URL-адреси", яка потрібна для параметрів рядка запиту GET, як описано тут . Переваги Підтримка великого обсягу даних, ніж можливий за допомогою рядка запиту GET.
Рам С

Перейдіть за цим посиланням, щоб отримати докладнішу інформацію restfm.com/restfm-manual/web-api-reference-documentation/…
Рам С

2

Я знаю, що пізно, але можу допомогти іншим, для 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

Ви можете додати значення NSMutableURLRequestдля HeaderField:

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

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

Це працює для мене.


0

Зразок коду

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


         }
     }];

}
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.