2015-07-23 15 views
10

Invio lo stesso messaggio HTTP da un client proxy HTTP e con NSURLRequest + NSURLConnection e restituisco risultati diversi. È una richiesta di autenticazione. Dalla richiesta di autenticazione proxy HTTP è accettata, inviando dall'app non. Perché? Mezzi accettati dopo il reindirizzamento HTML non conterrà la sottostringa Oops.NSURLRequest produce risultati diversi dal 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) 
} 

UPDATE

ho messo @ codice di teamnorge di seguito in un parco giochi e in un progetto di applicazione View singolo vuoto. HTML restituito nel progetto contiene la sottostringa Oops, il codice utilizzato nel parco giochi non lo contiene, nessuna idea di cosa sta succedendo, perché la stessa richiesta produce risultati HTML diversi? Ricevo il messaggio failed anche dal dispositivo iOS e dal simulatore.

UPDATE

rimosso NSURLRequest di cache come here consigliato, ma ancora non funziona come previsto. E here.

UPDATE

provato a rimuovere tutte le credenziali come here, ma non ha aiutato, è stato trovato senza credenziali.

+2

probabilmente sarei rimuovere l'indirizzo email/password dallo screenshot, se ti ho – liamnichols

+0

una potenza richiesta di autenticazione di prova, è stata apposta –

+0

grazie del vostro aiuto, problema era diverso, è stato chiamato due URL diversi :-( –

risposta

2

Sembra che quando ricevi HTTP 302 e un nuovo URL di posizione, iOS recuperi automaticamente la pagina tramite questo URL, quindi suppongo che la tua risposta sia in realtà il contenuto HTML della pagina di reindirizzamento. Si prega di verificare.

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

in parte hai ragione, iOS reindirizza automaticamente la richiesta, ma la pagina risultante non è la stessa cosa ho nel client proxy, iOS tornerà con messaggio di autenticazione fallito, proxy con messaggio di successo –

+0

ho preso il la libertà di usare le tue credenziali e pubblicare dati dal mio parco giochi, l'unica differenza è quel login web reindirizza a/challenge e i reindirizzamenti di login di ios a/user il resto sembra essere ok, vedi il mio codice nel post in alto. – teamnorge

+0

ha usato il tuo codice e ha trovato un effetto davvero strano, nel campo di gioco restituisce 'successo' ma in app restituisce' fallito', qualche idea del perché? –

Problemi correlati