12
votes

Nsurlrequest ne peut pas gérer le corps HTTP lorsque la méthode n'est pas post?

Chaque fois que je fixe un corps sur une requête mutable avec la méthode définie sur autre chose que la poste, le corps n'est pas inclus dans la demande et je reçois une erreur KCFERRORDOMAINCFNETWORK 303 (KCFERRORHTTPSPARSEFAILURE) lorsque le serveur répond. Changer la méthode à la poste est tout ce qu'il faut pour la demande de passer sans erreur. Y a-t-il un moyen de fixer un corps à d'autres méthodes ou sommes-nous bloqués avec la poste pour tout?

Ceci est le code de soumission: P>

NSMutableURLRequest *req = [NSMutableURLRequest requestWithURL:[NSURL URLWithString:assembleURL]];// cachePolicy:NSURLRequestReloadIgnoringLocalAndRemoteCacheData timeoutInterval:45.0];

#if (SERVER_TARGET_ARGS_ALLOWED==1)
[req setValue:@"application/json" forHTTPHeaderField:@"Content-Type"];
[req setValue:@"application/json" forHTTPHeaderField:@"Accept"];

[req setHTTPMethod:ServerMessageMethods[operation]];    //value is @"POST" or other method name

#endif  

//run the payload into a JSON
SBJsonWriter *json = [[SBJsonWriter alloc] init];
NSString *encodedPayload = [json stringWithObject:payload];
encodedPayload = [NSString stringWithFormat:@"%@", [encodedPayload stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding]];
NSData *dataPayload = [encodedPayload dataUsingEncoding:NSUTF8StringEncoding];
[req setHTTPBody:dataPayload];

NSURLConnection *conn = [NSURLConnection connectionWithRequest:req delegate:self];


1 commentaires

Oui, j'ai eu un problème avec la longueur du contenu, en ce qui concerne les PDF, mais je pensais que je partagerais. ssbits.wordpress.com/tag/kcferrordomaincfNetwork


3 Réponses :


0
votes

Vous souvenez-vous de définir le longueur de contenu / et type de contenu en-têtes? Je ne pense pas que la longueur de contenu est mis en automatiquement pour vous, ce qui signifie que le serveur va supposer qu'il est 0.

Plus d'infos: http://www.w3.org/protocols/ RFC2616 / RFC2616-SEC9.HTML


3 commentaires

Vous vous demandez simplement comment cela expliquerait-il fonctionner pour la poste mais pas pour d'autres opérations? Vous pensez peut-être qu'il devient fixé pour une opération et non l'autre?


@christophercotton, il pourrait être réglé automatiquement, mais je ne sais pas; Cependant, un indéfini longueur de contenu pourrait expliquer pourquoi le serveur ne lit jamais le corps de la demande.


La longueur de contenu n'est pas nécessaire si vous utilisez le codage chunée HTTP / 1.1. NsurlConnection devrait gérer toute cette manière transparente pour vous.



14
votes

J'ai essayé de trouver des informations plus récentes à ce sujet, mais il y avait un ancien poste sur le problème exact dont vous parliez: http://lists.apple.com/archives/cocoa-dev/2004/may/msg01847.html

Fondamentalement, ils mentionnent que c'est un bug dans le code. Malheureusement, je souhaitais trouver quelque chose de plus récent qui le confirme.

Le code que j'ai utilisé est ASIHTTPQUEST et il peut définitivement faire des demandes, car ils utilisent un ensemble de code de niveau inférieur pour créer les messages HTTP et ne s'appuie pas sur le NSMUTABLEURLREQUEST .

En outre, j'ai trouvé un autre blog post parle de la question et de ce que vous devez mettre pour une demande de vente. http://iphonedevelopment.blogspot.com/2008/06/http -put-and-nsmutableurlrequest.html

Blog post:

Lorsque vous utilisez NSMUTABLEURLREQUEST pour effectuer une demande de vente HTTP, ajoutez la ligne de code suivante (REQ est le NSMUTABLEURLREQUEST): xxx

C'est tout ce qu'il y a. Si vous ajoutez cette ligne de code, vos demandes de vente fonctionnent tout simplement bien.


1 commentaires

Existe toujours en 2016



-1
votes

ici c'est xxx

}


1 commentaires

Je ne comprends pas, comment est-ce censé résoudre le problème?