我使用POST NSURLSession
下载PDF文件时出现问题。我的下载网址与其他网页不同,因为它没有以文件扩展名结尾,也需要参数来下载该文件。< / p>
它来自ASPX基本服务器并返回这样的URL
http://example.com/DownloadPDF.aspx?File=ES2Ges%2BUA1CEe1150UF3uUgEDeCEMoIuOrJCbwjzVKCEfA6%2F1zKxycl6MMWcjvtk
如果我必须访问pdf并下载它,我必须提供2个参数
ConfigKeyID
和AccessToken
。有一点奇怪的是它是POST请求。
由于Alamofire
仅支持GET
下载请求,因此,我必须使用NSURLSession
编写自己的自我。但是,我有从代码访问文件的问题,因为它返回html页面401。
这是html:
401 - 未经授权:由于凭据无效,访问被拒绝。
这是我的代码
protocol PDFDownloadAPIProtocol{
func didSuccessGettingPDF()
func didFailGettingPDF(err:NSError)
}
class PDFDownloadAPI{
var delegate : InvoicePDFDownloadAPIProtocol
init(delegate: InvoicePDFDownloadAPIProtocol){
self.delegate=delegate
}
func post(url:String,accessToken:String,configKey :String){
let url:NSURL = NSURL(string: url)!
print(url)
let session = NSURLSession.sharedSession()
let request = NSMutableURLRequest(URL: url)
request.HTTPMethod = "POST"
request.cachePolicy = NSURLRequestCachePolicy.ReloadIgnoringCacheData
let param = "ConfigKeyID=\(configKey)&AccessToken=\(accessToken)"
request.HTTPBody = param.dataUsingEncoding(NSUTF8StringEncoding)
let task = session.downloadTaskWithRequest(request) {
(
let location, let response, let error) in
guard let _:NSURL = location, let _:NSURLResponse = response where error == nil else {
print("Location Error")
self.delegate.didFailGettingPDF(error!)
return
}
let urlContents = try! NSString(contentsOfURL: location!, encoding: NSUTF8StringEncoding)
guard let _:NSString = urlContents else {
print("Content Error")
self.delegate.didFailGettingPDF(error!)
return
}
print("Downloaded Content : \(urlContents)")
self.delegate.didSuccessGettingPDF()
}
task.resume()
}
func doDownloadData(url : String,accessToken:String,configKey : String){
post(url,accessToken: accessToken,configKey : configKey)
}
}
当我尝试使用Postman
所有工作文件时,我甚至可以从chrome.So下载文件,我认为我的代码有问题。任何帮助?
答案 0 :(得分:0)
有可能,身份验证需要的不仅仅是POST请求字段。它可能使用cookie或身份验证标头(基于实际凭据)。
如果我错了,请检查以下内容: