问题标签 [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.
swift - NSURLProtocol SWIFT 错误
我正在尝试NSURLProtocol
在我的应用程序中实现一个以获取开头的 URLmyApp://...
我在一个新的 SWIFT 文件中创建了协议并在AppDelegate
:
但我不断收到这个错误。我不知道如何将 canInitWithRequest 定义到我的 webViews..
2014-08-03 21:10:27.632 SubViewTest[6628:156910] * WebKit 丢弃了 webView:decidePolicyForNavigationAction:request:frame:decisionListener:delegate: * -canInitWithRequest: 仅为抽象类定义的未捕获异常。定义-[_TtC11SubViewTest13myURLProtocol canInitWithRequest:]!
ios - iOS:如何捕获所有 NSURLRequests 和 NSURLResponses?
我想记录从我的应用程序中启动的所有 NSURLRequests 并响应这些请求。我编写了一个自定义的 NSURLProtocol 来实现这一点。我能够捕获所有请求,但不能捕获响应。
在 canInitWithRequest 方法中,无论方法返回是/否,我都可以记录所有请求。现在我返回“是”,希望得到实际响应。
在 -startLoading 方法中,我应该通知 NSURLProtocolClient 响应和进度。我对修改/创建自己的响应不感兴趣,而是对实际响应感兴趣并想记录它。我何时何地可以找到对请求的实际响应?
我对修改 URL 加载行为不感兴趣。
我是在使用自定义协议的正确轨道上还是我需要做其他事情来记录所有请求和响应?
nsurlprotocol - IOS直播
问题:我需要从媒体服务器下载 mp4 视频并同时提供 localhost httpserver (GCDWebServer) 以启用视频流。
到目前为止我尝试了什么:我能够从媒体服务器下载视频文件,然后提供 localhost url 用于流式传输视频。
但这需要大量的下载时间。所以我想知道是否有一种方法可以即时分割视频并在我的下一个片段准备好时不断更新 m3u8 文件。
好的,为什么要下载?基本上我需要处理一个自定义的加密视频文件。所以我需要下载,然后解密流,然后馈送到我的本地 httpserver。
我希望我的要求很清楚。
ios - iOS NSURLCache 在通过 NSURLProtocol 时构成 HTTP 404
如果您认真回答这个问题,请克隆我创建的迷你应用程序,看看它是否对您有同样的行为不当,然后再推测答案,谢谢 :)
https://github.com/pavel-zdenek/nsurlprotocol-testbed
一个非常简单的浏览器:UIWebView
所有请求都经过简单的NSURLProtocol
重新实现。它经过了加载时间。开关在运行时取消/注册协议处理程序。现在加载一个特定站点:http ://www.rollingstone.com 。除了大量其他资源之外,页面 GET
http://sjc.ads.nexage.com/js/admax/admax_api.js
这会产生一个 XHR 请求
http://sjc.mediation.nexage.net/admax/adMaxApi.do?dcn=<somehash>
PZProtocolHandler
OFF : XHR 立即加载。在网络上观察到 HTTP 200(鲨鱼),反映为 Safari Web Inspector 中的成功加载。在进一步加载时,它不再在线,但仍然是 Web Inspector 中的 HTTP 200。换句话说,缓存。
PZProtocolHandler
ON:Web Inspector 报告 3 次尝试,每次 10 秒后超时,导致 HTTP 404。进一步重新加载后没有变化。现在有趣的部分:根据wire(shark),请求发出并以正确的HTTP 200响应。此外,所有3次尝试都在一个相同的TCP通道上排序。“某人”沿途编造404 UIWebView
。
现在,甚至在阅读聪明的博客之前,我就发现当服务器响应不包含Cache-Control
标头时,iOS URL 缓存会变成热核。而这个特殊的 GET 请求就是这种情况。但它不应该导致 404 失败,不是吗?我还尝试通过各种方法使默认缓存休眠:实现与缓存相关的委托调用NSURLProtocol
,创建带有缓存禁止标志的新请求,使用预期的顶级知识SDURLCache
,甚至替换NSURLCache
我认为应该是“空缓存”的东西。查看项目源代码中的所有内容。
404 对我来说仍然存在。我怀疑仅仅覆盖的事实NSURLProtocol
会破坏这么多事情。我可以没有机会为此填补雷达,谢谢。我仍然希望我做错了什么。
webview - NSURLProtocol + WebView = 无法获取 HTTP 帖子的数据
我使用 WebView + NSURLProtocol 创建了我自己的浏览器的缩小版本。我从以下博客中获取了示例代码以开始使用。
http://www.raywenderlich.com/59982/nsurlprotocol-tutorial(要下载代码,请转到标题“从这里去哪里”)
在我使用 NSURLProtocol 拦截 http 请求后,我不使用 NSURLConnection 或 NSURLSession,而是使用一些 3rd 方库来发出 HTTP 请求。
问题是当我在 WebView 中发出 HTTP-Post 请求时。在上传等情况下,我需要正文数据、表单数据或数据流,以便我可以将其传递给我的第 3 方库。
当控件进入 startLoading() request.HTTPBody 和 request.HTTPBodyStream 应该提供数据。当我打印它们时,它打印为零。
以下请求中的一些人也报告了同样的问题。
使用带有 UIWebView 和 POST 请求的自定义 NSURLProtocol
NSURLProtocol 实现是不完整的,还是 NSURL 协议或 WebView 的错误?
ios - NSURLProtocol & swift - ios7 中的错误
我尝试按照以下教程中的说明实现 NSURLProtocol:http ://www.raywenderlich.com/76735/using-nsurlprotocol-swift
在 iOS8 上一切正常,但在 iOS7 中我在 startLoading() 中遇到运行时错误。
错误:WebCore:CFNetwork Loader(10):EXC_BREAKPOINT
有人成功实现了 NSURLProtocol 吗?谢谢!
android - 拦截来自 Android WebView 的*所有*请求
标题说明了一切。我想知道一切的WebView
要求。一些奇怪的限制,比如不知道 XHR POST 是不可接受的。换句话说,像 iOS 这样的东西在NSURLProtocol
. 那是应用程序范围的钩子。我不需要这种级别的控制,WebView
-instance-specific 钩子就足够了。现在,我知道 Android 上没有类似的东西。我知道shouldOverrideUrlLoading
and shouldInterceptRequest
,但它在很大程度上无法使用。我需要了解请求(方法、HTTP 版本、标头,你知道),而不仅仅是 URL 字符串。此外,拦截是尴尬的同步。如果发生什么shouldInterceptRequest
呼叫被阻止,因为我需要向不同的服务器询问相关资源?在我看来,它只是为本地资源缓存而设计的。
另一方面,我愿意为这个问题抛任何东西。某种本机库,挂钩到低级内部?在现有项目(pwnall、mogoweb)的帮助下扩展 Chromium 接口?反映到现有的 webkit 类私有?特定于应用程序的代理?任何见解表示赞赏。我已经阅读了两打现有的 SO 问题。他们都建议部分破解(例如使用 JavaScript 解决 XHR POST 缺陷),或者经常完全没有响应。
ios - NSURLProtocol requestIsCacheEquivalent:toRequest 显示一个斜杠
我正在调查我自己的 NSURLProtocol 子类的缓存命中和未命中。我有一个看起来像这样的请求(来自 UIWebView)
现在,我在 URL 上使用简单的字符串比较:
我在日志中看到的是“a”有一个斜杠。它看起来像这样:
我正在尝试调试这个斜杠可能来自哪里。我意识到我什至不知道是什么负责调用这个方法——它的回溯非常有限。
“a”和“b”从何而来?那个斜线可能来自哪里?
ios - 在对 canInitWithRequest 的 YES 响应后不要求加载 NSURLProtocol
我正在注册 NSURLProtocol 的实现来对某些 URL 请求进行一些自定义处理(我通过在它们上设置属性来标记这些请求)。这些 URL 请求来自 UIWebView 的加载方法。
- 创建 UI Web 视图(启动后首次加载)
- 加载内容
- 销毁网页视图
- 创建一个新的 Web 视图(后续加载)
- 加载内容
我看到第 2 步和第 5 步之间的行为明显不同。我的 NSURLProtocol 实现管理缓存数据并旨在处理请求。如果我没有在请求中检测到我的属性,我会再次检查特定 URL(用于调试)。在任何一种情况下canInitWithRequest
都会返回YES
:
启动后首次加载:
其他人指出,对同一资产的协议有多次调用,这不是问题,但有趣的是,每次调用它时都会使用一个新对象,并且它是第 4 个(共 4 个)对象被传递给startLoading
. 不过,这里没有真正的担忧。
后续加载:
在我看来,这是出乎意料的行为。似乎在第三次将属性传递给请求时已将其从请求中剥离canInitWithRequest
,然后,即使我们做出响应,YES
我们也从未真正被初始化——页面只是UIWebView
完整地返回到,没有后续请求资产。以下是创建请求时的样子:
为什么,当我说我的协议可以处理请求时,它没有机会这样做吗?我的猜测是答案在于 UIWebView 本身的实现。如果我真的希望我的协议成为负责加载的实体,关于如何解决这个问题的任何想法?
ios - 嵌入在 UIWebView 中的 MPMoviePlayerController 中的视频流
我想知道如何在 iOS 的 UIWebView 中嵌入的 MPMoviePlayerController 中执行网络流式传输。它是使用套接字还是任何其他方法执行的?
首先请理解我的问题,我正在 UIWebView 中播放 youtube 视频。当视频加载并开始播放时,MPMoviePlayerController(或类似的东西)会自动实例化。现在问题是我想通过我的代理服务器传递所有 url 以及一些私人消息。我正在使用以下方法:
方法 1
创建我自己的自定义 NSURLProtocol 类并拦截每个请求,然后打开一个套接字,编写我的私人消息,然后编写 GET/POST 消息并将响应传递给 webview。一切正常。但是当视频开始播放时,我们没有收到 url 请求,所以很难追踪 url 正在通过我的代理。
我在 SO 中读到 MPMoviePlayerController 不符合 NSURLProtocol,因此我们无法拦截通过视频控制器的请求流。链接在这里:
如何使用自定义 NSURLProtocol 播放带有 URL 的电影?
方法 2
我重写 connect()、write() 和 read() 方法,然后打印日志以查看视频数据是否流经 read() 和 write() 方法。但我仍然没有得到预期的结果。我的所有其他网络请求都通过这些覆盖的方法,但只有 VideoData 没有显示,这意味着 MPMoviePlayerController 没有使用套接字和读取、写入方法。或者 Webview 在内部启动另一个进程来实例化 Player。
我如何确保 MPMoviePlayerController 没有在内部创建新进程。
如果有人知道如何实现这一点,请分享。任何帮助表示赞赏。我陷入了困境。