当我试图从我的内部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)
}
}
这是我收到的错误
Error Domain=NSURLErrorDomain Code=-999"已取消"UserInfo={NSErrorFailingURLKey=https://myhttpsinternaldomain.org, NSLocalizeddescription ption=已取消, NSErrorFailingURLStringKey=https://myhttpsinternaldomain.org}
我找到了这个,但我的项目中没有令牌。我只想使用用户名和密码,或者忽略挑战
请任何帮助
您不能像在邮递员中那样在标题中发送用户名和密码。你必须把它们改成bas64。这就是邮递员在后台将您的凭据添加到标题时所做的。
// Your hostname and endpoint
let hostname = "myhttpsinternaldomain.org"
let cert = "YOUR_CERT" // e.g. for cert.der, this should just be "cert"
// Set up certificates
let pathToCert = Bundle.main.path(forResource: cert, ofType: "der")
let localCertificate = NSData(contentsOfFile: pathToCert!)
let certificates = [SecCertificateCreateWithData(nil,
localCertificate!)!]
// Configure the trust policy manager
let serverTrustPolicy = ServerTrustPolicy.pinCertificates(
certificates: certificates,
validateCertificateChain: true,
validateHost: true
)
let serverTrustPolicies = [hostname: serverTrustPolicy]
let serverTrustPolicyManager = ServerTrustPolicyManager(policies:
serverTrustPolicies)
// Configure session manager with trust policy
let defaultManager = Alamofire.SessionManager(
configuration: URLSessionConfiguration.default,
serverTrustPolicyManager: serverTrustPolicyManager
)
let url = URL(string: urlString)
let user = "user"
let password = "password"
let base64 = "\(user):\(password)".toBase64()
let header = [
"Authorization": "Basic \(base64)"
]
//Added encoding type in the request. Change and try other types too. Like JSONEncoding.default
defaultManager.request(url!, method: .get, encoding: URLEncoding.default ,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)
}
}
extension String {
func toBase64() -> String {
return Data(self.utf8).base64EncodedString()
}
}
知道了!或者更确切地说,我找到了正确的一页,让我找到了答案。Github页面服务器信任策略管理器,并使用Alamofire连接到自签名服务器
最初,在SSL拒绝我的身份验证之后,我会得到一个310错误。
然后我添加了我最初发布的manager类,并收到一个-999错误,表示该类已被“取消”。感谢上面的Github页面,原因是我需要
"请确保保留对新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)
)
}()
}
然后阿拉莫菲尔呼叫
// 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)
}
}
P. S JSON()方法是快速的JSON,以防有人混淆
OWASP网站只包含Objective-C和NSURLConnection的示例。
问题内容: 我正在尝试使用swift和firebase在iOS项目中创建用户按钮时添加错误处理: 这是按钮的代码: 我不确定switch语句中错误的语法是否正确! 因为当我在模拟器中对其进行测试时,它始终会给我提供默认情况,这是未知错误!+我在文档中找不到语法:https : //firebase.google.com/docs/auth/ios/errors 因此,使用新的firebase和sw
我试图更准确地理解斯威夫特的“关闭”。 但是和太难理解了 我搜索了许多Swift帖子和官方文件,但我觉得这仍然不够。 这是官方文件的代码示例 听说使用< code>@escaping有两种方式和原因 第一个用于存储闭包,第二个用于异步操作目的。 以下是我的问题: 首先,如果执行,则将使用闭包参数执行,并且该闭包将保存在全局变量数组中。 我认为闭包是{self.x=100} {self.x=100}
关键技术和挑战 从技术角度讲,区块链涉及到的领域比较杂,包括分布式、存储、密码学、心理学、经济学、博弈论、网络协议等,下面列出了目前认为有待解决或改进的关键技术点。 密码学技术 怎么防止交易记录被篡改? 怎么证明交易方的身份? 怎么保护交易双方的隐私? 密码学正是要提供解决这些问题的有效手段。传统方案包括 hash 算法,加解密算法,数字证书和签名(盲签名、环签名)等。区块链技术的应用将可能刺激密
我正在浏览应用程序包 对于这两个应用程序,方法都是:公钥锁定 对于Android系统,我没有问题为两个不同的域名创建两个公钥,我必须握手。 这是我的问题,, 对于IOS react native,我可以包括两个。用于公钥固定的cer? 根据他们的IOS文档: (如果您正在使用证书锁定,请跳过此操作)无需额外的公钥锁定步骤,AFNetwork将从证书中提取公钥。 因此,公钥不需要额外的步骤,对于IO
我有一个jsp页面和一个servlet,在jsp页面中我有两个表单,每一个都是选择输入类型,即选择class和选择student。当我从select下拉菜单中选择class时,通过onchange事件,它将转到abcServlet,从servlet中检索该类,并将其转发到jsp页面,转到jsp页面中的下一个表单,select student,它再次提交到同一个servlet,从他们的servlet