2016-08-16 75 views
2

我正在做一个HTTP GET请求,随机它将返回一个空数组,每个请求返回一个200 OK状态码,是否得到正确的响应。URLSession从HTTP GET请求返回空阵列

我检查了网址的铬,他们是正确的,我一直无法在iOS以外重现此错误。我目前正在做的是递归调用这个方法直到它让我回到正确的响应。

有时它会给我一个填充数组的正确响应,有时它不会给我一个空数组,即使对于相同的调用。

func getStopEstimation(routeId: String?, stopId: String?, completion: (result: String) -> Void) { 

    let components: NSURLComponents = NSURLComponents(string: baseUrl + "GetMapStopEstimates")! 

    var queryItems: [URLQueryItem] = [] 

    let apiKeyQueryItem: URLQueryItem = URLQueryItem(name: "apikey", value: apiKey) 
    queryItems.append(apiKeyQueryItem) 

    if routeId != nil { 
     let routeIdQueryItem: URLQueryItem = URLQueryItem(name: "routeID", value: routeId) 
     queryItems.append(routeIdQueryItem) 
    } 

    if stopId != nil { 
     let stopIdQueryItem: URLQueryItem = URLQueryItem(name: "routeStopID", value: stopId) 
     queryItems.append(stopIdQueryItem) 
    } 

    components.queryItems = queryItems 

    let url: URL = components.url! 

    var request: URLRequest = URLRequest(url: url) 
    request.httpMethod = "Get" 

    let session: URLSession = URLSession.shared 

    session.dataTask(with: request) { (data: Data?, response: URLResponse?, error: NSError?) in 

    if ((error) != nil) { 
     completion(result: "No vehciles on route") 
    } 

    completion(result: self.parseStopEstimateJson(data: data!, routeId: routeId!, stopId: stopId!)) 

    }.resume() 


} 

传入parseStopEstimateJson()的数据有时是两个字节。 []

有谁知道我的电话为什么会导致不一致的响应?

回答

0

如果数据被以任何方式截断(这是唯一可能在客户端出错),它将无法解析,你会得到零或异常(不知道哪个)。

因为你得到一个空数组,这意味着服务器正在发送一个空数组,而问题在于服务器端代码,而不是客户端代码。

N.B. “GET”应该是全部大写。这也是默认设置,所以你根本不需要设置它。但这可能与失败无关。