NSURLRequest configurando el encabezado HTTP


86

Necesito configurar el encabezado HTTP para una solicitud. En la documentación de la clase NSURLRequest no encontré nada con respecto al encabezado HTTP. ¿Cómo puedo configurar el encabezado HTTP para que contenga datos personalizados?

Respuestas:


182

Necesita usar una NSMutableURLRequest

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

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

o para agregar un encabezado:

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

1
¡¡Justo lo que estaba buscando!! ¡¡Pulgares para ti !!
Apple_iOS0304

1
¿Existe alguna API para agregar diccionario de encabezados?
Paul Brewczynski

1
¡Excelente respuesta! Quería señalar que la respuesta de RamS tiene una buena documentación.
fskirschbaum

@larry, ¿puedes responder a esto también ?: 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")

Estoy usando el mismo tipo de código para hacer una solicitud, pero está volviendo nil datos. Intenté lo que estaba mal y lo único que pude encontrar fue que el valor de respuesta que regresa tiene un valor diferente para "Content-Type" en comparación con lo que estoy tratando de agregar al principio del código. request.setValue("Some value", forHTTPHeaderField: "Content-Type")¿Esto está funcionando para ti?
Sashi

pruebe este encabezado request.addValue ("text / html", forHTTPHeaderField: "Content-Type")
Beslan Tularov

Lo intenté también, pero no funcionó. Finalmente, el uso de myParameters.dataUsingEncoding funcionó para mí, estaba usando algo más, esa es la razón por la que creo que no estaba funcionando. Gracias por la ayuda.
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
Probablemente debería agregar alguna explicación para el código que ha publicado.
MasterAM

¿Qué significa setValue: @ "application / x-www-form-urlencoded", es algo personalizado?
Dilara Albayrak

En el caso de soporte limitado para POST en el software de cliente HTTP donde no se pueden enviar datos puros en el cuerpo del mensaje HTTP, RESTfm puede manejar datos codificados en formatos application / x-www-form-urlencoded o multipart / form-data . Nota: Los formatos application / x-www-form-urlencoded y multipart / form-data solo son aplicables al método HTTP POST Nota 2: Este formato usa el mismo esquema de 'codificación de URL' que se requiere para los parámetros de cadena de consulta GET como se describe aquí . Ventajas Soporte para un tamaño de datos mayor al que es posible usando una cadena de consulta GET.
Ram S

Consulte este enlace para obtener más detalles restfm.com/restfm-manual/web-api-reference-documentation/…
Ram S

2

Sé que es tarde, pero puedo ayudar a otros, 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)

0

Puede agregar valor NSMutableURLRequestpara HeaderField:

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

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

Esto es trabajo para mí.


0

Código de muestra

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


         }
     }];

}
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.