NSURLRequest definindo o cabeçalho HTTP

86

Preciso definir o cabeçalho HTTP para uma solicitação. Na documentação da classe NSURLRequest não encontrei nada sobre o cabeçalho HTTP. Como posso definir o cabeçalho HTTP para conter dados personalizados?

Rafael
fonte

Respostas:

182

Você precisa usar um NSMutableURLRequest

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

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

ou para adicionar um cabeçalho:

[request addValue:VALUE forHTTPHeaderField:@"Field You Want To Set"];
Larry Hipp
fonte
1
É mesmo o que eu procurava!! Thumbs Up para você !!
Apple_iOS0304
1
Existe alguma API para adicionar dicionário de cabeçalhos?
Paul Brewczynski
1
Excelente resposta! Eu queria salientar que a resposta do RamS tem uma boa documentação.
fskirschbaum
@larry, você também pode responder a isso: stackoverflow.com/questions/40342728/…
Chaudhry Talha
11

para 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
fonte
Estou usando um tipo de código semelhante para fazer uma solicitação, mas está retornando dados nulos . Tentei descobrir o que está errado e a única coisa que consegui descobrir foi que o valor de resposta voltando tem um valor diferente para "Content-Type", em oposição ao que estou tentando acrescentar no início do código. request.setValue("Some value", forHTTPHeaderField: "Content-Type")isso está funcionando para você?
Sashi de
tente este cabeçalho request.addValue ("text / html", forHTTPHeaderField: "Content-Type")
Beslan Tularov
Eu tentei isso também, mas não funcionou. Finalmente, usar myParameters.dataUsingEncoding funcionou para mim, eu estava usando outra coisa que é a razão pela qual acho que não estava funcionando. Obrigado pela ajuda.
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
fonte
2
Você provavelmente deve adicionar alguma explicação para o código que postou.
MasterAM
O que setValue: @ "application / x-www-form-urlencoded" significa, é sth customizado?
Dilara Albayrak
No caso de suporte limitado para POST no software cliente HTTP em que dados puros não podem ser enviados no corpo da mensagem HTTP, RESTfm é capaz de lidar com dados codificados nos formatos application / x-www-form-urlencoded ou multipart / form-data . Nota: Os formatos application / x-www-form-urlencoded e multipart / form-data são aplicáveis ​​apenas ao método HTTP POST. Nota 2: Este formato usa o mesmo esquema de 'codificação de URL' exigido para parâmetros de string de consulta GET conforme descrito aqui . Vantagens Suporte para tamanho de dados maior do que o possível usando uma string de consulta GET.
Ram S
Consulte este link para obter mais detalhes restfm.com/restfm-manual/web-api-reference-documentation/…
Ram S
2

Eu sei que é tarde, mas posso ajudar outros, Para 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
fonte
0

Você pode agregar valor NSMutableURLRequestao HeaderField:

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

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

Isso está funcionando para mim.

Saroj Kumar ojha
fonte
0

Código de amostra

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