为什么这种卷曲用法在Windows上有效,但在OSX / iOS上无效?

时间:2018-07-20 15:42:34

标签: ios windows macos curl basic-authentication

我在服务器上安装了一个插件,该插件可以验证用户凭据,并以“有效”或“无效”作为响应。

在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请求之间有几层,我不清楚问题可能在哪里潜伏。

我确保卷曲版本在彼此相距几个月之内。

1 个答案:

答案 0 :(得分:0)

Windows 上,正确的格式为:     curl -X POST RETEDTED -H“授权:基本已删除” -F用户名=已删除-F密码=已删除

但是在 OSX 上,正确的格式为:     curl -X POST RETEDTED -H“授权:基本已删除” -F username = REDACTED -F'password = REDACTED'

密码字段必须用引号引起来。