swift中的HTTP请求无法正常工作

时间:2015-02-05 19:43:23

标签: ios api swift nsurlsession

我试图了解如何在Swift中使用API​​。作为一个很好的第一次测试,我想我会点击itunes API并返回一些搜索结果。我在游乐场使用以下代码。我没有收到任何错误,但我的println没有输出任何内容。谁知道什么是错的?

谢谢!

import UIKit
import XCPlayground

XCPSetExecutionShouldContinueIndefinitely()


let url = NSURL(string: "https://itunes.apple.com/lookup?id=909253")

let task = NSURLSession.sharedSession().dataTaskWithURL(url!) {(data, response, error) in
    println(NSString(data: data, encoding: NSUTF8StringEncoding))
}

task.resume()

6 个答案:

答案 0 :(得分:26)

尝试添加以下代码:

URLCache.shared = URLCache(memoryCapacity: 0, diskCapacity: 0, diskPath: nil)

答案 1 :(得分:21)

对于Swift 3 / Xcode 8.2.1,结合几个答案(rv1331,Wouter van Zuilen)给出了最好的结果,而Playground没有错误。我正在使用这个Swift 3 REST示例:

http://mrgott.com/swift-programing/30-work-with-rest-api-in-swift-3-and-xcode-8-using-urlsession-and-jsonserialization

import PlaygroundSupport
import Foundation

PlaygroundPage.current.needsIndefiniteExecution = true
URLCache.shared = URLCache(memoryCapacity: 0, diskCapacity: 0, diskPath: nil)

答案 2 :(得分:11)

Swift 3代码:

<!-- language: lang-c -->

import PlaygroundSupport
PlaygroundPage.current.needsIndefiniteExecution = true

答案 3 :(得分:5)

尝试以下行,我猜它会起作用:

XCPlaygroundPage.currentPage.needsIndefiniteExecution = true

答案 4 :(得分:0)

不确定为什么你没有看到错误 - 我明白了:

NSURLConnection/CFURLConnection HTTP load failed (kCFStreamErrorDomainSSL, -9807)

您可以使用httpbin.org更有效地测试 - 这对我来说非常有用:

let url = NSURL(string: "http://httpbin.org/get")

let task = NSURLSession.sharedSession().dataTaskWithURL(url!) {(data, response, error) in
    println(NSString(data: data, encoding: NSUTF8StringEncoding))
}

task.resume()

答案 5 :(得分:0)

我的回答是不正确的,它实际上只是在playgound indefinitite页面执行中。会话类型无关紧要。

最近遇到同样的问题并找到了解决方案。

该错误是由使用URLSession.shared()导致的,这显然是在游乐场沙箱中不允许的。

创建并使用您自己的临时URL会话:

let session = URLSession(configuration: URLSessionConfiguration.ephemeral)