Eu li A linguagem de programação Swift da Apple no iBooks, mas não consigo descobrir como fazer uma solicitação HTTP (algo como cURL) no Swift. Preciso importar classes Obj-C ou só preciso importar bibliotecas padrão? Ou não é possível fazer uma solicitação HTTP com base no código Swift nativo?
ios
objective-c
swift
iphone
nsurlsession
Dicky Tsang
fonte
fonte
Respostas:
Você pode usar
URL
,URLRequest
eURLSession
ouNSURLConnection
como você faria normalmente em Objective-C. Observe que, para o iOS 7.0 e posterior,URLSession
é preferível.Usando
URLSession
Inicialize um
URL
objeto e umURLSessionDataTask
fromURLSession
. Em seguida, execute a tarefa comresume()
.Usando
NSURLConnection
Primeiro, inicialize ae
URL
aURLRequest
:Em seguida, você pode carregar a solicitação de forma assíncrona com:
Ou você pode inicializar um
NSURLConnection
:Apenas certifique-se de definir seu representante para algo diferente de
nil
e use os métodos de delegado para trabalhar com a resposta e os dados recebidos.Para mais detalhes, consulte a documentação do
NSURLConnectionDataDelegate
protocoloTestando em um playground do Xcode
Se você quiser experimentar esse código em um playground do Xcode, adicione-o
import PlaygroundSupport
ao playground e também a seguinte chamada:Isso permitirá que você use código assíncrono em playgrounds.
fonte
print(String(data: data!, encoding: String.Encoding.utf8))
Verifique os códigos abaixo:
1. SynchonousRequest
Swift 1.2
Swift 2.0 +
2. AsynchonousRequest
Swift 1.2
Swift 2.0 +
3. Conexão de URL usual
Swift 1.2
Então
Swift 2.0 +
Então
4. Solicitação assíncrona de POST
Swift 1.2
Swift 2.0 +
5. Solicitação GET assíncrona
Swift 1.2
Swift 2.0 +
6. Upload de Imagem (Arquivo)
Swift 2.0 +
fonte
Outra opção é a Alamofire lib, que oferece métodos de solicitação / resposta encadeáveis.
https://github.com/Alamofire/Alamofire
Fazendo um pedido
Manipulação de resposta
fonte
URLSession
consortes. Além disso, a aceitação não é uma medida de alguma medida abstrata da bondade (muito menos a sua!;)), Mas do que ajudou mais o OP. (Para soluções "puras", existe SO Documentação!) Se essa foi a resposta, perfeita - ela não está usando os primeiros princípios, mas nem sempre é a solução "certa", não é?Swift 4 e superior: solicitação de dados usando a API URLSession
Swift 4 e acima, decodificação e resultado enum
exemplo:
// se queremos buscar tudo da API do marcador de posição, definimos a estrutura ToDo e chamamos dataRequest e passamos o URL da string " https://jsonplaceholder.typicode.com/todos/1 ".
// isso imprime o resultado:
fonte
Solução básica Swift 3+
fonte
URL(string: "http://www.stackoverflow.com")
em vez 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.
Estou usando o wrapper desse cara com bons resultados até agora https://github.com/daltoniam/swiftHTTP . Até agora, nenhuma grande abstração com vazamento
Exemplo
fonte
Detalhes
Info.plist
NSAppTransportSecurity
Adicione à lista de informações:
Amostra Alamofire
Alamofire
Uso da amostra Alamofire
Amostra URLSession
Uso da amostra URLSession
Resultados
fonte
class func searchRequest(term: String, ...
é a amostra dos dados de download do itunes.apple.com. Este exemplo pesquisará, portanto, escolhi / inventei osearchRequest
nome da função.term
faz parte " itunes.apple.com/search ?" solicitação. Você pode escolher qualquer nome de suas funções que descreva seu modelo lógico.closure
para retornar um enum com os casossuccess
eerror
.Eu fiz a solicitação HTTP Ambos os métodos GET & POST com JSON Analisando desta maneira:
em viewDidLoad () :
Feito
fonte
Usando URLSession + Swift 5
Apenas adicionando à resposta do cezar , se você quiser fazer uma solicitação da Web usando a classe URLSession da Apple, há várias maneiras de executar a tarefa
1. Solicitação GET simples com URL
2. Solicitação GET simples com URL e parâmetros
3. Solicitação GET simples com URL com tratamento de erros
4. Solicitação POST simples com URL, parâmetros com tratamento de erros.
Suas sugestões são apreciadas !!
fonte
var session = URLSession.shared
quando não está usando, mas apenas substituindo a variável? É necessário?Aqui, eu criei um dicionário separado para os parâmetros.
fonte
Você pode usar o Just , uma
python-requests
biblioteca HTTP de estilo.Alguns exemplos de envio de solicitação HTTP com Just:
Nos dois casos, o resultado de uma solicitação
r
pode ser acessado de maneiras semelhantes apython-request
:Você pode encontrar mais exemplos neste playground
Usar esta biblioteca no modo síncrono em um playground é a coisa mais próxima que um cURL pode ser obtido no Swift.
fonte
No Swift 4.1 e no Xcode 9.4.1.
Exemplo de abordagem JSON POST . Para verificar a conexão com a Internet, adicione os arquivos Reachability.h & .m em https://developer.apple.com/library/archive/samplecode/Reachability/Introduction/Intro.html#//apple_ref/doc/uid/DTS40007324-Intro-DontLinkElementID_2
Se você tiver interesse em usar esta função no SharedClass
E, finalmente, chame essa função assim ....
fonte
Uma abordagem simples do Swift 2.0 para fazer uma solicitação HTTP GET
A solicitação HTTP é assíncrona, portanto, você precisa de uma maneira de obter o valor retornado da Solicitação HTTP. Essa abordagem usa Notificadores e está espalhada por duas classes.
O exemplo é verificar o nome de usuário e a senha de um token de identificação usando o site http://www.example.com/handler.php?do=CheckUserJson&json= Esse é o arquivo chamado handler.php e possui uma instrução switch no do parâmetro para obter uma abordagem RESTful.
No viewDidLoad, configuramos o NotifierObserver, configuramos o json e fazemos a chamada para a função getHTTPRequest. Ele retornará à função selectedUsernameAndPassword com o parâmetro retornado da solicitação http.
Existem duas funções estáticas no Utility.swift primeiro para codificar o json e depois para fazer a chamada HTTP.
e a solicitação HTTP
A função sendNotification completa o círculo. Observe que no Observer existe um ":" no final da string do seletor. Isso permite que a notificação carregue uma carga útil em userInfo. Eu dou a isso uma String e um Int.
Observe que o uso do HTTP é antiquado, prefira HTTPS, consulte Como carregar um URL HTTP com o App Transport Security ativado no iOS 9?
fonte
isso irá ajudá-lo certamente
fonte
// Aqui está um exemplo que funcionou para mim
// Função Swift que publica uma solicitação em um servidor com valores-chave
Código PHP para obter os valores-chave
$ empID = $ _POST ['id'];
$ inOut = $ _POST ['inout'];
$ comment = $ _POST ['comentário'];
fonte
Aqui está um exemplo muito simples do Swift 4 em um playground:
fonte
Para o XCUITest parar o teste antes que a solicitação assíncrona seja concluída, use isso (talvez reduza o tempo limite de 100):
fonte
Resposta do KISS:
fonte
Um exemplo para um exemplo de solicitação "GET" é fornecido abaixo.
fonte