Le code ci-dessous est utilisé dans une application iPad pour envoyer une requête HTTP à un serveur web Node.js, ce qui produit l'erreur suivante, mais fonctionne bien avec un formulaire HTML + navigateur classique.Est-ce une requête HTTP mal formée d'un iPad, qui tue l'analyseur multipartie Node.js
Le serveur est Node.js + formidable qui a un analyseur multipart qui meurt seulement this line of code cette error:
message: parser error, 0 of 29162 bytes parsed
stack: Error: parser error, 0 of 29162 bytes parsed at IncomingForm.write (/usr/local/lib/node/.npm/formidable/0.9.8/package/lib/formidable/incoming_form.js:120:17) at IncomingMessage. (/usr/local/lib/node/.npm/formidable/0.9.8/package/lib/formidable/incoming_form.js:73:12)
at IncomingMessage.emit (events:27:15) at HTTPParser.onBody (http:100:23) at Stream.ondata (http:763:22) at IOWatcher.callback (net:494:29) at node.js:768:9
Voici le code iPad:
NSMutableURLRequest * theRequest = [[NSMutableURLRequest alloc] initWithURL:url];
[theRequest setTimeoutInterval:60];
[theRequest setHTTPMethod:@"POST"];
NSString *boundary = [NSString stringWithString:@"---------------------------14737809831466499882746641449"];
NSString *contentType = [NSString stringWithFormat:@"multipart/form-data; boundary=%@",boundary];
[theRequest addValue:contentType forHTTPHeaderField: @"Content-Type"];
NSMutableData *body = [NSMutableData data];
//media
[body appendData:[[NSString stringWithFormat:@"\r\n--%@\r\n",boundary] dataUsingEncoding:NSUTF8StringEncoding]];
[body appendData:[[NSString stringWithString:@"Content-Disposition: form-data; name=\"image\"; filename=\"iosaudio.cai\"\r\n"] dataUsingEncoding:NSUTF8StringEncoding]];
[body appendData:[[NSString stringWithString:@"Content-Type: image/jpeg\r\n\r\n"] dataUsingEncoding:NSUTF8StringEncoding]];
[body appendData:[NSData dataWithData:theAudio]];
[body appendData:[[NSString stringWithFormat:@"\r\n--%@--\r\n",boundary] dataUsingEncoding:NSUTF8StringEncoding]];
// setting the body of the post to the reqeust
[theRequest setHTTPBody:body];
La demande est-être envoyé malformé? Si oui, pourquoi et comment devrait-il être fait?
Je ne sais pas si vous générez une requête malformée, mais ASIHTTPRequest (http://allseeing-i.com/ASIHTTPRequest/) rend la création de messages multi-formulaires simple et vous n'avez plus à transpirer ces types de détails. –
Il n'y a pas besoin d'utiliser 'stringWithString:' sur un littéral NSString ('@" ... "'). C'est déjà une chaîne. Je doute de votre utilisation de 'dataWithData:' aussi: avez-vous vraiment besoin de faire une copie de l'objet de données que vous avez déjà? –
@Robot K - merci qui a fait l'affaire – roder