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,URLRequestyURLSession, oNSURLConnectioncomo normalmente lo haría en Objective-C. Tenga en cuenta que para iOS 7.0 y versiones posteriores,URLSessionse prefiere.Utilizando
URLSessionInicializar un
URLobjeto y unURLSessionDataTaskdeURLSession. Luego ejecute la tarea conresume().Utilizando
NSURLConnectionPrimero, inicialice ay
URLaURLRequest: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
nily 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
NSURLConnectionDataDelegateprotocolo.Pruebas en un patio de juegos Xcode
Si desea probar este código en un patio de juegos Xcode, agréguelo
import PlaygroundSupporta 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
URLSessionconsortes. 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 deNSURLURLSession.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é elsearchRequestnombre de la función.termes parte " itunes.apple.com/search ?" solicitud. Puede elegir cualquier nombre de sus funciones que describa su modelo lógico.closurepara devolver una enumeración con los casossuccessyerror.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.sharedcuando 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-requestsbiblioteca HTTP de estilo.Algunos ejemplos de envío de solicitud HTTP con Just:
En ambos casos,
rse 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