我正在尝试将我的图像从iPhone库上传到我在PHP上运行的Web服务器.对于上传请求,我使用URLSession并从iPhone Gallery UIImagePicker中选择图像.
我从iPhone 7和iPhone模拟器中收到此错误.
来自控制台的错误代码在这里
2018-06-19 12:06:56.076335+0200 google01[4054:1274269] [MC] System group container for systemgroup.com.apple.configurationprofiles path is /private/var/containers/Shared/SystemGroup/systemgroup.com.apple.configurationprofiles
2018-06-19 12:06:56.077701+0200 google01[4054:1274269] [MC] Reading from public effective user settings.
2018-06-19 12:06:56.077701+0200 google01[4054:1274269] [MC] Reading from public effective user settings.
2018-06-19 12:07:00.633120+0200 google01[4054:1274376] [BoringSSL] Function boringssl_session_errorlog: line 2878 [boringssl_session_write] SSL_ERROR_SYSCALL(5): operation failed externally to the library
2018-06-19 12:07:00.644399+0200 google01[4054:1274552] [discovery] errors encountered while discovering extensions: Error Domain=PlugInKit Code=13 "query cancelled" UserInfo={NSLocalizedDescription=query cancelled}
2018-06-19 12:07:00.668971+0200 google01[4054:1274376] [BoringSSL] Function boringssl_session_errorlog: line 2878 [boringssl_session_write] SSL_ERROR_SYSCALL(5): …Run Code Online (Sandbox Code Playgroud) image-uploading uiimagepickercontroller ios urlsession swift4
我对这篇文章的问题非常相似,但我不完全理解答案.我已经创建了一个完成处理程序,但它似乎没有按预期工作.
func updateTeam(teamID: Int) {
startConnection {NSArray, Int in
//Do things with NSArray
}
}
func startConnection(completion: (NSArray, Int) -> Void) {
let url = URL(string: "http://www.example.com/path")
var request : URLRequest = URLRequest(url: url!)
request.httpMethod = "POST"
let postString = "a=\(Int(teamInput.text!)!)"
request.httpBody = postString.data(using: .utf8)
let dataTask = URLSession.shared.dataTask(with: request) {
data,response,error in
print("anything")
do {
if let jsonResult = try JSONSerialization.jsonObject(with: data!, options: []) as? NSDictionary {
self.teamResult = jsonResult
print(jsonResult)
}
} catch let error as …Run Code Online (Sandbox Code Playgroud) 在我们的应用程序中,我们通过服务器发送的事件请求信息流。为此,我们使用
引擎盖下使用的小型库IKEEventSourceFoundation.URLSession。
此信息以小型 JSON 包发送,例如:
{"type":"update","data":{"id":"1234","name":"someName","someOtherField":33,"size":"20","someAddress":"Awesome Street 111"}}
现在这对我们来说效果很好,但我们注意到有时会出现以下错误:
Error Domain=kCFErrorDomainCFNetwork Code=303 "(null)" UserInfo={NSErrorPeerAddressKey=<CFData 0x610000a84510 [0x103ccbe40]>{length = 16, capacity = 16, bytes = 0x100201bbb9131fbd0000000000000000}, _kCFStreamErrorCodeKey=-2201, _kCFStreamErrorDomainKey=4}
我理解的是kCFErrorHTTPParseFailure它试图解析的字符串似乎只是 JSON 包的一部分,例如:
{"type":"update","data":{"id":"1234","name":"so
我们目前的理解是,URLSession 正在缓冲数据,有时它会填满,最后一部分会被切掉。我们可以在终端中使用curl http://our.service.com并查看一个工作示例curl -N http://our.service.com
有人知道如何将此选项添加到URLSession,URLSessionConfiguration或URLSessionTask. 或者是否有人有其他解释或解决方案(可能是服务器端)由于此错误,我们的用户有时会错过对数据的更新,我们认为这是一些无法解释的反馈的原因。
顺便说一句,我们在相应的 Android 应用程序中遇到了同样的问题
构建 SwiftUI 应用程序的网络层的行之有效的方法是什么?具体来说,您如何使用 URLSession 来构建要在 SwiftUI 视图中显示的 JSON 数据并处理从 iOS 13.4 开始可以正确发生的所有不同状态?
我今天升级到最新的 Xcode 12.5 Beta 2,现在我的所有 URLSession.dataTask 请求都失败并超时。我创建了一个示例项目,它提出了一个简单的请求,但每次都失败了。它适用于 Xcode 12.5 Beta 1。
这是一个简单的请求:
guard let url = URL(string: "https://hacker-news.firebaseio.com/v0/item/8863.json?print=pretty") else { fatalError() }
let startTime = Date()
let task = URLSession.shared.dataTask(with: url) { data, response, error in
let requestTime = Date().timeIntervalSince(startTime)
print("Time for request: \(requestTime)")
if let error = error {
updateLabel("requestTime: \(requestTime)\nError: \(error.localizedDescription)")
return
}
guard let httpResponse = response as? HTTPURLResponse,
(200...299).contains(httpResponse.statusCode) else {
updateLabel("requestTime: \(requestTime)\n\(response.debugDescription)")
return
}
if let mimeType = httpResponse.mimeType, mimeType == "text/html",
let data = …Run Code Online (Sandbox Code Playgroud) 我对 Swift 编码还很陌生,目前正在开发我的第一个 iOS 应用程序。我的应用程序的一部分必须通过发出请求并解析它返回的 JSON 来与 Spotify API 进行通信。我有一个相对简单的async函数来实现这一点,并且在大多数情况下,它效果很好。不过,我最近以语句的形式向该函数添加了一些附加功能if,用于调整目标 URL 的构建方式。周围的代码是相同的,甚至使用request共享的。URLSession
这是我正在讨论的函数的片段:
// build the request
var request: URLRequest
if (id != nil) {
// failing case
let url = URL(string: "https://api.spotify.com/v1/track/\(id!)")!
request = URLRequest(url: url)
} else {
// working case
var url = URLComponents(string: "https://api.spotify.com/v1/search")!
url.queryItems = [
URLQueryItem(name: "q", value: self.queryString),
URLQueryItem(name: "type", value: self.typeString)
]
request = URLRequest(url: url.url!)
}
request.httpMethod = "GET"
request.addValue("Bearer \(self.qe.accessToken!)", forHTTPHeaderField: "Authorization")
// …Run Code Online (Sandbox Code Playgroud) 我正在请求如下所示的 JSON-API:
var request = URLRequest(url: url)
request.httpMethod = "GET"
request.addValue(CredentialsProvider.shared.credentials, forHTTPHeaderField: "Authorization")
let task = URLSession.shared.dataTask(with: request as URLRequest) { data, response, error in
guard let data = data, let _ = response, error == nil else {
return
}
let response1 = response as! HTTPURLResponse
print(response1.statusCode) // 200 instead of 304
}
Run Code Online (Sandbox Code Playgroud)
由于服务器进行缓存(我通过 CharlesProxy 验证),我预计状态代码为 304,但已记录 200 - 有没有办法获取“真实”状态代码?
我正在尝试对我运行的网站执行查询。然而,目前该网站的证书无效(目前有正当理由)。
\n\n我正在尝试使用以下代码查询它:
\n\nprivate static func performQuery(_ urlString: String) {\n guard let url = URL(string: urlString) else {\n return\n }\n print(url)\n URLSession.shared.dataTask(with: url) {\n (data, response, error) in\n if error != nil {\n print(error!.localizedDescription)\n }\n guard let data = data else {\n return\n }\n do {\n let productDetails = try JSONDecoder().decode([ProductDetails].self, from: data)\n DispatchQueue.main.async {\n print(productDetails)\n }\n } catch let jsonError {\n print(jsonError)\n }\n }.resume()\n}\nRun Code Online (Sandbox Code Playgroud)\n\n但是,我得到:
\n\nNSURLSession/NSURLConnection HTTP load failed (kCFStreamErrorDomainSSL, -9813)\nThe certificate for this server is …Run Code Online (Sandbox Code Playgroud) 我正在尝试使用新的组合框架解析 JSON。但是,我所做的每一次尝试都会返回一个取消的错误。当我使用完全相同的 url 而没有组合时,它工作正常。
底部函数工作正常,无论我做什么,顶部函数都会给我一个错误。
static func performNetworkRequestUsingCombine(url urlWithQuery:URL){
//let decoder = JSONDecoder()
let publisher = URLSession.shared.dataTaskPublisher(for: urlWithQuery)
.map({$0.data})
.eraseToAnyPublisher()
.sink(receiveCompletion: { (status) in
switch status {
case .failure(let incomingError):
print(incomingError.localizedDescription)
case .finished:
break
}
}) { (data) in
let dataString = String(data: data, encoding: .utf8)
print(dataString!)
}
publisher.cancel()
}
static func performNetworkRequest(url urlWithQuery: URL, dataValue : @escaping (WeatherObject)->Void){
let decoder = JSONDecoder()
let task = URLSession.shared.dataTask(with: urlWithQuery) { (data, response, error) in
if error != nil {
print(error!.localizedDescription)
return …Run Code Online (Sandbox Code Playgroud) 我的网络逻辑中有以下代码:
let task = urlSession.dataTask(with: request) { [weak self] (data, response, error) in
if let error = error {
if error.localizedDescription.contains("The request timed out") {
// request timeout stuff ...
} else {
// other errors
}
}
}
Run Code Online (Sandbox Code Playgroud)
字符串匹配localizedDescription不是好的代码实践。如何像 in 子句一样获取错误的类型catch?
urlsession ×10
ios ×9
swift ×7
xcode ×4
async-await ×1
combine ×1
https ×1
nsurlsession ×1
swift4 ×1
swiftui ×1
urlrequest ×1