Saya membaca The Programming Language Swift oleh Apple di iBooks, tetapi tidak dapat menemukan cara untuk membuat permintaan HTTP (seperti cURL) di Swift. Apakah saya perlu mengimpor kelas Obj-C atau apakah saya hanya perlu mengimpor perpustakaan default? Atau apakah tidak mungkin untuk membuat permintaan HTTP berdasarkan kode Swift asli?
ios
objective-c
swift
iphone
nsurlsession
Dicky Tsang
sumber
sumber
Jawaban:
Anda dapat menggunakan
URL
,URLRequest
danURLSession
atauNSURLConnection
seperti yang biasa Anda lakukan di Objective-C. Perhatikan bahwa untuk iOS 7.0 dan yang lebih baru,URLSession
lebih disukai.Menggunakan
URLSession
Inisialisasi
URL
objek danURLSessionDataTask
dariURLSession
. Kemudian jalankan tugas denganresume()
.Menggunakan
NSURLConnection
Pertama, inisialisasi a
URL
dan aURLRequest
:Kemudian, Anda dapat memuat permintaan secara tidak sinkron dengan:
Atau Anda dapat menginisialisasi
NSURLConnection
:Pastikan untuk mengatur delegasi Anda ke sesuatu selain
nil
dan menggunakan metode delegasi untuk bekerja dengan respons dan data yang diterima.Untuk detail lebih lanjut, periksa dokumentasi untuk
NSURLConnectionDataDelegate
protokolnyaMenguji bermain Xcode
Jika Anda ingin mencoba kode ini di taman bermain Xcode, tambahkan
import PlaygroundSupport
ke taman bermain Anda, serta panggilan berikut:Ini akan memungkinkan Anda untuk menggunakan kode asinkron di taman bermain.
sumber
print(String(data: data!, encoding: String.Encoding.utf8))
Periksa Kode Di Bawah Ini:
1. Pertanyaan Synchonous
Cepat 1.2
Swift 2.0 +
2. Permintaan Asynchonous
Cepat 1.2
Swift 2.0 +
3. Seperti koneksi URL biasa
Cepat 1.2
Kemudian
Swift 2.0 +
Kemudian
4. Permintaan POST Asynchonous
Cepat 1.2
Swift 2.0 +
5. MENDAPATKAN Permintaan Asynchonous
Cepat 1.2
Swift 2.0 +
6. Unggah Gambar (File)
Swift 2.0 +
sumber
Opsi lain adalah lib Alamofire yang menawarkan metode Chainable Request / Response.
https://github.com/Alamofire/Alamofire
Membuat permintaan
Penanganan Respons
sumber
URLSession
dan dari permaisuri. Juga, penerimaan bukanlah ukuran dari beberapa ukuran abstrak kebaikan (apalagi milikmu!;)) Tetapi dari apa yang paling membantu OP. (Untuk solusi "murni", ada SO Dokumentasi!) Jika itu adalah jawaban ini, sempurna - itu tidak menggunakan prinsip pertama, tetapi kemudian itu tidak selalu merupakan solusi "benar", bukan?Swift 4 dan lebih tinggi: Permintaan Data menggunakan API URLSession
Swift 4 dan lebih tinggi, Decodable dan Result enum
contoh:
// jika kita ingin mengambil todo dari placeholder API, maka kita mendefinisikan struct ToDo dan memanggil dataRequest dan meneruskan " https://jsonplaceholder.typicode.com/todos/1 " url string.
// ini mencetak hasilnya:
sumber
Solusi Dasar Swift 3+
sumber
URL(string: "http://www.stackoverflow.com")
sebagai gantinyaNSURL
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.
Saya menggunakan pembungkus orang ini dengan hasil yang baik sejauh ini https://github.com/daltoniam/swiftHTTP . Tidak ada abstraksi besar yang bocor sejauh ini
Contoh
sumber
Detail
Info.plist
NSAppTransportSecurity
Tambahkan ke daftar info:
Sampel Alamofire
Alamofire
Penggunaan sampel Alamofire
Contoh URLSession
Penggunaan sampel URLSession
Hasil
sumber
class func searchRequest(term: String, ...
adalah contoh data pengunduhan dari itunes.apple.com. Sampel ini akan mencari, jadi, saya memilih / menemukansearchRequest
nama fungsi.term
bagian " itunes.apple.com/search ?" permintaan. Anda dapat memilih nama fungsi apa pun yang akan menjelaskan model logika Anda.closure
untuk mengembalikan enum dengan kasingsuccess
danerror
.Saya telah melakukan Permintaan HTTP Kedua metode DAPATKAN & POST dengan JSON Parsing dengan cara ini:
on viewDidLoad () :
Selesai
sumber
Menggunakan URLSession + Swift 5
Hanya menambahkan jawaban cezar , jika Anda ingin membuat permintaan web menggunakan kelas URLSession Apple, ada beberapa cara untuk melakukan tugas tersebut
1. Permintaan GET Sederhana dengan URL
2. Permintaan GET Sederhana dengan URL dan Parameter
3. MENDAPATKAN Permintaan Sederhana dengan URL dengan Penanganan Kesalahan
4. Permintaan POST sederhana dengan URL, Parameter dengan Penanganan Kesalahan.
Saran Anda sangat dihargai !!
sumber
var session = URLSession.shared
saat Anda tidak menggunakannya, tetapi hanya menimpa variabel? Apakah itu dibutuhkan?Di sini, saya telah membuat kamus terpisah untuk parameter.
sumber
Anda dapat menggunakan Just ,
python-requests
perpustakaan HTTP gaya.Beberapa contoh pengiriman permintaan HTTP dengan Just:
Dalam kedua kasus, hasil permintaan
r
dapat diakses dengan cara yang mirip denganpython-request
:Anda dapat menemukan lebih banyak contoh di taman bermain ini
Menggunakan perpustakaan ini dalam mode sinkron di taman bermain adalah hal yang paling dekat dengan CURL yang bisa didapatkan di Swift.
sumber
Dalam Swift 4.1 dan Xcode 9.4.1.
Contoh pendekatan JSON POST . Untuk memeriksa koneksi internet, tambahkan file Reachability.h & .m dari https://developer.apple.com/library/archive/samplecode/Reachability/Introduction/Intro.html#//apple_ref/doc/uid/DTS40007324-Intro-DontLinkElementID_2
Jika Anda tertarik menggunakan fungsi ini di SharedClass
Dan akhirnya memanggil fungsi ini seperti ini ....
sumber
Pendekatan Swift 2.0 sederhana untuk membuat permintaan HTTP GET
Permintaan HTTP asinkron sehingga Anda perlu cara untuk mendapatkan nilai yang dikembalikan dari Permintaan HTTP. Pendekatan ini menggunakan Notifiers dan tersebar di dua kelas.
Contohnya adalah untuk memeriksa nama pengguna dan kata sandi untuk token pengidentifikasi menggunakan situs web http://www.example.com/handler.php?do=CheckUserJson&json= Itu adalah file yang disebut handler.php dan memiliki pernyataan beralih pada lakukan parameter untuk mendapatkan pendekatan yang tenang.
Di viewDidLoad kita mengatur NotifierObserver, mengatur json dan melakukan panggilan ke fungsi getHTTPRequest. Ini akan kembali ke fungsi checkedUsernameAndPassword dengan parameter yang dikembalikan dari permintaan http.
Ada dua fungsi statis di Utility.swift pertama untuk menyandikan json dan kemudian melakukan panggilan HTTP.
dan permintaan Http
Fungsi sendNotification melengkapi lingkaran. Perhatikan bahwa di Observer ada ":" di akhir string pemilih. Ini memungkinkan pemberitahuan untuk membawa muatan di userInfo. Saya memberikan ini String dan Int.
Perhatikan bahwa menggunakan HTTP adalah oldFashioned, lebih suka HTTPS lihat Bagaimana cara memuat URL HTTP dengan App Transport Security diaktifkan di iOS 9?
sumber
itu pasti akan membantu Anda
sumber
// Ini contoh yang cocok untukku
// Fungsi Swift yang mengirim permintaan ke server dengan nilai kunci
Kode PHP untuk mendapatkan nilai kunci
$ empID = $ _POST ['id'];
$ inOut = $ _POST ['inout'];
$ comment = $ _POST ['comment'];
sumber
Berikut adalah contoh Swift 4 yang sangat sederhana di taman bermain:
sumber
Agar XCUITest menghentikan pengujian sebelum permintaan async selesai gunakan ini (mungkin kurangi waktu tunggu 100):
sumber
Jawaban KISS:
sumber
Contoh untuk permintaan "GET" sampel diberikan di bawah ini.
sumber