【问题标题】:Why does this curl usage work on Windows but not on OSX / iOS?为什么这种 curl 用法在 Windows 上有效,但在 OSX / iOS 上无效?
【发布时间】:2018-12-28 23:25:54
【问题描述】:

我在我的服务器上安装了一个插件,它可以验证用户凭据,响应基本上是“有效”或“无效”。

在 Windows 上,我可以通过以下方式成功查询我的服务器:

curl -X POST REDACTED -H "Authorization: Basic REDACTED" -F username=REDACTED -F password=REDACTED

特殊的、令人讨厌的注意事项——由于命令提示符处理输入的方式,Windows 上需要双引号。

但是,我无法在 OSX 或 iOS 上复制此结果。在这里,结果总是错误地“无效”。我假设在 OSX 和 Windows 之间的终端处理 curl 的输入的方式存在细微差别,因此实际的 HTTP 请求与 Windows 有所不同。所以我尝试在 Swift 中更直接地发出 HTTP 请求:

let loginString = String(format: "%@:%@", REDACTED, REDACTED)
let loginData = loginString.data(using: String.Encoding.utf8)!
let base64LoginString = loginData.base64EncodedString()

let url = URL(string: REDACTED)!
var request = URLRequest(url: url)
request.httpMethod = "POST"
request.setValue("Basic \(base64LoginString)", forHTTPHeaderField: "Authorization")
request.setValue("application/x-www-form-urlencoded", forHTTPHeaderField: "Content-Type")
request.httpBody = "username=\(String(describing: username.text))&password=\(String(describing: password.text))".data(using: .utf8)

而且结果是一样的; '无效的'。用户提供的信息和传出的 HTTP 请求之间有几层,我不清楚问题可能潜伏在哪里。

我确保 curl 版本在几个月内相互更新。

【问题讨论】:

    标签: ios windows macos curl basic-authentication


    【解决方案1】:

    Windows 上,正确的格式是: curl -X POST REDACTED -H "授权:基本已编辑" -F 用户名=已编辑 -F 密码=已编辑

    但在 OSX 上,正确的格式是: curl -X POST REDACTED -H "Authorization: Basic REDACTED" -F username=REDACTED -F 'password=REDACTED'

    密码字段需要用引号引起来。

    【讨论】:

      猜你喜欢
      • 2012-09-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-11-01
      • 2014-12-24
      相关资源
      最近更新 更多