ios - Envío de solicitudes HTTP 1.1 fragmentadas en Objective-C
soap nsurlconnection (1)
Lo averigué:
NSInputStream *dataStream = [NSInputStream inputStreamWithData:[soapBody dataUsingEncoding:NSUTF8StringEncoding]];
[request setHTTPBodyStream:dataStream];
¡Esto hace que la solicitud esté automáticamente en fragmentos de HTP 1.1!
Tengo el siguiente problema: estoy creando una solicitud SOAP muy grande (los datos son un video codificado como cadena Base64) y debido a eso no puedo enviarla como una solicitud SOAP sin formato, sino que más bien tengo que enviarla en fragmentos HTTP 1.1. Parece que no puedo entender cómo hacerlo. Usé el código aquí: ¿Cuáles son las alternativas a NSURLConnection para la codificación de transferencia fragmentada pero no parece estar haciendo lo que creo que debería hacer? Veo que la solicitud llega al servidor como una sola solicitud en lugar de muchos fragmentos ( Estoy usando WireShark en el servidor para ver el tráfico entrante.)
Sé que una funcionalidad similar en un Android funciona utilizando las bibliotecas HTTP de Apache Foundations para Java, con esto, cualquier solicitud HTTP cuya longitud no se especifique con antelación se transmite como una solicitud fragmentada HTTP 1.1 y puedo ver que esas solicitudes llegan al servidor como trozos individuales ... Quiero emular eso.
(ACTUALIZACIÓN: me parece que AFNetworking podría tener la funcionalidad, pero no encuentro ningún ejemplo sobre cómo usarla).
Aquí está mi código, más o menos:
NSString *soapBody = ....; //some correctly formed SOAP request XML here
NSURL *url = [NSURL URLWithString:...];
NSMutableURLRequest* request = [NSMutableURLRequest requestWithURL:url];
[request addValue: ... forHTTPHeaderField:@"SOAPAction"];
[request setHTTPMethod:@"POST"];
[request addValue:@"text/xml" forHTTPHeaderField:@"Content-Type"];
[request setHTTPBody:[soapBody dataUsingEncoding:NSUTF8StringEncoding]];
ChunkedTransferConnection* connection = [ChunkedTransferConnection alloc];
[connection establishConnectionWithRequest:request];
donde la implementación de ChunkedTransferConnection es la siguiente
@implementation ChunkedTransferConnection
@synthesize p_connection;
@synthesize p_responseData;
- (void)establishConnectionWithRequest:(NSMutableURLRequest *)request
{
self.p_responseData = [[NSMutableData alloc] initWithLength:0] ;
self.p_connection = [[NSURLConnection alloc] initWithRequest:request delegate:self startImmediately:YES];
}
...
@end