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/…
Чаудхри Талха
11

для 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")
Беслан Туларов
источник
Я использую аналогичный код для запроса, но он возвращает нулевые данные. Я пытался понять, что не так, и единственное, что я мог придумать, это возвращаемое значение ответа, которое имеет другое значение для Content-Type, чем то, что я пытаюсь добавить в начало кода. request.setValue("Some value", forHTTPHeaderField: "Content-Type")это работает для вас?
Sashi
попробуйте этот заголовок 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];
Ram S
источник
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.
Ram S
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;


         }
     }];

}
Биной ​​Хосе
источник