NSURLRequest设置HTTP标头


86

我需要为请求设置HTTP标头。在NSURLRequest类的文档中,我没有找到有关HTTP标头的任何信息。如何设置HTTP标头以包含自定义数据?

Answers:


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 2014年

1
很好的答案!我想指出,RamS的答案有不错的文档。
fskirschbaum 2014年

:@larry你能回答这个问题太stackoverflow.com/questions/40342728/...
乔杜里塔尔哈

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

我正在使用类似的代码来发出请求,但它返回的是nil数据。我试图找出问题所在,唯一能想到的是返回的响应值对“ Content-Type”具有不同的值,而不是我尝试在代码开头附加的值。request.setValue("Some value", forHTTPHeaderField: "Content-Type")这对你有用吗?
Sashi 2015年

尝试使用此标头request.addValue(“ text / html”,forHTTPHeaderField:“ Content-Type”)
Beslan Tularov,2015年

我也尝试过,但是没有用。最终使用myParameters.dataUsingEncoding对我有用,我使用了其他东西,这就是我认为它不起作用的原因。谢谢您的帮助。
Sashi 2015年

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 2013年

setValue:@“ application / x-www-form-urlencoded”是什么意思,这是自定义吗?
Dilara Albayrak

如果HTTP客户端软件对POST的支持有限,而纯数据无法在HTTP消息正文中提交,则RESTfm可以处理以application / x-www-form-urlencoded或multipart / form-data格式编码的数据。注意:application / x-www-form-urlencoded和multipart / form-data格式仅适用于HTTP POST方法。注2:如此处所述,此格式使用与GET查询字符串参数相同的“ URL编码”方案。 。优点支持比使用GET查询字符串更大的数据大小。
拉姆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;


         }
     }];

}
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.