iOS - 带摘要的网络调用
iOS - network call with digest
所以我们开始在项目中使用摘要机制。
在 vc 我有以下方法:
func imageThumbnailcall() {
self.indicaotrTimer = Timer.scheduledTimer(timeInterval: 1, target: self, selector: #selector(self.HandleOverTime), userInfo: nil, repeats: false)
self.backgroundImageTimer = Timer.scheduledTimer(withTimeInterval: 0.09, repeats: true, block: { (timer) in
SDWebImageDownloader.shared().setValue("\(UserDefaults.standard.string(forKey: "imageHeader") ?? "YWRtaW46YWRtaW4=")", forHTTPHeaderField: "Authorization")
SDWebImageDownloader.shared().downloadImage(with:(self.isShowingThermal ? self.thermalUrl : self.visualUrl) as URL, options: [], progress: nil, completed: { (image, data, error, status) in
self.imageLoaderIndicator.stopAnimating()
self.backGroundImageView.image = image
})
})
}
在上面的调用中,我需要用摘要替换 header,所以我进行了一次 alamofire 调用,得到了 401 错误,并得到了 headers:
- some : <NSHTTPURLResponse: 0x1d42265a0> { URL: http://192.168.42.1/images/snapshots/DLTVimage.jpeg } { Status Code: 401, Headers {
Connection = (
"keep-alive"
);
"Content-Length" = (
195
);
"Content-Type" = (
"text/html"
);
Date = (
"Tue, 02 Oct 2018 13:22:25 GMT"
);
"Www-Authenticate" = (
"Digest algorithm=\"MD5\", qop=\"auth\", realm=\"Restricted access\", nonce=\"18f42caa5bb37111\""
);
} }
我的理解是我需要创建一个这样的字符串:
Digest username="admin",realm="Restricted access",nonce="1d382e075bac95ba",uri="/images/snapshots//IRimage.jpeg",response="54c5aad4e9854201c5e66375f41769d2",cnonce="db860bdba0f3f328",algorithm=MD5,qop=auth,nc=00000001"
并将其用作header。
我可以临时做吗?有没有 pod 可以帮忙?
所以我做的是以下方法:
func imageStreamTest(url: String, success: @escaping (UIImage) -> Void, failure: @escaping () -> Void) {
Alamofire.request(url).authenticate(user: UserDefaults.standard.string(forKey: "userName") ?? "", password: UserDefaults.standard.string(forKey: "password") ?? "").responseData { (responseObject) -> Void in
if responseObject.error != nil {
return
}
if let image1 = responseObject.result.value {
guard let image = UIImage(data: image1) else { return }
success(image)
}
}
}
Alamofire 正在处理摘要式身份验证,我得到了 200 的数据。
在后台发生 401 故障并由 alamofire
处理
所以我们开始在项目中使用摘要机制。 在 vc 我有以下方法:
func imageThumbnailcall() {
self.indicaotrTimer = Timer.scheduledTimer(timeInterval: 1, target: self, selector: #selector(self.HandleOverTime), userInfo: nil, repeats: false)
self.backgroundImageTimer = Timer.scheduledTimer(withTimeInterval: 0.09, repeats: true, block: { (timer) in
SDWebImageDownloader.shared().setValue("\(UserDefaults.standard.string(forKey: "imageHeader") ?? "YWRtaW46YWRtaW4=")", forHTTPHeaderField: "Authorization")
SDWebImageDownloader.shared().downloadImage(with:(self.isShowingThermal ? self.thermalUrl : self.visualUrl) as URL, options: [], progress: nil, completed: { (image, data, error, status) in
self.imageLoaderIndicator.stopAnimating()
self.backGroundImageView.image = image
})
})
}
在上面的调用中,我需要用摘要替换 header,所以我进行了一次 alamofire 调用,得到了 401 错误,并得到了 headers:
- some : <NSHTTPURLResponse: 0x1d42265a0> { URL: http://192.168.42.1/images/snapshots/DLTVimage.jpeg } { Status Code: 401, Headers {
Connection = (
"keep-alive"
);
"Content-Length" = (
195
);
"Content-Type" = (
"text/html"
);
Date = (
"Tue, 02 Oct 2018 13:22:25 GMT"
);
"Www-Authenticate" = (
"Digest algorithm=\"MD5\", qop=\"auth\", realm=\"Restricted access\", nonce=\"18f42caa5bb37111\""
);
} }
我的理解是我需要创建一个这样的字符串:
Digest username="admin",realm="Restricted access",nonce="1d382e075bac95ba",uri="/images/snapshots//IRimage.jpeg",response="54c5aad4e9854201c5e66375f41769d2",cnonce="db860bdba0f3f328",algorithm=MD5,qop=auth,nc=00000001"
并将其用作header。 我可以临时做吗?有没有 pod 可以帮忙?
所以我做的是以下方法:
func imageStreamTest(url: String, success: @escaping (UIImage) -> Void, failure: @escaping () -> Void) {
Alamofire.request(url).authenticate(user: UserDefaults.standard.string(forKey: "userName") ?? "", password: UserDefaults.standard.string(forKey: "password") ?? "").responseData { (responseObject) -> Void in
if responseObject.error != nil {
return
}
if let image1 = responseObject.result.value {
guard let image = UIImage(data: image1) else { return }
success(image)
}
}
}
Alamofire 正在处理摘要式身份验证,我得到了 200 的数据。 在后台发生 401 故障并由 alamofire
处理