2015-07-23 5 views
10

Ich sende die gleiche HTTP-Nachricht von einem HTTP-Proxy-Client und mit NSURLRequest + NSURLConnection, und erhalten unterschiedliche Ergebnisse zurück. Es ist eine Authentifizierungsanfrage. Von HTTP-Proxy-Authentifizierung Anfrage wird akzeptiert, Senden von App nicht. Warum? Akzeptiert bedeutet, dass nach der Umleitung HTML-Teil keine Oops Teilzeichenfolge enthält.NSURLRequest produzieren anderes Ergebnis als HTTP-Proxy-Client

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) 
} 

UPDATE

I @ teamnorge den Code unten in Spielplatz und in einen leeren Single View-Anwendungsprojekt gesetzt haben. Zurückgegebenes HTML im Projekt enthält die Oops Teilzeichenkette, der Code, der im Spielplatz benutzt wird, enthält es nicht, irgendeine Idee, was los ist, warum dieselbe Anfrage unterschiedliches HTML Resultat produzieren? Ich bekomme failed Nachricht auch vom iOS-Gerät und vom Simulator zu.

UPDATE

Removed NSURLRequest Cache wie here empfohlen, aber wie erwartet noch nicht funktioniert. Und here.

UPDATE

versucht, alle Berechtigungsnachweise wie here zu entfernen, aber nicht helfen, wurden keine Anmeldeinformationen gefunden.

+2

ich würde wahrscheinlich Ihre E-Mail/Passwort aus dem Screenshot entfernen, wenn ich Sie war – liamnichols

+0

eine Macht Testauthentifizierungsanforderung, es war absichtlich –

+0

dank Ihrer Hilfe Problem war anders, zwei verschiedene url hieß :-( –

Antwort

2

Es sieht so aus, als ob Sie, wenn Sie HTTP 302 und die neue Standort-URL erhalten, die Seite automatisch nach dieser URL abruft. Daher ist Ihre Antwort der HTML-Inhalt der Umleitungsseite. Bitte überprüfen.

UPDATE:

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

teilweise hast du recht, iOS leitet automatisch umleiten, aber die resultierende Seite ist nicht das gleiche, was ich in Proxy-Client, iOS wird mit fehlgeschlagener Authentifizierung Nachricht, Proxy mit Erfolg Nachricht –

+0

Ich nahm die Freiheit, Ihre Anmeldeinformationen zu verwenden und Daten von meinem Spielplatz zu veröffentlichen, der einzige Unterschied ist dass der Web-Login zu/challenge umleitet und die ios-Login-Weiterleitungen zu/user, der Rest scheint in Ordnung zu sein, siehe meinen Code im obigen Beitrag. – teamnorge

+0

verwendet Ihren Code, und fand einen wirklich seltsamen Effekt, auf Spielplatz gibt es 'Erfolg' zurück, aber in App gibt es' gescheitert' zurück, irgendeine Idee warum? –