问题标签 [urlsession]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
4567 浏览

ios - 如何在从 Swift 3 中的函数返回结果之前等待 URLSession 完成

嗨,我有一个初学者问题,我在 Swift 3 中找不到一个好的解决方案。我希望有人能够帮忙。

我有以下代码将检查用户凭据是否有效。我希望它等待请求完成,然后返回真或假。现在它正在异步发送。

此外,我检查 JSON 值的方式的任何改进也将受到欢迎。

0 投票
1 回答
1461 浏览

ios - 使用 NSURLSession 的 HTTP 基本身份验证

我正在尝试使用 实现 HTTP Basic Auth NSURLSession,但遇到了几个问题。请在回答之前阅读整个问题,我怀疑这是另一个问题的重复。

根据我运行的测试,的行为NSURLSession如下:

  • 第一个请求总是在没有Authorization标头的情况下发出的。
  • 如果第一个请求失败并带有401 Unauthorized响应和WWW-Authenticate Basic realm=...标头,则会自动重试。
  • 在重试请求之前,会话将尝试通过查看NSURLCredentialStorage会话配置或调用URLSession:task:didReceiveChallenge:completionHandler:委托方法(或两者)来获取凭据。
  • 如果可以获取凭据,则使用正确的 Authorization标头重试请求。如果不是,则在没有标头的情况下重试(这很奇怪,因为在这种情况下,这是完全相同的请求)。
  • 如果第二个请求成功,任务会透明地报告为成功,并且您甚至不会收到请求已尝试两次的通知。如果不是,则报告第二个请求失败(但不是第一个)。

这种行为的问题是我通过多部分请求将大文件上传到我的服务器,所以当请求被尝试两次时,整个POST正文被发送两次,这是一个可怕的开销。

我试图手动将Authorization标头添加到httpAdditionalHeaders会话配置中,但只有在创建会话之前设置了属性时它才有效。之后尝试修改session.configuration.httpAdditionalHeaders是行不通的。此外,文档清楚地表明Authorization不应手动设置标题。


所以我的问题是:如果我需要在获得凭据之前开始会话,并且如果我想确保 Authorization第一次总是使用正确的标头发出请求,我该怎么办?


这是我用于测试的代码示例。你可以用它重现我上面描述的所有行为。

请注意,为了能够看到双重请求,您需要使用自己的 http 服务器并记录请求或通过记录所有请求的代理连接(我为此使用了Charles 代理

注意 1:当向同一个端点连续发出多个请求时,我上面描述的行为只涉及第一个请求。Authorization第一次尝试使用正确的标头尝试后续请求。但是,如果您等待一段时间(大约 1 分钟),会话将返回默认行为(第一次请求尝试了两次)。

注意 2:这没有直接关系,但是使用自定义NSURLCredentialStorageurlCredentialStorage会话配置似乎不起作用。仅使用默认值(NSURLCredentialStorage根据文档共享)有效。

注 3:我尝试过使用Alamofire,但由于它基于NSURLSession,它的行为方式完全相同。

0 投票
0 回答
477 浏览

ios - iOS - 今日扩展慢速网络(URLSession)

我今天有一个包含URLSession.shared.dataTask(with: baseURL)调用的扩展(iOS 10、Swift 3),由于某种原因,这个请求可能需要很长时间才能加载。有时请求会在一秒钟内加载,有时则需要 15 秒。

我正在管理服务器,URL 会话正在从中请求数据,并且服务器报告该页面在一秒钟内被提供,但是今天的扩展有时需要长达 15 秒来加载数据(我的意思是加载数据专门从这个调用加载数据)。

奇怪的是实际应用程序从完全相同的 URL 加载数据,并且它总是在完整应用程序中加载不到一秒钟。

我是否需要进行某些配置才能使今天的扩展加载数据更快?您是否应该在今天的扩展中以不同的方式加载数据?

这是我提出请求的代码块:

0 投票
1 回答
159 浏览

ios - 我调用 URLSession.share.datatask 并在它完成之前用户弹出 uiviewcontroller

我不确定如何防止我的应用程序出错。我需要使用 URLSession.shared.dataTask 调用服务器,如果我允许它完成,它工作得很好。但是,如果我在 URLSession.shared.dataTask 完成之前将 uiviewcontroller 从堆栈中弹出,则会发生运行时错误,因为 viewcontroller 不再存在。它发生在json解析和网络调用的不同地方。通常在回调或网络调用失败时显示错误。有谁知道如何在 uiviewcontroller deinits 时停止网络调用,或者在网络调用代码中检测到 uiviewcontroller 已经消失,所以我不调用回调。我正在使用带有 Swift 3 的 Xcode 8 和 iOS 10。谢谢。

0 投票
2 回答
164 浏览

ios - 多个图像上传进度问题

我正在尝试上传几个单独的图像,只要我在它工作时上传它们 1。但是,一旦我尝试上传下一张图片或多张图片,问题就开始了。我在一个系列中上传的每张图片都会随着最新上传的图片的进度更新所有图片。当我在最后一张上传完成之前拍摄了多张图片时,它会通过随机显示各种上传进度数字来干扰其他图片的进度。

这就是我更新 UI 的方式:

这就是我的数组中各个项目的存储方式:

和我的代表上传进度

我不知道如何分离各个上传并跟踪它们的进度,我所做的一切似乎都是为了只能跟踪最后一次上传。或使用随机进度数字而不是属于单个上传的进度更新所有这些。有没有办法让我的模型将各个上传分开并分别跟踪它们?我该怎么做呢?

编辑:

我想我应该补充一点,我一次发送一张图像,但由于连接性或速度慢,最终可能会导致缓存的已发送项目队列仍未完成。我只是想显示已经发送的单个项目的进展。

0 投票
1 回答
731 浏览

xcode - Swift 3 - Http 发布到 Https wcf Web 服务

在我的 xcode 控制台应用程序(10.12)中,我使用 http post 请求将数据发送到 wcf Web 服务。如果该 Web 服务与 http 一起使用,则没有任何问题。但是,如果我更改为安全 (https) 连接,那么我将无法与 Web 服务进行通信。我收到 404 错误代码。

和类似的网络服务代码:

我正在调用方法:

params["name"] = "Hi" as AnyObject?

var r = request() r.makeHTTPPostRequest(路径:" https://192.168.1.104/sample/Service1.svc/Test ",params:params)

这是来自服务器的响应:

那么我做错了什么?你有什么主意吗?

提前致谢 !

0 投票
3 回答
544 浏览

ios - 如何获取json数据以通过segue传递它

我尝试在URLSession.dataTask运行设置 segue 时获取 json 数据。(每个 json 数据作为发送者)

所以首先,我制作了自己的 Class Array productList = [Product]()。接下来,我调用getJsonData()并在其中设置URLSession.dataTask方法。所以我得到了 Parsed json 数据。但是,当我尝试从 保存该 json 数据(将每个数据附加到productList)时dataTask completionHandler,它无法正确保存。(结果productList[]

我想通过 segue 传递解析的 json 数据。我怎样才能做到这一点?

编辑——

现在,我可以解析来自URLSession DataTask. 我想实现 tableView 的 segue 来显示细节。但是productList是空的。所以我不能使用prepareForSeguewith productList[indexPath.row]

0 投票
1 回答
7434 浏览

swift3 - URLSession.shared.dataTask 与 body / payload

以下代码非常适合简单的 http 请求。但是我找不到在 Swift 3 中添加有效负载或正文字符串的方法?和以前的版本已折旧

0 投票
4 回答
23180 浏览

ios - 从 URLSession 快速返回数据

我无法从我的 HTTPrequest 返回数据,也无法让完成处理程序工作。所以请协助我解决这个问题:

它在 void 函数中期望非 void return 语句。到了这一步,我一脸懵逼……

0 投票
2 回答
1463 浏览

authentication - 如何在 urlsession 中验证代理?

嗨,我正在尝试向我的应用程序添加带有凭据的代理,但每当我尝试时,我都会收到以下(在 Xcode 中)控制台警告:

还收到以下说明的警报

当我取消弹出窗口时,它正在调用以下方法

我在Xcode 控制台中调试挑战并得到以下 debugDescription:

我的问题是如何处理代理身份验证?

我的代码:

从下面的字典中,我可以访问代理但无法验证代理。

我尝试了以下几种方法但失败了:

其他方式:

其他方式:

无法进行身份验证。

请建议我如何在 swift 3 中验证代理?