plg*_*lso 0 json challenge-response swift alamofire
当我尝试从内部 Web 服务器获取 json 时,我需要应对挑战。我从上一个问题中遵循了这一点。这是我的代码
let defaultManager: Alamofire.SessionManager = {
let serverTrustPolicies: [String: ServerTrustPolicy] = [
"myhttpsinternaldomain.org": .disableEvaluation
]
let configuration = URLSessionConfiguration.default
configuration.httpAdditionalHeaders = Alamofire.SessionManager.defaultHTTPHeaders
return Alamofire.SessionManager(
configuration: configuration,
serverTrustPolicyManager: ServerTrustPolicyManager(policies: serverTrustPolicies)
)
}()
let url = URL(string: urlString)
let username = "user"
let password = "password"
let header = ["user": username, "password": password]
defaultManager.request(url!, method: .get, headers: header).responseJSON { response in
switch response.result {
case .success(let value):
let json = JSON(value)
print("JSON: \(json)")
case .failure(let error):
print(error)
}
}
Run Code Online (Sandbox Code Playgroud)
这是我收到的错误
错误域=NSURLErrorDomain Code=-999 "cancelled" UserInfo={NSErrorFailingURLKey= https://myhttpsinternaldomain.org , NSLocalizedDescription=cancelled, NSErrorFailingURLStringKey= https://myhttpsinternaldomain.org }
我找到了这个,但我的项目中没有令牌。我只想使用用户名和密码或忽略挑战
请任何帮助
知道了!或者更确切地说,我找到了正确的页面,这让我找到了答案。 Github Page Server Trust Policy Manager并使用 Alamofire 连接到自签名服务器
最初,在 SSL 拒绝我的身份验证之后,我会收到 310 错误。
然后我添加了我最初发布的经理类并收到一个 -999 错误,说它被“取消”了。感谢上面的 Github Page 原因是因为我需要
“确保保留对新 SessionManager 实例的引用,否则当您的 sessionManager 被释放时,您的请求将全部取消。”
因此,由于第二个 stackoverflow 页面,我创建了一个 NetworkManager 类,并在我的 alamofire 请求中调用它。
这是下面有效的代码,希望这会为某人节省很多时间。
// Network Manager outside view controller
class NetworkManager {
static let sharedInstance = NetworkManager()
let manager: Alamofire.SessionManager = {
let serverTrustPolicies: [String: ServerTrustPolicy] = [
"https://mydomainthatwasdrivingmebananas.com": .pinCertificates(
certificates: ServerTrustPolicy.certificates(),
validateCertificateChain: true,
validateHost: true),
"mydomainthatwasdrivingmebananas.com": .disableEvaluation
]
let configuration = URLSessionConfiguration.default
configuration.httpAdditionalHeaders = Alamofire.SessionManager.defaultHTTPHeaders
return Alamofire.SessionManager(
configuration: configuration,
serverTrustPolicyManager: ServerTrustPolicyManager(policies: serverTrustPolicies)
)
}()
}
Run Code Online (Sandbox Code Playgroud)
然后 Alamofire 电话
// Inside ViewController ViewDidLoad
NetworkManager.sharedInstance.manager.request("https://mydomainthatwasdrivingmebananas.com", method: .get).responseJSON{ response in
switch response.result {
case .success(let value):
let json = JSON(value)
print("JSON: \(json)")
case .failure(let error):
print(error)
}
}
Run Code Online (Sandbox Code Playgroud)
PS JSON() 方法是 swifty JSON,以防有人感到困惑
| 归档时间: |
|
| 查看次数: |
3472 次 |
| 最近记录: |