Leí El lenguaje de programación Swift de Apple en iBooks, pero no puedo entender cómo hacer una solicitud HTTP (algo así como cURL) en Swift. ¿Necesito importar clases Obj-C o solo necesito importar bibliotecas predeterminadas? ¿O no es posible realizar una solicitud HTTP basada en el código Swift nativo?
ios
objective-c
swift
iphone
nsurlsession
Dicky Tsang
fuente
fuente
Respuestas:
Puedes usar
URL
,URLRequest
yURLSession
, oNSURLConnection
como normalmente lo haría en Objective-C. Tenga en cuenta que para iOS 7.0 y versiones posteriores,URLSession
se prefiere.Utilizando
URLSession
Inicializar un
URL
objeto y unURLSessionDataTask
deURLSession
. Luego ejecute la tarea conresume()
.Utilizando
NSURLConnection
Primero, inicialice ay
URL
aURLRequest
:Luego, puede cargar la solicitud de forma asincrónica con:
O puede inicializar un
NSURLConnection
:Solo asegúrese de configurar su delegado en algo diferente a
nil
y usar los métodos de delegado para trabajar con la respuesta y los datos recibidos.Para obtener más detalles, consulte la documentación de
NSURLConnectionDataDelegate
protocolo.Pruebas en un patio de juegos Xcode
Si desea probar este código en un patio de juegos Xcode, agréguelo
import PlaygroundSupport
a su patio de juegos, así como a la siguiente llamada:Esto le permitirá usar código asincrónico en parques infantiles.
fuente
print(String(data: data!, encoding: String.Encoding.utf8))
Verifique los siguientes códigos:
1. Solicitud Sincrónica
Swift 1.2
Swift 2.0 +
2. Solicitud asíncrona
Swift 1.2
Swift 2.0 +
3. Como es habitual la conexión URL
Swift 1.2
Entonces
Swift 2.0 +
Entonces
4. Solicitud POST asíncrona
Swift 1.2
Swift 2.0 +
5. Solicitud GET asíncrona
Swift 1.2
Swift 2.0 +
6. Subir imagen (archivo)
Swift 2.0 +
fuente
Otra opción es la biblioteca Alamofire que ofrece métodos de solicitud / respuesta encadenables.
https://github.com/Alamofire/Alamofire
Haciendo una solicitud
Manejo de respuesta
fuente
URLSession
consortes. Además, la aceptación no es una medida de alguna medida abstracta de bondad (¡y mucho menos la suya!)) Sino de lo que más ayudó al OP. (Para soluciones "puras", ¡hay documentación SO!) Si esa fue la respuesta, perfecto: no está usando los primeros principios, pero esa no es siempre la solución "correcta", ¿no?Swift 4 y superior: Solicitud de datos utilizando la API URLSession
Swift 4 y superior, decodificable y enumeración de resultados
ejemplo:
// si queremos recuperar todo de la API de marcador de posición, definimos la estructura de ToDo y llamamos a dataRequest y pasamos la url de cadena " https://jsonplaceholder.typicode.com/todos/1 ".
// esto imprime el resultado:
fuente
Solución básica Swift 3+
fuente
URL(string: "http://www.stackoverflow.com")
lugar 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.
Estoy usando el contenedor de este tipo con buenos resultados hasta ahora https://github.com/daltoniam/swiftHTTP . No hay grandes abstracciones con fugas hasta el momento
Ejemplo
fuente
Detalles
Info.plist
NSAppTransportSecurity
Añadir a la lista de información:
Muestra de alamofire
Alamofire
Uso de la muestra de Alamofire
Muestra de URLSession
Uso de la muestra URLSession
Resultados
fuente
class func searchRequest(term: String, ...
es la muestra de los datos de descarga de itunes.apple.com. Esta muestra buscará, así que elegí / inventé elsearchRequest
nombre de la función.term
es parte " itunes.apple.com/search ?" solicitud. Puede elegir cualquier nombre de sus funciones que describa su modelo lógico.closure
para devolver una enumeración con los casossuccess
yerror
.He hecho Solicitud HTTP Ambos métodos GET & POST con JSON Parsing de esta manera:
en viewDidLoad () :
Hecho
fuente
Usando URLSession + Swift 5
Simplemente agregando a la respuesta de cezar , si desea realizar una solicitud web utilizando la clase URLSession de Apple, hay varias formas de hacer la tarea
1. Solicitud GET simple con URL
2. Solicitud GET simple con URL y parámetros
3. Solicitud GET simple con URL con manejo de errores
4. Solicitud POST simple con URL, parámetros con manejo de errores.
¡Tus sugerencias son apreciadas!
fuente
var session = URLSession.shared
cuando no lo está usando, sino que sobrescribe la variable? ¿Es necesario?Aquí, he hecho un diccionario separado para los parámetros.
fuente
Puede usar Just , una
python-requests
biblioteca HTTP de estilo.Algunos ejemplos de envío de solicitud HTTP con Just:
En ambos casos,
r
se puede acceder al resultado de una solicitud de manera similar apython-request
:Puedes encontrar más ejemplos en este parque infantil
Usar esta biblioteca en modo síncrono en un patio de recreo es lo más parecido a cURL que se puede obtener en Swift.
fuente
En Swift 4.1 y Xcode 9.4.1.
JSON POSTEjemplo de enfoque . Para verificar la conexión a Internet, agregue los archivos Reachability.h & .m de https://developer.apple.com/library/archive/samplecode/Reachability/Introduction/Intro.html#//apple_ref/doc/uid/DTS40007324-Intro-DontLinkElementID_2
Si tiene interés en utilizar esta función en SharedClass
Y finalmente llama a esta función así ...
fuente
Un enfoque simple de Swift 2.0 para hacer una solicitud HTTP GET
La solicitud HTTP es asíncrona, por lo que necesita una forma de obtener el valor devuelto de la solicitud HTTP. Este enfoque utiliza Notificadores y se distribuye en dos clases.
El ejemplo es verificar el nombre de usuario y la contraseña de un token identificador utilizando el sitio web http://www.example.com/handler.php?do=CheckUserJson&json= Ese es el archivo llamado handler.php y tiene una declaración de cambio en el hacer parámetro para obtener un enfoque RESTful.
En viewDidLoad configuramos el NotifierObserver, configuramos el json y hacemos la llamada a la función getHTTPRequest. Volverá a la función checkUsernameAndPassword con el parámetro devuelto de la solicitud http.
Hay dos funciones estáticas en Utility.swift, primero para codificar el json y luego para hacer la llamada HTTP.
y la solicitud Http
La función sendNotification completa el círculo. Observe que en el Observador hay un ":" al final de la cadena de selección. Esto permite que la notificación lleve una carga útil en userInfo. Le doy a este un String y un Int.
Tenga en cuenta que el uso de HTTP es anticuado, prefiera HTTPS. Consulte ¿Cómo se carga una URL HTTP con App Transport Security habilitada en iOS 9?
fuente
seguramente te ayudará
fuente
// Aquí hay un ejemplo que me funcionó
// Función Swift que publica una solicitud en un servidor con valores clave
Código PHP para obtener los valores clave
$ empID = $ _POST ['id'];
$ inOut = $ _POST ['inout'];
$ comentario = $ _POST ['comentario'];
fuente
Aquí hay un ejemplo muy simple de Swift 4 en un patio de recreo:
fuente
Para que XCUITest detenga el final de la prueba antes de que se complete la solicitud asíncrona, use esto (tal vez reduzca el tiempo de espera de 100):
fuente
BESO respuesta:
fuente
A continuación se muestra un ejemplo de una solicitud "GET" de muestra.
fuente