2013-03-13 4 views
2

J'ai une URL Webservices qui ajoute un code d'accès. J'ai besoin de poster un code d'accès à une url webservices et d'obtenir une réponse json. J'obtiens la réponse de json avec le code d'accès correct et avec le code d'accès incorrect aussi. Je ne comprends pas où le problème se pose. Je dois montrer alerte quand mauvais mot de passe entre, voici mon code ..Obtenir le mot de passe de l'URLservices web et accéder à travers ce mot de passe

NSString *post =[[NSString alloc] initWithFormat:@"txtsecurecode=%@",[txtsecurecode text]]; 
     NSLog(@"PostData: %@",post); 
     NSData *postData = [post dataUsingEncoding:NSASCIIStringEncoding allowLossyConversion:YES]; 
     NSString *postLength = [NSString stringWithFormat:@"%d",[postData length]]; 
     NSMutableURLRequest *request = [[[NSMutableURLRequest alloc] init] autorelease]; 

     [request setURL:[NSURL URLWithString:[NSString stringWithFormat:@"http://my example.com/Accountservice/Security/ValidateAccess?accesscode=abcdtype=1"]]]; 

     NSURL *url; 

    // I need to parse it into url here . 

     [request setHTTPMethod:@"POST"]; 
     [request setValue:postLength forHTTPHeaderField:@"Content-Length"]; 
     [request setValue:@"application/x-www-form-urlencoded" forHTTPHeaderField:@"Content-Type"]; 
     [request setHTTPBody:postData]; 
     NSURLConnection *conn= [[NSURLConnection alloc] initWithRequest:request delegate:self]; 
     if(conn) 
     { 
      NSLog(@"Connection Successful"); 
     } 
     else 
     { 
      NSLog(@"Connection could not be made"); 
     } 

    NSString *responseData = [[NSString alloc]initWithData:[NSData dataWithContentsOfURL:url] encoding:NSUTF8StringEncoding]; 

Si je donne le mot de passe mal, je reçois échec de la connexion, thats bien. quand je corrige le mot de passe, il ne montre pas le contenu de cette URL. nous devons analyser la requête en URL. Pouvez-vous me aider comment résoudre le problème ...

Répondre

10

Dans votre cas

NSURL *url=[NSURL URLWithString:[NSString stringWithFormat:@"http://my example.com/Accountservice/Security/ValidateAccess?accesscode=abcd&type=1"]]; 

Vous ne pouvez pas passer paramètre avec la méthode URL in POST tels que,
....?accesscode=abcd&type=1"

Vous pouvez utilisez l'extrait de code suivant, comme décrit in this article:

Ici, je décris simplement comment utiliser la méthode POST.

1. Définissez la chaîne de message avec le nom d'utilisateur et le mot de passe réels.

NSString *post = [NSString stringWithFormat:@"&Username=%@&Password=%@",@"username",@"password"]; 

2. Encode la chaîne de poste en utilisant NSASCIIStringEncoding et aussi la chaîne de poste vous devez envoyer au format NSData.

NSData *postData = [post dataUsingEncoding:NSASCIIStringEncoding allowLossyConversion:YES]; 

Vous devez envoyer la longueur réelle de vos données. Calculer la longueur de la chaîne de poste.

NSString *postLength = [NSString stringWithFormat:@"%d",[postData length]]; 

3. Créer une urlRequest avec toutes les propriétés comme méthode HTTP, le champ d'en-tête http avec la longueur de la chaîne de poste. Créez URLRequest objet et initialisez-le.

NSMutableURLRequest *request = [[[NSMutableURLRequest alloc] init] autorelease]; 

Définissez l'URL pour laquelle vous allez envoyer les données à cette requête.

[request setURL:[NSURL URLWithString:[NSString stringWithFormat:@"http://www.abcde.com/xyz/login.aspx"]]]; 

Maintenant, définissez méthode HTTP (POST ou GET). Écrivez ces lignes comme c'est dans votre code.

[request setHTTPMethod:@"POST"]; 

Définir le champ d'en-tête HTTP avec la longueur des données de publication.

[request setValue:postLength forHTTPHeaderField:@"Content-Length"]; 

Définissez également la valeur codée pour l'en-tête HTTP Champ.

[request setValue:@"application/x-www-form-urlencoded" forHTTPHeaderField:@"Current-Type"]; 

Réglez le HTTPBody du URLRequest avec postData.

[request setHTTPBody:postData]; 

4. Maintenant, créer un objet URLConnection. Initialisez-le avec l'URLRequête.

NSURLConnection *conn = [[NSURLConnection alloc]initWithRequest:request delegate:self]; 

Il retourne la connexion URL initialisées et commence à charger les données pour la demande d'URL. Vous pouvez vérifier que si vous URL connexion est fait correctement ou non en utilisant simplement if/else déclaration comme ci-dessous.

if(conn) 
{ 
NSLog(@”Connection Successful”) 
} 
else 
{ 
NSLog(@”Connection could not be made”); 
} 

5. Pour recevoir les données de la requête HTTP, vous pouvez utiliser les méthodes de délégué fournies par la classe URLConnection de référence. Les méthodes des délégués sont les suivantes.

- (void)connection:(NSURLConnection *)connection didReceiveData:(NSData*)data 

Au-dessus de la méthode utilisée pour recevoir les données que nous obtenons en utilisant la méthode de post .

- (void)connection:(NSURLConnection *)connection didFailWithError:(NSError *)error 

Cette méthode, vous pouvez utiliser pour recevoir le rapport d'erreur en cas de connexion ne se fait pas au serveur.

- (void)connectionDidFinishLoading:(NSURLConnection *)connection 

Le procédé ci-dessus est utilisé pour traiter les données après la connexion a fait avec succès.

reférer aussiThisetThisdocumentation pour la méthode POST.

Et est le meilleur exemple ici avec le code source de HTTPPost Method.

+0

@patel, je mis à jour mon code comme vous le suggérez, je reste mon application pour l'enregistrement de WRNG mot de passe. Pour mettre en place l'URL, je n'ai pas utilisé comme vous l'avez dit, parce que je reçois une nouvelle url comme réponse JSON. J'ai mis à jour ma question avec votre code. vous pouvez voir la dernière déclaration dans mon code, comment j'ai utilisé l'URL. En attente de réponse. –

+0

...? Accesscode = abcdtype = 1 vous ne pouvez pas le transmettre dans la méthode Post check in line que j'ai mis dans ma réponse. – iPatel

Questions connexes