问题标签 [nsurlprotocol]
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.
ios - 在自定义 NSURLProtocol 上使用 AVURLAsset
我编写了一个自定义的 NSURLProtocol(称为“memory:”),它允许我根据名称从 NSDictionary 中获取存储的 NSData 项。例如,这段代码注册了 NSURLProtocol 类并添加了一些数据:
这使我可以通过“memory://video”之类的 url 引用 NSData。
下面是我的自定义 NSURLProtocol 实现:
我不确定这段代码是否有效,但这不是我遇到的问题。尽管注册了自定义协议,但当我尝试在此代码中使用 URL 时,永远不会调用 canInitWithRequest::
如果我使用“memory://video”,图像始终为零,但如果我使用“file:///...”,则效果很好。我错过了什么?为什么不调用 canInitWithRequest ?AVFoundation 是否只支持特定的 URL 协议而不支持自定义的?
谢谢
ios - 将 NSURLRequest 与 UIWebView 关联起来
在 iOS 中,我希望能够将一个NSURLRequest
- any NSURLRequest
,无论是导航请求还是图像或样式表请求 - 与UIWebView
发送它的那个相关联。这似乎需要实现一个NSURLProtocol
子类来捕获和分析通过的请求。但是,我找不到将请求与其网络视图相关联的方法,并且NSURLProtocol
似乎只能理解NSURLRequest
s.
这对于导航请求来说很好,因为我可以在我的UIWebViewDelegate
. 但这不适用于不触发UIWebViewDelegate
方法的辅助资源请求,例如图像。
有人对建立这种关联的最佳方式有任何想法吗?
ios - 如何深度复制 NSMutableURLRequest?
Apple 关于NSMutableURLRequest的 iOS 文档说:
NSURLConnection 对传递给它的初始化器之一的每个 NSMutableURLRequest 对象进行深拷贝。
这是如何实施的?我没有看到任何记录在案的方法来执行NSMutableURLRequest
对象的深层复制。逐个字段的复制不够好,因为NSMutableURLRequest
可以进行子类化。
我的用例:我正在NSURLProtocol
为构建在 http 之上的自定义协议实现。我的NSURLProtocol
实现将执行其自定义内容,然后使用NSURLConnection
稍作修改的NSURLRequest
.
cocoa - 如何使 NSURL 指向本地目录?
今天阅读 Adium 代码,发现了一个有趣的 NSURL 用法:
我试图记录 url 并得到这个adium://im.adium.Smooth Operator.style/adium,然后我创建了一个空白项目来查看如何创建这样的 NSURL 但失败了。当我向项目中的 webview 框架发送 loadHTMLString 消息时,如果 baseURL 为 nil,一切都很好,如果不是,我在视图中得到一个空白页面。
这是我的代码,项目名称是 webkit
问题是如何制作自定义协议而不是 http://?
ios - iOS:带有 UIWebView 的 HTTP Basic/Digest Auth
概述
我正在为 iOS 应用程序开发 SAML 登录(单点登录,类似于 openID)解决方案,该解决方案涉及显示带有 a 的视图控制器,UIWebView
并且在处理 HTTP 基本/摘要时遇到了计时和/或超时问题中的身份验证UIWebView
。
具体来说,当客户端收到 HTTP 身份验证质询时,我会弹出一个UIAlertView
提示用户输入用户 ID 和密码的提示。如果用户能够快速输入信息(< 10 秒),它就可以工作。但是,如果该条目花费的时间超过 10 秒,则连接似乎已终止,并且没有任何反应。
问题
- 调用是否有超时
connection:didReceiveAuthenticationChallenge:
会阻止我提示用户输入用户 ID 和密码(并且必须等待用户输入)?有没有人有解决方法(例如,某种方式来延长连接超时)? UIWebView
有没有比 的子类更好的方法来处理来自 a 的 HTTP 基本/摘要身份验证NSURLProtocol
?
详细信息和代码
对于我们需要处理的大多数 SAML 系统,登录将在UIWebView
. 但是,我们需要处理的一些系统回退到对移动浏览器使用 HTTP 基本或 HTTP 摘要身份验证,因此我们也需要能够处理它。
最大的挑战始于 UIWebView 不暴露下面的网络调用这一事实。为了满足我的需要,我创建了一个子类NSURLProtocol
并根据需要注册了它:
SMURLProtocol
这样,当发出 HTTP 基本/身份验证质询时,就会调用此方法,所以我返回 YES,我们可以处理 HTTP 基本和摘要身份验证:
现在我已经告诉网络堆栈 SMURLProtocol 可以处理身份验证挑战,所以它调用
如您所见,我正在启动一个 UIAlertView 来提示用户输入用户 ID 和密码。我必须在主线程上执行此操作,因为(显然,我不确定)网络代码在后台线程上运行。我添加了信号量和明确的 Grand Central Dispatch 代码来解决我看到的偶尔崩溃(基于此线程)。
最后一部分是接受用户 ID 和密码的 UIAlertView 委托为挑战构建凭证:
正如我在概述中所说,如果用户能够在不到 10 秒的时间内输入用户 ID 和密码,这一切都很好。如果需要更长的时间,则连接似乎会超时,并且将凭据传递给质询的发件人无效。
ios - 如何使用 NSURLProtocol 模拟 AJAX 调用?
我有 UIWebview 对外部服务进行 AJAX 调用。离线时我需要捕获这些请求并返回本地 json。
我实现了一个 NSURLProtocol 并且我设法捕获了 AJAX 请求,问题是 jquery 总是返回一个 0 错误代码:
});
我总是得到一个 request.status = 0
为了测试我的协议,我尝试在我的 html 中模拟一个图像,并且效果很好。
- 从 google.fr => 对图像的 HTML 请求工作正常
- 在亚马逊上对 json 的 AJAX 调用 =>失败
这是我的完整实现:
ios - 可以使用 NSURLProtocol 的子类播放视频,使用 MPMovieController 或 AVFoundation?
我目前正在尝试将视频播放到具有自定义 NSURLProtocol 子类中定义的自定义方案的 URL。最初我使用 MPMoviePlayerController 试图完成此操作,但在遇到问题并检查堆栈溢出后,我发现 MPMoviePlayerController 没有按预期处理 NSURLProtocol 子类。
如何使用自定义 NSURLProtocol 播放带有 URL 的电影?
结果我决定查看 AVFoundation 框架,但是,这似乎也不起作用。我只是想知道这是否可能,还是我想穿过墙壁?
使用 AVFoundation,我使用的方法如下所示。值得一提的是,这在使用标准 URL 指向 Internet 上托管的视频时有效,但不适用于自定义 NSURLProtocol。
为了从定义的 NSURLProtocol 子类中播放,是否需要做一些不同的事情?
avplayer - iOS上AVPlayer使用NSURLProtocol实现边下载边播放
我正在尝试在我的服务器上播放 mp4 视频,我想同时将此视频缓存到磁盘。
我知道我可以只使用 2 个请求来执行此操作,一个用于下载另一个由 AVPlayer 创建的用于播放视频,但这会浪费网络带宽。
所以我只需要使用一个外部请求来下载数据并从 MyNSURLProtocol 中的 AVPlayer 捕获所有 NSURLRequest 并为它们手动创建 NSHTTPURLResponse 。
这是工作流程的样子:
通过使用 Charles,我可以看到 AVPlayer 在 Internet 上播放视频需要 2 个步骤。第一步是下载前 2 个字节,以了解整个视频文件的大小。以下请求将同时下载文件的不同部分。
所以 MyNSURLProtocol 所做的只是使用外部请求下载整个 mp4 文件,当有足够的数据时,它将创建发送到 AVPlayer 的响应(也是数据)。
这就是它为 2 字节请求创建和发送响应的方式。
问题是AVPlayer 没有发送以下请求来获取实际数据,嗯......有什么线索吗?
ios - CFNetwork 内部错误
我正在使用缓存系统创建自己的 NSURLProtocol,我在控制台上看到了这个:
4676:CFNetwork 内部错误(0xc01a:/SourceCache/CFNetwork_Sim/CFNetwork-609.1.4/Connection/URLConnectionClient.cpp:558
知道是什么原因造成的吗?
没有迹象表明在当前出现的情况下没有正确处理任何流量。响应被缓存,服务器发回 304 未修改,我加载缓存的响应,然后在退出另一个线程时记录该错误。
ios - 可以从外部代码访问自定义 NSURLProtocol 吗?
我的应用注册了一个截获一个特定 URL 的 NSURLProtocol 子类。该协议使用密钥回复请求。
只有我的代码和我链接的库应该能够看到密钥。有进取心的用户如何获得我的密钥?这安全吗?
对于那些好奇的人,这是 DRM 设置的一部分。AVPlayer 将请求密钥,以便它可以播放加密媒体。