cURL para Swift
Cole um comando curl e receba código Swift que faz a mesma requisição com URLSession.
O cURL para Swift analisa seu comando no navegador. Tokens e credenciais do comando não saem do seu dispositivo.
Testar o cliente de API
Sobre cURL para Swift
A documentação de API fala curl e os apps iOS falam URLSession, e traduzir entre os dois à mão é trabalho repetitivo que convida a pequenos erros: um cabeçalho esquecido, um corpo deixado como string quando deveria ser JSON, uma opção de autenticação ignorada em silêncio. Este conversor analisa o comando curl como o próprio curl faz, incluindo as opções que mudam o método ou dobram credenciais em um cabeçalho, e gera Swift que usa só o Foundation. Um corpo JSON vira um dicionário Swift passado pelo JSONSerialization em vez de uma string opaca, então continua legível e fácil de editar.
Recursos
- Analisa -X, -H, -d, --data-raw, --json, -u, -b, -A, -e e -G como o curl faz
- Gera código URLSession que não precisa de nada além do Foundation
- Corpos JSON representados como dicionário Swift e codificados com JSONSerialization
- Autenticação básica reconstruída a partir das credenciais, com base64EncodedString
- Método deduzido da presença de um corpo, ou tirado de -X
- Avisa sobre opções do curl sem equivalente razoável em Swift
- Copie o código ou baixe como arquivo .swift
Como usar cURL para Swift
- Cole o comando curl, com as opções e o corpo
- Leia o Swift gerado à direita
- Confira os avisos por causa de opções que não puderam ser traduzidas
- Copie o código ou baixe como arquivo .swift
Exemplo
Entrada
curl https://api.example.com/users -H 'Content-Type: application/json' -d '{"name":"Ada"}'
Saída
var request = URLRequest(url: url)
request.httpMethod = "POST"
request.setValue("application/json", forHTTPHeaderField: "Content-Type")
O método é deduzido do corpo, exatamente como o curl deduziria.
Erros comuns e solução de problemas
- A requisição funciona no curl mas falha no app. — Confira o App Transport Security. O iOS bloqueia HTTP em claro por padrão, então um endpoint http:// que o curl alcança sem problema precisa de exceção no Info.plist ou de uma URL https.
- O código compila mas não imprime nada. — URLSession é assíncrono. Em uma ferramenta de linha de comando o processo termina antes de o bloco de conclusão rodar: mantenha o run loop vivo ou passe para a forma async/await de data(for:).
- Uma opção -k ou --insecure foi ignorada. — De propósito. Pular a validação do certificado exige um URLSessionDelegate e é uma decisão que convém tomar explicitamente.
- Caracteres especiais no corpo saem errados. — Confira as aspas do comando original. Um corpo entre aspas duplas já passou pelo seu shell, então o que ele expandiu ficou gravado no que o curl recebeu.
Perguntas frequentes
- O Swift gerado funciona em iOS, macOS e Linux?
- Sim. Ele usa URLSession do Foundation, disponível nas plataformas da Apple e no swift-corelibs-foundation no Linux, então o mesmo arquivo compila também em um projeto de servidor.
- Posso obter código com async/await em vez de bloco?
- A forma gerada usa uma data task com bloco de conclusão, que funciona em toda parte. Trocar por `let (data, response) = try await URLSession.shared.data(for: request)` é uma linha só.
- Como um corpo JSON é tratado?
- Ele é analisado e representado como dicionário [String: Any] do Swift, depois codificado com JSONSerialization. Assim a carga continua legível e você edita valores sem mexer em uma string escapada.
- O que acontece com cookies de uma opção -b?
- Viram um cabeçalho Cookie na requisição. Vale lembrar que o URLSession tem o próprio armazenamento de cookies, que pode acrescentar ou sobrescrever se a sessão não for configurada.
- Meu comando curl é enviado ao convertê-lo para Swift?
- Não. O comando é analisado e o código gerado no seu navegador, o que importa porque comandos curl de documentação e de logs muitas vezes contêm chaves de API reais.
Ferramentas relacionadas
- cURL para Fetch — Converta um comando curl em uma chamada fetch() de JavaScript.
- curl para Python — Converta um comando curl em um script Python com a biblioteca requests.
- curl para Node.js — Converta um comando curl em uma requisição Node.js com axios.
- cURL para Java — Converte um comando curl em código Java com HttpClient.
- cURL para Dart — Converte um comando curl em código Dart com package:http.
- Cliente de API — Envie requisições HTTP, monte cabeçalhos e parâmetros e inspecione respostas; salva as últimas 25.
Todas as ferramentas de ArrayKit