Я читаю «Язык программирования Swift» от Apple в iBooks, но не могу понять, как сделать HTTP-запрос (что-то вроде cURL) в Swift. Нужно ли импортировать классы Obj-C или мне просто нужно импортировать библиотеки по умолчанию? Или невозможно сделать HTTP-запрос на основе собственного кода Swift?
ios
objective-c
swift
iphone
nsurlsession
Дики Цанг
источник
источник
Ответы:
Вы можете использовать
URL
,URLRequest
иURLSession
илиNSURLConnection
как вы обычно делаете в Objective-C. Обратите внимание, что для iOS 7.0 и выше,URLSession
является предпочтительным.С помощью
URLSession
Инициализируйте
URL
объект и объектURLSessionDataTask
изURLSession
. Затем запустите задачу сresume()
.С помощью
NSURLConnection
Сначала инициализируйте a
URL
и aURLRequest
:Затем вы можете асинхронно загрузить запрос:
Или вы можете инициализировать
NSURLConnection
:Просто убедитесь, что ваш делегат настроен на что-то другое,
nil
и используйте методы делегата для работы с ответом и полученными данными.Для более подробной информации, проверьте документацию для
NSURLConnectionDataDelegate
протоколаТестирование на детской площадке Xcode
Если вы хотите попробовать этот код на игровой площадке Xcode, добавьте
import PlaygroundSupport
на игровую площадку, а также следующий звонок:Это позволит вам использовать асинхронный код на игровых площадках.
источник
print(String(data: data!, encoding: String.Encoding.utf8))
Проверьте ниже коды:
1. Синхронный запрос
Swift 1.2
Swift 2.0 +
2. Асинхронный запрос
Swift 1.2
Swift 2.0 +
3. Как обычно URL-соединение
Swift 1.2
затем
Swift 2.0 +
затем
4. Асинхронный запрос POST
Swift 1.2
Swift 2.0 +
5. Асинхронный запрос GET
Swift 1.2
Swift 2.0 +
6. Изображение (файл) Загрузить
Swift 2.0 +
источник
Другой вариант - библиотека Alamofire, которая предлагает цепочечные методы запросов / ответов.
https://github.com/Alamofire/Alamofire
Сделать запрос
Обработка ответа
источник
URLSession
. Кроме того, принятие - это не мера какой-то абстрактной меры благости (не говоря уже о вашей;;)), но то, что помогло ФП больше всего. (Для «чистых» решений есть SO документирование!) Если это был именно такой ответ, идеально - он не использует первые принципы, но тогда это не всегда «правильное» решение, не так ли?Swift 4 и выше: запрос данных с использованием API URLSession
Swift 4 и выше, Decodable и Resum enum
пример:
// если мы хотим извлечь задачу из API-заполнителя, тогда мы определяем структуру ToDo, вызываем dataRequest и передаем строку « https://jsonplaceholder.typicode.com/todos/1 » url строки.
// это печатает результат:
источник
Базовое решение Swift 3+
источник
URL(string: "http://www.stackoverflow.com")
вместоNSURL
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.
Я использую обертку этого парня с хорошими результатами пока https://github.com/daltoniam/swiftHTTP . Никаких больших дырявых абстракций до сих пор
пример
источник
подробности
Info.plist
NSAppTransportSecurity
Добавьте к информационному листу:
Образец Аламофира
Alamofire
Использование образца Alamofire
Образец URLSession
Использование образца URLSession
Результаты
источник
class func searchRequest(term: String, ...
Пример загрузки данных с сайта itunes.apple.com. Этот пример будет искать, поэтому я выбрал / придумалsearchRequest
имя функции.term
является частью " itunes.apple.com/search ?" запрос. Вы можете выбрать любые имена ваших функций, которые будут описывать вашу логическую модель.closure
чтобы вернуть перечисление с деламиsuccess
иerror
.Я сделал HTTP запрос Оба метода GET & POST с анализом JSON следующим образом:
on viewDidLoad () :
Выполнено
источник
Использование URLSession + Swift 5
Просто добавив к ответу cezar , если вы хотите сделать веб-запрос с использованием класса Apple URLSession, есть несколько способов выполнить задачу
1. Простой запрос GET с URL
2. Простой запрос GET с URL и параметрами
3. Простой запрос GET с URL с обработкой ошибок
4. Простой запрос POST с URL, параметры с обработкой ошибок.
Ваши предложения приветствуются!
источник
var session = URLSession.shared
когда вы не используете его, а только перезаписываете переменную? Это нужно?Здесь я сделал отдельный словарь для параметров.
источник
Вы можете использовать Just ,
python-requests
библиотеку стилей HTTP.Пример отправки HTTP-запроса с помощью Just:
В обоих случаях результат запроса
r
может быть доступен способами, аналогичнымиpython-request
:Вы можете найти больше примеров на этой площадке
Использование этой библиотеки в синхронном режиме на игровой площадке - самая близкая вещь к cURL, которую можно получить в Swift.
источник
В Swift 4.1 и Xcode 9.4.1.
Пример подхода JSON POST . Чтобы проверить подключение к Интернету, добавьте файлы Reachability.h & .m из https://developer.apple.com/library/archive/samplecode/Reachability/Introduction/Intro.html#//apple_ref/doc/uid/DTS40007324-Intro-DontLinkElementID_2
Если у вас есть интерес использовать эту функцию в SharedClass
И, наконец, вызвать эту функцию, как это ....
источник
Простой подход Swift 2.0 для создания HTTP-запроса GET
HTTP-запрос является асинхронным, поэтому вам нужен способ получить возвращенное значение из HTTP-запроса. Этот подход использует Уведомители и распространяется на два класса.
Примером является проверка имени пользователя и пароля для идентификатора токена с помощью веб-сайта http://www.example.com/handler.php?do=CheckUserJson&json= То есть файл называется handler.php и имеет оператор switch на сделать параметр, чтобы получить подход RESTful.
В viewDidLoad мы устанавливаем NotifierObserver, настраиваем json и вызываем функцию getHTTPRequest. Он вернется к функции checkedUsernameAndPassword с возвращенным параметром из http-запроса.
В Utility.swift есть две статические функции: сначала для кодирования json, а затем для выполнения HTTP-вызова.
и запрос Http
Функция sendNotification завершает круг. Обратите внимание, что в Observer есть «:» в конце строки селектора. Это позволяет уведомлению переносить полезную нагрузку в userInfo. Я даю это String и Int.
Обратите внимание, что использование HTTP является старомодным, предпочтение отдается HTTPS, см. Как загрузить URL-адрес HTTP с включенной App Transport Security в iOS 9?
источник
это вам обязательно поможет
источник
// Вот пример, который работал для меня
// функция Swift, которая отправляет запрос на сервер со значениями ключа
PHP-код для получения ключевых значений
$ empID = $ _POST ['id'];
$ inOut = $ _POST ['inout'];
$ comment = $ _POST ['comment'];
источник
Вот очень простой пример Swift 4 на детской площадке:
источник
Чтобы XCUITest мог остановить тестирование до завершения асинхронного запроса, используйте это (возможно, сократите время ожидания 100):
источник
ПОЦЕЛУЙ ответ:
источник
Пример для примера запроса «GET» приведен ниже.
источник