Ich habe die Programmiersprache Swift von Apple in iBooks gelesen , kann aber nicht herausfinden, wie eine HTTP-Anfrage (so etwas wie cURL) in Swift gestellt wird. Muss ich Obj-C-Klassen importieren oder muss ich nur Standardbibliotheken importieren? Oder ist es nicht möglich, eine HTTP-Anfrage basierend auf nativem Swift-Code zu stellen?
ios
objective-c
swift
iphone
nsurlsession
Dicky Tsang
quelle
quelle
Antworten:
Sie können verwendet werden
URL
,URLRequest
undURLSession
oder ,NSURLConnection
wie Sie normalerweise in Objective-C tun würden. Beachten Sie, dass für iOS 7.0 und höherURLSession
bevorzugt wird.Verwenden von
URLSession
Initialisieren Sie ein
URL
Objekt und einURLSessionDataTask
vonURLSession
. Führen Sie dann die Aufgabe mit ausresume()
.Verwenden von
NSURLConnection
Initialisieren Sie zunächst a
URL
und aURLRequest
:Anschließend können Sie die Anforderung asynchron laden mit:
Oder Sie können ein initialisieren
NSURLConnection
:Stellen Sie einfach sicher, dass Ihr Delegat auf etwas anderes als eingestellt ist,
nil
und verwenden Sie die Delegatenmethoden, um mit der Antwort und den empfangenen Daten zu arbeiten.Weitere Informationen finden Sie in der Dokumentation zum
NSURLConnectionDataDelegate
ProtokollTesten auf einem Xcode-Spielplatz
Wenn Sie diesen Code auf einem Xcode-Spielplatz ausprobieren möchten, fügen Sie ihn
import PlaygroundSupport
Ihrem Spielplatz sowie den folgenden Aufruf hinzu:Auf diese Weise können Sie asynchronen Code auf Spielplätzen verwenden.
quelle
print(String(data: data!, encoding: String.Encoding.utf8))
Überprüfen Sie die folgenden Codes:
1. SynchonousRequest
Swift 1.2
Swift 2.0 +
2. AsynchonousRequest
Swift 1.2
Swift 2.0 +
3. Wie gewohnt URL-Verbindung
Swift 1.2
Dann
Swift 2.0 +
Dann
4. Asynchrone POST-Anfrage
Swift 1.2
Swift 2.0 +
5. Asynchrone GET-Anfrage
Swift 1.2
Swift 2.0 +
6. Bild (Datei) hochladen
Swift 2.0 +
quelle
Eine weitere Option ist das Alamofire , die verkettbare Anforderungs- / Antwortmethoden bietet.
https://github.com/Alamofire/Alamofire
Eine Anfrage machen
Antwortbehandlung
quelle
URLSession
und Consorts. Akzeptanz ist auch kein Maß für ein abstraktes Maß für Güte (geschweige denn für Ihr !;)), Sondern für das, was dem OP am meisten geholfen hat. (Für "reine" Lösungen gibt es SO-Dokumentation!) Wenn das diese Antwort war, perfekt - es werden keine ersten Prinzipien verwendet, aber das ist nicht immer die "richtige" Lösung, nicht wahr?Swift 4 und höher: Datenanforderung mithilfe der URLSession-API
Swift 4 und höher, Decodable and Result enum
Beispiel:
// Wenn wir Aufgaben von der Platzhalter-API abrufen möchten, definieren wir die ToDo-Struktur, rufen dataRequest auf und übergeben die Zeichenfolgen-URL " https://jsonplaceholder.typicode.com/todos/1 ".
// dies gibt das Ergebnis aus:
quelle
Grundlegende Swift 3+ -Lösung
quelle
URL(string: "http://www.stackoverflow.com")
anstelle vonNSURL
URLSession.shared.dataTask(with: url!)
App Transport Security has blocked a cleartext HTTP (http://) resource load since it is insecure. Temporary exceptions can be configured via your app's Info.plist file.
Ich verwende den Wrapper dieses Typen mit guten Ergebnissen. Https://github.com/daltoniam/swiftHTTP . Keine großen undichten Abstraktionen so weit
Beispiel
quelle
Einzelheiten
Info.plist
NSAppTransportSecurity
Zur Info-Liste hinzufügen:
Alamofire-Probe
Alamofire
Verwendung der Alamofire-Probe
URLSession-Beispiel
Verwendung des URLSession-Beispiels
Ergebnisse
quelle
class func searchRequest(term: String, ...
ist das Beispiel für das Herunterladen von Daten von itunes.apple.com. In diesem Beispiel wird gesucht, daher habe ich densearchRequest
Funktionsnamen ausgewählt / erfunden .term
ist Teil " itunes.apple.com/search ?" Anfrage. Sie können beliebige Namen Ihrer Funktionen auswählen, die Ihr Logikmodell beschreiben.closure
, um eine Aufzählung mit den Fällensuccess
und zurückzugebenerror
.Ich habe eine HTTP- Anforderung durchgeführt. Beide Methoden GET & POST mit JSON Parsing folgendermaßen :
on viewDidLoad () :
Erledigt
quelle
Verwenden von URLSession + Swift 5
Wenn Sie nur die Antwort von cezar hinzufügen und eine Webanforderung mithilfe der URLSession-Klasse von Apple stellen möchten, gibt es mehrere Möglichkeiten, die Aufgabe auszuführen
1. Einfache GET-Anfrage mit URL
2. Einfache GET-Anfrage mit URL und Parametern
3. Einfache GET-Anfrage mit URL mit Fehlerbehandlung
4. Einfache POST-Anfrage mit URL, Parameter mit Fehlerbehandlung.
Ihre Vorschläge werden geschätzt !!
quelle
var session = URLSession.shared
wenn Sie es nicht verwenden, sondern nur die Variable überschreiben? Wird es gebraucht?Hier habe ich ein separates Wörterbuch für die Parameter erstellt.
quelle
Sie können Just , eine
python-requests
Stil-HTTP-Bibliothek, verwenden.Ein Beispiel für das Senden einer HTTP-Anfrage mit Just:
In beiden Fällen kann auf das Ergebnis einer Anforderung
r
auf ähnliche Weise zugegriffen werdenpython-request
:Weitere Beispiele finden Sie auf diesem Spielplatz
Die Verwendung dieser Bibliothek im synchronen Modus auf einem Spielplatz kommt CURL in Swift am nächsten.
quelle
In Swift 4.1 und Xcode 9.4.1.
Beispiel für einen JSON POST- Ansatz. Um die Internetverbindung zu überprüfen, fügen Sie Reachability.h & .m-Dateien von https://developer.apple.com/library/archive/samplecode/Reachability/Introduction/Intro.html#//apple_ref/doc/uid/DTS40007324-Intro-DontLinkElementID_2 hinzu
Wenn Sie Interesse haben, diese Funktion in SharedClass zu verwenden
Und schließlich rufen Sie diese Funktion so auf ...
quelle
Ein einfacher Swift 2.0-Ansatz zum Erstellen einer HTTP-GET-Anforderung
Die HTTP-Anforderung ist asynchron, sodass Sie eine Möglichkeit benötigen, den zurückgegebenen Wert aus der HTTP-Anforderung abzurufen. Dieser Ansatz verwendet Notifizierer und ist auf zwei Klassen verteilt.
Das Beispiel besteht darin, den Benutzernamen und das Kennwort auf der Website http://www.example.com/handler.php?do=CheckUserJson&json= auf ein Kennungstoken zu überprüfen. Die Datei heißt handler.php und hat eine switch-Anweisung auf der do-Parameter, um einen RESTful-Ansatz zu erhalten.
In viewDidLoad richten wir den NotifierObserver ein, richten den json ein und rufen die Funktion getHTTPRequest auf. Es wird mit dem zurückgegebenen Parameter aus der http-Anforderung zur Funktion verifyUsernameAndPassword zurückgekehrt.
In Utility.swift gibt es zwei statische Funktionen, um zuerst den json zu codieren und dann den HTTP-Aufruf auszuführen.
und die HTTP-Anfrage
Die sendNotification-Funktion schließt den Kreis. Beachten Sie, dass im Observer am Ende der Auswahlzeichenfolge ein ":" steht. Dadurch kann die Benachrichtigung eine Nutzlast in userInfo übertragen. Ich gebe diesem einen String und einen Int.
Beachten Sie, dass die Verwendung von HTTP altmodisch ist. Bevorzugen Sie HTTPS. Siehe Wie lade ich eine HTTP-URL mit aktivierter App Transport Security in iOS 9?
quelle
es wird dir sicher helfen
quelle
// Hier ist ein Beispiel, das für mich funktioniert hat
// Schnelle Funktion, die eine Anfrage an einen Server mit Schlüsselwerten sendet
PHP-Code zum Abrufen der Schlüsselwerte
$ empID = $ _POST ['id'];
$ inOut = $ _POST ['inout'];
$ comment = $ _POST ['comment'];
quelle
Hier ist ein sehr einfaches Swift 4- Beispiel auf einem Spielplatz:
quelle
Damit XCUITest den Testabschluss vor Abschluss der asynchronen Anforderung beendet, verwenden Sie Folgendes (möglicherweise verringern Sie das Zeitlimit von 100):
quelle
KISS Antwort:
quelle
Ein Beispiel für eine Beispielanforderung "GET" ist unten angegeben.
quelle