2011-03-21 4 views
2

Hee,problème NSURLRequest

j'ai eu un problème avec mon NSURLRequest HTTP POST et je ne peux pas savoir ce qui va mal.

Ceci est mon côté serveur php:

<html> 
<head> 
</head> 
<body> 
    <?php 
     if (! isset($_POST['sometext'])) { 
      echo "NOT SET"; 
     } else { 
      echo $_POST['sometext']; 
     } 
    ?> 
</body></html> 

Ceci est mon objectif Code c pour afficher les données:

NSString *urlString = @"http://localhost:8888/postpage"; 
NSURL *url = [[NSURL alloc] initWithString:urlString]; 
NSMutableURLRequest *urlRequest=[NSMutableURLRequest requestWithURL:url]; 

[url release]; 


    [urlRequest setHTTPMethod:@"POST"]; 
    [urlRequest addValue: msgLength forHTTPHeaderField:@"Content-Length"]; 
    [urlRequest setValue:@"application/x-www-form-urlencoded" forHTTPHeaderField:@"content-type"]; 
    NSString *postString = @"sometext=Hello&language=en"; 
    NSString *msgLength = [NSString stringWithFormat:@"%d", [postString length]]; 
    [urlRequest setHTTPBody:[postString dataUsingEncoding:NSUTF8StringEncoding]]; 


NSString *returnString = [[NSString alloc] initWithData:[NSURLConnection sendSynchronousRequest:urlRequest returningResponse:nil error:nil] encoding:NSUTF8StringEncoding]; 
NSLog(@"%@",returnString); 

Le résultat du NSLog est:

<html> 
    <head> 
    </head> 
    <body> 
     NOT SET 
    </body> 
</html> 

Merci déjà

+0

Où êtes-vous ajouter votre longueur de contenu et type de contenu? Le serveur vérifie-t-il ces champs? Je peux ajouter une réponse en fonction de votre réponse. –

+0

Voir ma modification. Mais cela ne fonctionne toujours pas. –

+0

Êtes-vous sûr du style d'encodage que vous utilisez? Aussi ne devrait-il pas être urlRequest et ne pas demander? Aussi, vous devez l'ajouter avant de définir le corps http. Pouvez-vous poster le code que vous utilisez actuellement? –

Répondre

4

Je suis tombé sur le même problème quelques fois, et la solution a consisté à ajouter à la demande:

[urlRequest setValue:@"application/x-www-form-urlencoded" forHTTPHeaderField:@"content-type"]; 
0

Je suggère que vous pouvez essayer ASIHTTPRequest Library que non seulement peut gérer la demande http facile, comme votre problème il suffit d'utiliser ASIFormDataRequest, mais également facile à poignée asynchrone.

+0

Comment sont les droits d'auteur sur cette bibliothèque? Est-ce gratuit? –

+0

Oui. C'est une licence BSD –

+1

BSD sous licence, libre d'utilisation, non invasive, donc peut être utilisé dans des projets commerciaux sans abandonner les droits sur le code source. – MCannon

2

Une source possible du problème est peut-être le fait que dans le code que vous définissez l'Content-Length tête avant d'attribuer la valeur à la variable msgLength. Parce que les méthodes ob Obj-C sur le rendement objet néant néant (néant et est 0), vous définissez le contenu à 0. Durée Essayez de déplacer la ligne

NSString *msgLength = [NSString stringWithFormat:@"%d", [postString length]]; 

avant

[urlRequest addValue: msgLength forHTTPHeaderField:@"Content-Length"];