curl -L 通过 Alamofire for Swift 3 从 Box 获取文件内容

Posted

技术标签:

【中文标题】curl -L 通过 Alamofire for Swift 3 从 Box 获取文件内容【英文标题】:curl -L to get file contents from Box through Alamofire for Swift 3 【发布时间】:2016-10-31 21:28:52 【问题描述】:

我正在尝试通过他们在 Swift 中的 API 获取 Box 上的文件内容。

curl -L https://api.box.com/2.0/files/file_id/content -H "Authorization: Bearer access_token"

返回正确的内容,但是

curl https://api.box.com/2.0/files/file_id/content -H "Authorization: Bearer access_token"

没有。 所以“-L”部分似乎很关键。

目前为止

    let headers = [
        "grant_type": "client_credentials",
        "Authorization": "Bearer \(token)",
        "scope": "public"
    ]

    Alamofire.request("https://api.box.com/2.0/files/file_id/content", headers: headers).responseJSON  responseFile in

        if let dataFile = responseFile.result.value 
            print("JSON: \(dataFile)")
        
    

如何在其中添加“-L”部分?

整体结构应该是正确的,因为我可以通过从 url 中删除“/content”来成功获取文件的元数据。

【问题讨论】:

【参考方案1】:

根据curl手册-L/--location参数的意思

如果服务器报告请求的页面已移动到不同的位置(用 Location: 标头和 3XX 响应代码指示),此选项将使 curl 在新位置重做请求。

所以,我想,您必须检查响应状态代码,如果它是 3xx,您需要处理重定向。检查有关此的 Alamofire 框架文档。

阅读基础知识也很不错Handling Redirects and Other Request Changes

【讨论】:

谢谢!我通过获取重定向 url 并提交另一个请求来解决它。【参考方案2】:

根据 a-a-m 的回答,我得到了它使用以下代码。

请注意,我在第二个请求中使用了 responseString 而不是 responseJSON,因为响应是文件格式而不是 JSON 格式。

    Alamofire.request("https://api.box.com/2.0/files/\(file_id)/content", headers: headers).responseJSON  responseFile in

        if let newUrl = responseFile.response?.url 
            print("new link: \(newUrl)")

            //make another request using the redirection url
            Alamofire.request(newUrl).responseString  content in 

                let filecontent = content.result.value
                print (filecontent)
                self.contentText.text = filecontent
                debugPrint(contents)
                
            
        
    

【讨论】:

以上是关于curl -L 通过 Alamofire for Swift 3 从 Box 获取文件内容的主要内容,如果未能解决你的问题,请参考以下文章

带参数的 CURL 请求的 Alamofire

等效的 Swift NSURLSession 或 Alamofire Curl 帖子

Alamofire 的格式化字典

alamofire 499 使用标头和参数发出获取请求时

如何使用操作查询发出多个 Alamofire 请求

如何在 Alamofire Swift 的 POST 请求中添加标头参数(-H、-u、-X、-d)