J'ai lu le langage de programmation Swift d'Apple dans iBooks, mais je ne sais pas comment faire une demande HTTP (quelque chose comme cURL) dans Swift. Dois-je importer des classes Obj-C ou dois-je simplement importer des bibliothèques par défaut? Ou n'est-il pas possible de faire une requête HTTP basée sur du code Swift natif?
ios
objective-c
swift
iphone
nsurlsession
Dicky Tsang
la source
la source
Réponses:
Vous pouvez utiliser
URL
,URLRequest
etURLSession
ouNSURLConnection
comme vous le feriez normalement dans Objective-C. Notez que pour iOS 7.0 et versions ultérieures,URLSession
est préférable.En utilisant
URLSession
Initialisez un
URL
objet et unURLSessionDataTask
fromURLSession
. Exécutez ensuite la tâche avecresume()
.En utilisant
NSURLConnection
Tout d'abord, initialisez a
URL
et aURLRequest
:Ensuite, vous pouvez charger la demande de manière asynchrone avec:
Ou vous pouvez initialiser un
NSURLConnection
:Assurez-vous simplement de définir votre délégué sur autre chose que
nil
et utilisez les méthodes de délégué pour travailler avec la réponse et les données reçues.Pour plus de détails, consultez la documentation du
NSURLConnectionDataDelegate
protocoleTest sur un terrain de jeu Xcode
Si vous souhaitez essayer ce code sur un terrain de jeu Xcode, ajoutez-le
import PlaygroundSupport
à votre terrain de jeu, ainsi que l'appel suivant:Cela vous permettra d'utiliser du code asynchrone dans les aires de jeux.
la source
print(String(data: data!, encoding: String.Encoding.utf8))
Vérifiez les codes ci-dessous:
1. SynchonousRequest
Swift 1.2
Swift 2.0 +
2. AsynchonousRequest
Swift 1.2
Swift 2.0 +
3. Connexion URL habituelle
Swift 1.2
alors
Swift 2.0 +
alors
4. Demande POST asynchrone
Swift 1.2
Swift 2.0 +
5. Demande GET asynchrone
Swift 1.2
Swift 2.0 +
6. Téléchargement d'image (fichier)
Swift 2.0 +
la source
Une autre option est la bibliothèque Alamofire qui propose des méthodes de demande / réponse chaînables.
https://github.com/Alamofire/Alamofire
Faire une demande
Gestion des réponses
la source
URLSession
et consorts. De plus, l'acceptation n'est pas une mesure de quelque mesure abstraite de bonté (encore moins la vôtre!;)) Mais de ce qui a le plus aidé le PO. (Pour les solutions «pures», il y a la documentation SO!)Swift 4 et supérieur: demande de données à l'aide de l'API URLSession
Swift 4 et supérieur, décodable et résultat énuméré
exemple:
// si nous voulons récupérer les tâches à partir de l'API d'espace réservé, nous définissons la structure ToDo et appelons dataRequest et passons " https://jsonplaceholder.typicode.com/todos/1 URL de chaîne ".
// ceci imprime le résultat:
la source
Solution Swift 3+ de base
la source
URL(string: "http://www.stackoverflow.com")
place deNSURL
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.
J'utilise le wrapper de ce type avec de bons résultats jusqu'à présent https://github.com/daltoniam/swiftHTTP . Pas de grandes abstractions qui fuient jusqu'à présent
Exemple
la source
Détails
Info.plist
NSAppTransportSecurity
Ajouter à la liste d'informations:
Échantillon Alamofire
Alamofire
Utilisation de l'échantillon d'Alamofire
Échantillon URLSession
Utilisation de l'exemple URLSession
Résultats
la source
class func searchRequest(term: String, ...
est l'exemple des données de téléchargement sur itunes.apple.com. Cet échantillon va chercher, donc, j'ai choisi / inventé lesearchRequest
nom de la fonction.term
fait partie " itunes.apple.com/search ?" demande. Vous pouvez choisir n'importe quel nom de vos fonctions qui décrira votre modèle logique.closure
pour renvoyer une énumération avec les cassuccess
eterror
.J'ai fait la requête HTTP Les deux méthodes GET & POST avec JSON Parsing de cette façon:
sur viewDidLoad () :
Terminé
la source
Utiliser URLSession + Swift 5
En ajoutant simplement à la réponse de Cezar , si vous souhaitez effectuer une demande Web à l'aide de la classe URLSession d'Apple, il existe plusieurs façons de faire la tâche
1. Demande GET simple avec URL
2. Demande GET simple avec URL et paramètres
3. Demande GET simple avec URL avec gestion des erreurs
4. Demande POST simple avec URL, paramètres avec gestion des erreurs.
Vos suggestions sont appréciées !!
la source
var session = URLSession.shared
lorsque vous ne l'utilisez pas, mais uniquement en écrasant la variable? Est-ce nécessaire?Ici, j'ai fait un dictionnaire séparé pour les paramètres.
la source
Vous pouvez utiliser Just , une
python-requests
bibliothèque HTTP de style.Un exemple d'envoi de requête HTTP avec Just:
Dans les deux cas, le résultat d'une demande
r
peut être consulté de manière similaire àpython-request
:Vous pouvez trouver plus d'exemples dans cette aire de jeux
L'utilisation de cette bibliothèque en mode synchrone dans une aire de jeux est la chose la plus proche de cURL que l'on puisse obtenir dans Swift.
la source
Dans Swift 4.1 et Xcode 9.4.1.
Exemple d'approche JSON POST . Pour vérifier la connexion Internet, ajoutez des fichiers Reachability.h & .m à partir de https://developer.apple.com/library/archive/samplecode/Reachability/Introduction/Intro.html#//apple_ref/doc/uid/DTS40007324-Intro-DontLinkElementID_2
Si vous souhaitez utiliser cette fonction dans SharedClass
Et enfin appeler cette fonction comme ça ....
la source
Une approche Swift 2.0 simple pour effectuer une requête HTTP GET
La demande HTTP est asynchrone, vous avez donc besoin d'un moyen d'obtenir la valeur renvoyée à partir de la demande HTTP. Cette approche utilise des notificateurs et est répartie sur deux classes.
L'exemple consiste à vérifier le nom d'utilisateur et le mot de passe pour un jeton d'identification à l'aide du site Web http://www.example.com/handler.php?do=CheckUserJson&json= C'est-à-dire que le fichier s'appelle handler.php et possède une instruction switch sur le do paramètre pour obtenir une approche RESTful.
Dans le viewDidLoad, nous configurons le NotifierObserver, configurons le json et appelons la fonction getHTTPRequest. Il reviendra à la fonction checkedUsernameAndPassword avec le paramètre renvoyé de la requête http.
Il y a deux fonctions statiques dans Utility.swift d'abord pour encoder le json puis pour faire l'appel HTTP.
et la requête Http
La fonction sendNotification complète le cercle. Notez que dans l'observateur, il y a un ":" à la fin de la chaîne de sélection. Cela permet à la notification de transporter une charge utile dans userInfo. Je lui donne une chaîne et un int.
Notez que l'utilisation de HTTP est démodée, préférez HTTPS, voir Comment charger une URL HTTP avec App Transport Security activé dans iOS 9?
la source
cela vous aidera sûrement
la source
// Voici un exemple qui a fonctionné pour moi
// Fonction Swift qui poste une requête sur un serveur avec des valeurs clés
Code PHP pour obtenir les valeurs clés
$ empID = $ _POST ['id'];
$ inOut = $ _POST ['inout'];
$ comment = $ _POST ['comment'];
la source
Voici un exemple très simple de Swift 4 dans une aire de jeux:
la source
Pour que XCUITest arrête la fin du test avant la fin de la demande asynchrone, utilisez ceci (peut-être réduire le délai d'attente de 100):
la source
Réponse KISS:
la source
Un exemple pour un exemple de requête "GET" est donné ci-dessous.
la source