2011-12-13 17 views
6

¿Cómo puedo hacer una solicitud que no contiene campos de encabezados? Las solicitudes se envían desde cero a mi propia implementación del servidor, que no se preocupa por los campos del encabezado. La solicitud contendrá, como máximo, solo un cuerpo de publicación. Avísame si me falta algo lógico.Cómo eliminar encabezados en NSMutableURLRequest?

Por favor, no me digas acerca de ASIHTTPRequest. Gracias.

+0

¿Alguna vez ha encontrado una respuesta a esto? Estoy tratando de eliminar todos los encabezados y las respuestas aquí no parecen funcionar hoy. – Jan

Respuesta

1
  1. ¿Por qué no simplemente ignorarlos, si controla la implementación del servidor?

  2. ¿Funciona [request setAllHTTPHeaderFields:[NSDictionary dictionary]]?

  3. Si # 2 no funciona, intente hacer su propia subclase que siempre devuelve un diccionario vacío a partir del método allHTTPHeaderFields, y nil del método valueForHTTPHeaderField:. Pero NSURLConnection podría hacer una copia de su solicitud, por lo que es posible que también deba sobrescribir copyWithZone:.

+0

# 1 Cada byte guardado importa para esta implementación. –

+0

# 2 no funcionará porque no anula el diccionario interno. Solo está anulando las teclas, si hay alguna. Veré las subclases y te haré saber si eso ayuda. –

9

Como quería quitar la cabecera específica en un NSMutableURLRequest, sólo he encontrado que setValue llamando: forHTTPHeaderField: con un valor nulo en realidad lo elimina.

No está documentado por Apple, pero parece bastante lógico.

+4

Solo para aquellos que encontraron esta página en google: ya no funciona (estoy usando 10.8 sdk). Si lo configura en cero, User-Agent no se cambiará en absoluto. – wecing

+0

Funciona para mí en iOS 6.1 SDK con un encabezado personalizado (no probé User-Agent). –

0

He encontrado que para algunos de los campos de cabecera ("User-Agent" es uno de ellos), estableciendo el valor de la cabecera a cero usando

[request addValue:nil forHTTPHeaderField:@"User-Agent"]; 

no elimina realmente el campo de cabecera, sino lo establece en un valor predeterminado!

Si desea eliminar realmente el contenido, que es el ajuste suficientemente el valor a una cadena vacía con

[request addValue:@"" forHTTPHeaderField:@"User-Agent"]; 
1

Para mí el código

[request addValue:@"" forHTTPHeaderField:@"User-Agent"]; 

sólo se añade una cadena vacía en lugar de la limpieza el User-Agent. En su lugar, al usar setValue lo corrigió:

[request setValue:@"" forHTTPHeaderField:@"User-Agent"]; 
+0

Solo una nota de que esta es la respuesta correcta. addValue agregará el nuevo valor al valor anterior, delimitado por comas. setValue reemplazará el valor anterior. –

Cuestiones relacionadas