2015-07-23 1 views
10

J'envoie le même message HTTP à partir d'un client proxy HTTP et avec NSURLRequest + NSURLConnection, et récupère un résultat différent. C'est une demande d'authentification. De la demande d'authentification proxy HTTP est acceptée, l'envoi de l'application non. Pourquoi? Moyens acceptés après la redirection HTML ne contiendra pas de sous-chaîne Oops.NSURLRequest produit un résultat différent du client proxy HTTP

enter image description here

let url = NSURL(string: "http://www.swisshttp.weact.ch/en/user/login") 
let request = NSMutableURLRequest(URL: url) 
request.HTTPMethod = "POST" 
request.setValue("application/x-www-form-urlencoded", forHTTPHeaderField: "Content-Type") 

let email2 = (viewController!.email.text as NSString).stringByReplacingOccurrencesOfString("@", withString: "%40") 
let str = "name=\(email2)&pass=\(viewController!.password.text)&form_id=user_login" as NSString 
let d = str.dataUsingEncoding(NSUTF8StringEncoding) 
if let d2 = d { 
    request.HTTPBody = d2 
    let urlConnection = NSURLConnection(request: request, delegate: self) 
} 

MISE À JOUR

J'ai mis @ le code ci-dessous dans teamnorge aire de jeux et dans un vide unique Voir le projet d'application. HTML retourné dans le projet contient la sous-chaîne Oops, le code utilisé dans le terrain de jeux ne le contient pas, aucune idée de ce qui se passe, pourquoi la même requête produit-elle un résultat HTML différent? Je reçois aussi le message failed de l'appareil iOS et du simulateur.

MISE À JOUR

NSURLRequest cache comme REMOVED here recommandé, mais pas encore fonctionne comme prévu. Et here.

MISE À JOUR

J'ai essayé de supprimer toutes les informations d'identification comme here, mais n'a pas aidé, a été trouvé sans diplôme.

+2

je serais probablement supprimer votre email/mot de passe de la capture d'écran si je vous avais – liamnichols

+0

on pourrait demande d'authentification de test, il était sur le but –

+0

merci de votre aide, question était différente, deux URL différente a été appelée :-( –

Répondre

2

Il semble que lorsque vous recevez HTTP 302 et une nouvelle URL de localisation, iOS récupère automatiquement la page par cette URL, donc je suppose que votre réponse est en fait le contenu HTML de la page de redirection. Veuillez vérifier.

MISE À JOUR:

import UIKit 
import XCPlayground 

let url = NSURL(string: "http://www.swisshttp.weact.ch/en/user/login") 
let request = NSMutableURLRequest(URL: url!) 
let str = "name=kukodajanos%40icloud.com&pass=jelszo&form_id=user_login" as NSString 
let d = str.dataUsingEncoding(NSUTF8StringEncoding) 
request.HTTPBody = d 
request.HTTPMethod = "POST" 
request.setValue("application/x-www-form-urlencoded", forHTTPHeaderField: "Content-Type") 

NSURLConnection.sendAsynchronousRequest(request, queue:  NSOperationQueue.currentQueue()) { response, maybeData, error in 
    if let data = maybeData { 
     let contents = NSString(data:data, encoding:NSUTF8StringEncoding) 
     println(contents) 

      if contents!.rangeOfString("Oops").length == 0 { 

       println("success") 
      } else { 
       println("failed") 
      } 
    } else { 
     println(error.localizedDescription) 
    } 
} 

XCPSetExecutionShouldContinueIndefinitely() 
+0

en partie vous avez raison, iOS redirige automatiquement la demande, mais la page résultante n'est pas la même que je reçois dans le client proxy, iOS reviendra avec un message d'authentification a échoué, proxy avec message de succès –

+0

liberté d'utiliser vos informations d'identification et d'afficher des données de mon terrain de jeu, la seule différence est que le login web redirige vers/challenge et ios login redirige vers/user le reste semble être ok, voir mon code dans le post ci-dessus. – teamnorge

+0

utilisé votre code, et a trouvé un effet vraiment étrange, dans le terrain de jeu, il renvoie 'succès', mais dans l'application, il renvoie' failed ', aucune idée pourquoi? –