Ich muss eine Initiale GET HTTP request
mit Basic aufrufen Authentication
. Dies wäre das erste Mal, dass die Anfrage an den Server gesendet wird, und ich habe bereits die, username & password
sodass keine Anforderung vom Server zur Autorisierung erforderlich ist.
Erste Frage:
Muss
NSURLConnection
für die Basisauthentifizierung synchron eingestellt werden? Laut der Antwort in diesem Beitrag können Sie Basic Auth anscheinend nicht ausführen, wenn Sie sich für die asynchrone Route entscheiden.Kennt jemand einen Beispielcode, der Basic Auth auf einem illustriert,
GET request
ohne dass eine Challenge-Antwort erforderlich ist? Die Dokumentation von Apple zeigt ein Beispiel, jedoch erst, nachdem der Server die Challenge-Anfrage an den Client gesendet hat.
Ich bin ein bisschen neu im Netzwerkbereich des SDK und ich bin mir nicht sicher, welche der anderen Klassen ich verwenden soll, um dies zum Laufen zu bringen. (Ich sehe die NSURLCredential
Klasse, aber es scheint, dass sie nur verwendet wird, NSURLAuthenticationChallenge
nachdem der Client eine autorisierte Ressource vom Server angefordert hat.)
quelle
[authData base64EncodedString]
Fügen Sie für base64-encoding ( ) die Dateien NSData + Base64.h und .m von Matt Gallagher zu Ihrem XCode-Projekt hinzu ( Base64-Codierungsoptionen auf Mac und iPhone ).base64Encoding
ist seit iOS 7.0 und OS X 10.9 veraltet. Ich benutze[authData base64EncodedStringWithOptions:NSDataBase64EncodingEndLineWithLineFeed]
stattdessen. Ebenfalls erhältlich sind `NSDataBase64Encoding64CharacterLineLength` oderNSDataBase64Encoding76CharacterLineLength
Auch wenn die Frage beantwortet ist, möchte ich die Lösung vorstellen, für die keine externen Bibliotheken erforderlich sind, die ich in einem anderen Thread gefunden habe:
quelle
Hier ist eine detaillierte Antwort ohne Beteiligung eines Dritten:
Bitte überprüfen Sie hier:
Bitte teilen Sie mir Ihr Feedback dazu mit.
Vielen Dank
quelle
- (NSString *)base64Encoding NS_DEPRECATED(10_6, 10_9, 4_0, 7_0);
Verwenden Sie stattdessen besser die Kategorie NSDataBase64Encoding.Wenn Sie nicht die gesamte MGTwitterEngine importieren möchten und keine asynchrone Anforderung ausführen, können Sie http://www.chrisumbel.com/article/basic_authentication_iphone_cocoa_touch verwenden
Um base64 den Benutzernamen und das Passwort zu kodieren, ersetzen Sie diese
mit
nach dem
Sie müssen die folgende Datei einschließen
quelle
Da NSData :: dataUsingEncoding veraltet ist (ios 7.0), können Sie diese Lösung verwenden:
quelle
Wenn Sie GTMHTTPFetcher für Ihre Verbindung verwenden, ist die grundlegende Authentifizierung ebenfalls recht einfach. Sie müssen lediglich den Berechtigungsnachweis für den Abruf bereitstellen, bevor Sie mit dem Abrufen beginnen.
quelle
Es ist nicht auf 80 beschränkt, sondern eine Option der Methode base64EncodingWithLineLength in NSData + Base64.h / m, mit der Sie Ihre codierte Zeichenfolge in mehrere Zeilen aufteilen können, was für andere Anwendungen, z. B. die nntp-Übertragung, nützlich ist. Ich glaube, 80 wird vom Autor der Twitter-Engine als eine Länge ausgewählt, die groß genug ist, um die meisten benutzer- / passwortcodierten Ergebnisse in einer Zeile unterzubringen.
quelle
Sie können AFNetworking verwenden (es ist OpenSource). Hier ist Code, der für mich funktioniert hat. Dieser Code sendet eine Datei mit Basisauthentifizierung. Ändern Sie einfach URL, E-Mail und Passwort.
quelle