Ich habe einen RESTFull-Dienst mit Basisauthentifizierung und möchte ihn von iOS + Swift aus aufrufen. Wie und wo muss ich für diese Anfrage einen Berechtigungsnachweis bereitstellen?
Mein Code (Entschuldigung, ich fange gerade an, iOS / obj-c / swift zu lernen):
class APIProxy: NSObject {
var data: NSMutableData = NSMutableData()
func connectToWebApi() {
var urlPath = "http://xx.xx.xx.xx/BP3_0_32/ru/hs/testservis/somemethod"
NSLog("connection string \(urlPath)")
var url: NSURL = NSURL(string: urlPath)
var request = NSMutableURLRequest(URL: url)
let username = "hs"
let password = "1"
let loginString = NSString(format: "%@:%@", username, password)
let loginData: NSData = loginString.dataUsingEncoding(NSUTF8StringEncoding)
let base64LoginString = loginData.base64EncodedStringWithOptions(NSDataBase64EncodingOptions.fromMask(0))
request.setValue(base64LoginString, forHTTPHeaderField: "Authorization")
var connection: NSURLConnection = NSURLConnection(request: request, delegate: self)
connection.start()
}
//NSURLConnection delegate method
func connection(connection: NSURLConnection!, didFailWithError error: NSError!) {
println("Failed with error:\(error.localizedDescription)")
}
//NSURLConnection delegate method
func connection(didReceiveResponse: NSURLConnection!, didReceiveResponse response: NSURLResponse!) {
//New request so we need to clear the data object
self.data = NSMutableData()
}
//NSURLConnection delegate method
func connection(connection: NSURLConnection!, didReceiveData data: NSData!) {
//Append incoming data
self.data.appendData(data)
}
//NSURLConnection delegate method
func connectionDidFinishLoading(connection: NSURLConnection!) {
NSLog("connectionDidFinishLoading");
}
}}
NSURLConnection(request: request, delegate: self)
wirdstart
die Verbindung für Sie. Rufen Sie diestart
Methode nicht explizit selbst auf und starten Sie sie effektiv ein zweites Mal.Antworten:
Sie geben Anmeldeinformationen in einer
URLRequest
Instanz wie dieser in Swift 3 ein:Oder in einem
NSMutableURLRequest
in Swift 2:quelle
NSDataBase64EncodingOptions(0)
odernil
für keine Optionen verwenden. Die Antwort wurde aktualisiert.// Authentifizierungsbasis 64-Codierungszeichenfolge erstellen
// Authentifizierungs-URL erstellen
// Basisauthentifizierungsanforderung erstellen und initialisieren
// Sie können eine der folgenden Methoden verwenden
// 1 URL-Anfrage mit NSURLConnectionDataDelegate
// 2 URL-Anfrage mit AsynchronousRequest
// 2 URL-Anfrage mit AsynchronousRequest mit JSON-Ausgabe
// 3 URL-Anfrage mit SynchronousRequest
// 4 URL-Anfrage mit NSURLSession
// Möglicherweise wird ein schwerwiegender Fehler angezeigt, wenn Sie die Anforderung geändert haben. HTTPMethod = "POST", wenn die Serveranforderung die GET-Anforderung anfordert
quelle
NSURLConnection(request: request, delegate: self)
Startet die Anforderung. Sie sollten es nichtstart
ein zweites Mal.schnell 4:
quelle
In Swift 2:
quelle
Gehen Sie einfach für SWIFT 3 und APACHE simple Auth:
quelle
Ich hatte ein ähnliches Problem beim Versuch, für einige automatisierte E-Mails, die ich in einer App implementierte, einen Post an MailGun zu senden.
Ich konnte dies mit einer großen HTTP-Antwort zum Laufen bringen. Ich habe den vollständigen Pfad in Keys.plist eingefügt, damit ich meinen Code auf github hochladen und einige der Argumente in Variablen aufteilen kann, damit ich sie später programmgesteuert festlegen kann.
Der Mailgun-Pfad befindet sich in Keys.plist als Zeichenfolge mit dem Namen mailgunAPIPath mit dem Wert:
Ich hoffe, dies bietet eine Lösung für jemanden, der versucht, die Verwendung von Code von Drittanbietern für seine POST-Anfragen zu vermeiden!
quelle
Meine Lösung funktioniert wie folgt:
Sie können diese Klasse als Implementierung eines ViewControllers verwenden. Verbinden Sie Ihre Felder mit den mit IBOutlet-Anmerkungen versehenen Variablen und Ihre Schaltfläche mit der mit IBAction-Anmerkungen versehenen Funktion.
Erläuterung: In der Funktionsanmeldung erstellen Sie Ihre Anfrage mit NSURL, NSURLRequest und NSURLConnection. Wesentlich ist hier der Delegat, der auf diese Klasse (Selbst) verweist. Für den Empfang der Delegiertenanrufe müssen Sie
quelle
Ich rufe den json beim Anmelden an. Klicken Sie auf die Schaltfläche
Hier habe ich ein separates Wörterbuch für die Parameter erstellt.
quelle