cURL转Swift

粘贴curl命令,得到用URLSession发出同样请求的Swift代码。

cURL转Swift在浏览器中解析你的命令,令牌和凭据不会离开你的设备。

由 Udit Agarwal 开发和维护

试试API客户端

关于 cURL转Swift

API文档说的是curl,iOS应用说的是URLSession,手工翻译是件重复而容易出小错的活:漏掉一个请求头、该做JSON的请求体留成了字符串、认证参数被悄悄忽略。这个转换工具按curl自己的规则解析命令,包括那些会改变方法或把凭据折进请求头的参数,并生成只依赖Foundation的Swift代码。JSON请求体会写成Swift字典再交给JSONSerialization,而不是一串不透明的字符串。

功能特性

  • 按curl的规则解析-X、-H、-d、--data-raw、--json、-u、-b、-A、-e和-G
  • 生成除Foundation之外无需任何依赖的URLSession代码
  • JSON请求体写成Swift字典并用JSONSerialization编码
  • 基本认证由凭据重新拼装,代码里使用base64EncodedString
  • 有请求体时自动推断方法,或直接取自-X
  • 对没有合理Swift对应写法的curl参数给出提示
  • 可复制代码或下载为.swift文件

如何使用 cURL转Swift

  1. 连同参数和请求体一起粘贴curl命令
  2. 在右侧阅读生成的Swift代码
  3. 查看提示,确认有没有参数无法翻译
  4. 复制代码或下载为.swift文件

示例

输入

curl https://api.example.com/users -H 'Content-Type: application/json' -d '{"name":"Ada"}'

输出

var request = URLRequest(url: url)
request.httpMethod = "POST"
request.setValue("application/json", forHTTPHeaderField: "Content-Type")

方法由是否有请求体推断得出,和curl的判断方式一致。

常见错误与故障排除

  • curl里能跑,应用里却失败。 — 请检查App Transport Security。iOS默认阻止明文HTTP,所以curl能访问的http://端点需要在Info.plist里开例外,或者改用https。
  • 代码能编译,却什么都没打印。 — URLSession是异步的。在命令行工具里,完成回调还没跑进程就结束了:保持运行循环,或改用async/await形式的data(for:)。
  • -k或--insecure参数被忽略了。 — 这是有意为之。跳过证书校验需要URLSessionDelegate,这个决定应该由你显式作出。
  • 请求体里的特殊字符不对。 — 请检查原命令的引号。用双引号包起来的请求体已经先经过了你的shell。

常见问题

生成的Swift能在iOS、macOS和Linux上运行吗?
可以。它使用Foundation的URLSession,苹果平台原生支持,Linux上有swift-corelibs-foundation,同一个文件在服务端项目里也能编译。
能生成async/await而不是完成回调吗?
生成的是带完成回调的数据任务,到处都能用。改成`let (data, response) = try await URLSession.shared.data(for: request)`只是一行的事。
JSON请求体是怎么处理的?
先解析再写成Swift的[String: Any]字典,然后用JSONSerialization编码。这样负载依旧可读,改值也不用碰转义字符串。
-b带的cookie会怎样?
会变成请求上的Cookie头。要注意URLSession自带cookie存储,若不另行配置可能会追加或覆盖。
我的curl命令会被发送出去吗?
不会。命令在你的浏览器里解析、代码也在本地生成——这一点很要紧,因为文档和日志里的curl命令常常带着真实的API密钥。

相关工具

  • cURL 转 Fetch — 将 curl 命令转换为 JavaScript 的 fetch() 调用。
  • curl 转 Python — 将 curl 命令转换为可运行的 Python requests 代码。
  • curl 转 Node.js — 将 curl 命令转换为 Node.js axios 请求代码。
  • cURL 转 Java — 把 curl 命令转成使用 HttpClient 的 Java 代码。
  • cURL转Dart — 把curl命令转成使用package:http的Dart代码。
  • API 客户端 — 发送 HTTP 请求,构建头部和参数并查看响应;保存最近 25 条记录。

更多API 工具工具

查看全部API 工具工具 (24) · 全部工具