URLSession dataTask方法返回0字节的数据

时间:2018-01-09 15:59:30

标签: swift alamofire nsurlsession

我正在使用带有完成处理程序的URLSession的dataTask方法。响应中的错误是nil,但数据对象返回一些内容,它返回0字节的数据。

我首先使用的是Alamofire库,我认为它有问题,因为我开始使用更新版本所以我说使用我自己的Alamofire实现,所以我不必重写我已经拥有的所有调用应用

它仍然返回0字节的数据。

当我使用简单的URLSession调用在Playground中使用相同的URL时,它会起作用并返回数据,你知道可能出现什么问题吗?

我实施Alamofire(30分钟内Srsly快速和肮脏):

import Foundation

typealias DataResponse = (data: Data?, response: URLResponse?, error: Error?, request: URLRequest?, result: Result)

public class Alamofire: NSObject {

    enum Method: String {
        case get = "GET"
        case post = "POST"
    }

    fileprivate static let session = URLSession(configuration: URLSessionConfiguration.default)

    public struct request {
        var request: URLRequest? = nil
        var url: URL? = nil
        let method: Alamofire.Method?
        let parameters: Parameters?
        let headers: Headers?

        init(_ request: URLRequest, method: Alamofire.Method? = nil, parameters: Parameters? = nil, headers: Headers? = nil) {
            self.request = request
            self.url = request.url
            self.method = method
            self.parameters = parameters
            self.headers = headers
        }

        init(_ url: URL, method: Alamofire.Method? = nil, parameters: Parameters? = nil, headers: Headers? = nil) {
            self.url = url
            self.request = URLRequest(url: url)
            self.method = method
            self.parameters = parameters
            self.headers = headers
        }
    }
}

typealias Parameters = [String: Any?]
typealias Headers = [String: String]

extension Alamofire.request {

    func responseData(completionHandler: @escaping (_ dataResponse: DataResponse) -> Void) {
        guard let request = request else { return }

        Alamofire.session.dataTask(with: request) { (data, response, error) in
            let result: Result
            if let error = error {
                result = Result.failure(error)
                completionHandler((data, response, error, request, result))
                return
            }

            completionHandler((data, response, error, request, Result.success))
        }.resume()
    }   
}

enum Result {
    case success
    case failure(Error)
}

2 个答案:

答案 0 :(得分:0)

因此,解决我的问题的方法是意识到数据提供者将我从数据中分离出来:)也可能发生。这可能不是一个“解决方案”,而是您必须考虑的一个选项,因为我从现在开始:D谢谢大家

答案 1 :(得分:-1)

您是否为info.plist中的允许任意加载创建了App Transport Security Execption?