Swift 中的 HTTP 请求

问题描述 投票:0回答:6

我正在尝试了解如何在 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()
ios swift nsurlsession
6个回答
26
投票

尝试添加这行代码:

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

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)

11
投票

Swift 3 代码:

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

import PlaygroundSupport
PlaygroundPage.current.needsIndefiniteExecution = true

5
投票

尝试下面的行,我想它会起作用:

XCPlaygroundPage.currentPage.needsIndefiniteExecution = true

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()

0
投票

我的答案不正确,这实际上只是在playgound中的无限页面执行。会话类型并不重要。

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

该错误是由使用

URLSession.shared()
引起的,这显然在操场沙箱中是不允许的。

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

let session = URLSession(configuration: URLSessionConfiguration.ephemeral)

最新问题
© www.soinside.com 2019 - 2025. All rights reserved.