2011-01-26 12 views
81

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?NSURLRequest configurar el encabezado HTTP

Respuesta

169

Es necesario utilizar un 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! ¡De acuerdo! –

+1

¿Hay alguna API para agregar diccionario de encabezados? –

+1

¡Excelente respuesta! Quería señalar que la [respuesta] de RamS (http://stackoverflow.com/a/20760445/1778488) tiene buena documentación. – fskirschbaum

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 deba agregar alguna explicación para el código que ha publicado. – MasterAM

+0

¿Qué significa setValue: @ "application/x-www-form-urlencoded"? ¿Es así de personalizado? –

+0

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 application/x-www-form-urlencoded o multipart/form-data formatos. Nota: Los formatos application/x-www-form-urlencoded y multipart/form-data solo son aplicables al método HTTP POST Nota 2: Este formato utiliza el mismo esquema 'URL encoding' requerido para GET query string parámetros como se describe aquí. Ventajas Soporte para un tamaño de datos mayor que el que es posible usando una cadena de consulta GET. –

0

Puede agregar valor en NSMutableURLRequest para campo_cabecera:

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

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

Esto está funcionando para mí.

10

de 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") 
+0

Estoy usando un tipo similar de código para hacer una solicitud, pero está devolviendo ** datos ** nulos. Intenté lo que está mal y lo único que pude descubrir fue que el valor de respuesta que vuelve tiene un valor diferente para "Tipo de contenido" en contraposición a lo que intento agregar al principio del código. 'request.setValue (" Some value ", forHTTPHeaderField:" Content-Type ")' ¿Esto funciona para usted? – Sashi

+0

intente este encabezado request.addValue ("text/html", forHTTPHeaderField: "Content-Type") –

+0

Lo intenté también, pero no funcionó. Finalmente, al usar myParameters.dataUsingEncoding funcionó para mí, estaba usando otra cosa, esa es la razón por la que creo que no funcionaba. Gracias por la ayuda. – Sashi

0

Código de ejemplo

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


     } 
    }]; 

} 
1

Sé que es tarde, pero puede ayudar a los demás, 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) 
Cuestiones relacionadas