【发布时间】: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