我在我的服务器上安装了一个插件,用于验证用户凭据,基本上以“有效”或“无效”作为响应。
在 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 版本彼此相差几个月。
在Windows 上,正确的形式是: curl -X POST REDACTED -H "Authorization: Basic REDACTED" -F username=REDACTED -F password=REDACTED
但在OSX 上,正确的形式是: curl -X POST REDACTED -H "Authorization: Basic REDACTED" -F username=REDACTED -F 'password=REDACTED'
密码字段需要用引号引起来。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句