gpt4 book ai didi

swift - 使用带参数的 NSURLSession (HTTP POST) 下载 PDF

转载 作者:行者123 更新时间:2023-11-30 13:29:15 25 4
gpt4 key购买 nike

我在使用 NSURLSession 和 POST 下载 PDF 文件时遇到问题。我的下载网址与其他网址不同,因为它没有以文件扩展名结尾,而且还需要参数来下载该文件文件。

它来自 ASPX 基础服务器并返回这样的 url

http://example.com/DownloadPDF.aspx?File=ES2Ges%2BUA1CEe1150UF3uUgEDeCEMoIuOrJCbwjzVKCEfA6%2F1zKxycl6MMWcjvtk

如果我必须访问 pdf 并下载它,我必须提供 2 个参数ConfigKeyIDAccessToken。有一点奇怪的是,这是 POST 请求。由于Alamofire仅支持下载GET请求,因此,我必须使用NSURLSession编写自己的内容。但是,我在访问时遇到问题我的代码中的文件,因为它返回带有 401 的 html 页面。

这是 html:

401 - 未经授权:由于凭据无效,访问被拒绝。

服务器错误

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 下载文件。所以,我认为我的代码有问题。有什么帮助吗?

最佳答案

身份验证可能不仅仅需要 POST 请求字段。它可能使用 cookie 或身份验证 header (基于实际凭据)。

如果我错了,那么我会检查以下内容:

  • 在将这两个神奇值添加到 POST 正文之前,请确保它们已正确进行 URL 编码。
  • 确保您设置了 Content-Type header ,以便服务器知道您正在以 x-www-form-urlencoded 格式提供正文。
  • 使用 Wireshark 嗅探请求并查看实际发送的内容。
  • 如果可以的话请检查服务器日志。

关于swift - 使用带参数的 NSURLSession (HTTP POST) 下载 PDF,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36762491/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com