问题标签 [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.
iphone - 为什么没有 NSHTTPURLProtocol 类?
嗯,NSURLProtocol
很一般吧?它是用来定义各种协议的,不是吗?
那么为什么没有什么像NSHTTPURLProtocol
呢?相反,NSURLRequest 上有一个带有特定 HTTP 内容的非正式类别。他们为什么这样做?为什么不使用自定义 HTTP 协议呢?
将所有这些东西放入NSURLRequest
而不是放入 HTTP 的自定义协议背后的想法是什么?
当然 HTTP 经常被使用,但无论如何:理解Cocoa/CocoaTouch
. 现在有两个文件。NSURLProtocol
有人说,“为您自己的协议创建一个自定义子类”。另一个说:“创建非正式类别,例如用于 HTTP 内容的类别NSURLRequest
”。
希望有深刻理解的人可以澄清这一点;)
iphone - iPhone上的自定义NSProtocol和缓存问题
我的 iPhone 应用程序嵌入了一个 UIWebView,它通过我注册的自定义 NSProtocol 处理程序加载 html。
我的问题是返回的 html 中引用的资源(也通过我的自定义协议处理程序加载)被缓存并且永远不会重新加载。特别是,我的样式表被缓存:
在 UIWebView 中加载 html 的初始请求如下所示:
(请注意缓存策略设置为忽略,并且我已经验证此缓存策略会在初始加载时对页面资源的后续请求进行)
协议处理程序从数据库加载 html 并使用如下代码将其返回给客户端:
(注意响应缓存策略是“不允许的”)。
有什么想法可以让它不缓存我的 styles.css 资源吗?我需要能够在后续加载引用此文件的 html 时动态更改此资源的内容。
我认为清除共享 url 缓存会起作用,但它没有:
确实有效但效率极低的一件事是通过添加时间戳参数来动态缓存样式表的 url:
为了完成这项工作,我必须从数据库加载我的 html,搜索样式表的 url 并将其替换为每个请求都会更改的缓存清除参数。我宁愿不这样做。
我的假设是,如果我通过内置的 HTTP 协议加载我的内容是没有问题的。在这种情况下,我猜测 UIWebView 会查看 NSURLHTTPResponse 对象的 http 标头中的任何 Cache-Control 标志并遵守它们。由于我的 NSURLResponseObject 没有 http 标头(它不是 http ...),那么 UIWebView 可能只是决定缓存资源(忽略 NSURLRequest 缓存指令?)。
想法???
cocoa - 将自定义 URL 协议映射到 HTTP(使用 NSURLProtocol?)
我有一个使用 WebKit WebView 的应用程序,我想将使用自定义 URL 协议加载在此 WebView 中的 URL 映射到不同的 HTTP URL。例如,假设我正在加载:
自定义://路径/到/资源
我想在内部实际加载:
http://something-else.com/path/to/resource
换句话说,自定义协议几乎可以用作速记。但是我不能使用 -webView:resource:willSendRequest:redirectResponse:fromDataSource:,因为我希望 WebKit 实际上相信这是有问题的 URL,而不是简单地从一个重定向到另一个。
到目前为止,我一直在尝试使用自定义 NSURLProtocol 子类。然而,事实证明这比我最初想象的要棘手,因为至少在我的理解中,我必须自己在 NSURLProtocol 子类的 startLoading 方法中进行实际加载。我想要一种将工作交给现有 HTTP 协议加载器的方法,但我找不到一个简单的方法来做到这一点。
有没有人对此有建议,或者可能有解决此问题的替代方法?
谢谢!
c++ - Windows 中用于提供 HTML 内容的自定义 URL 协议
这个问题解决了如何注册自定义 URL 协议以启动应用程序以响应链接,但我希望我的处理程序提供动态内容。
本质上,我希望创建一个在用户机器上而不是在 Web 服务器上运行的 Web 应用程序。我可以设置一个localhost
,但我想使用用户可以在其他地方引用的“友好”URL 格式,例如假设cats
协议:
我怎样才能做到这一点?此外,您是否发现这种方法存在任何缺陷,例如来自浏览器的安全警告?
iphone - 如何从 NSURLProtocol 内部获取请求 UIWebView
我的应用程序使用 NSURLProtocol 的子类化。应用程序中有几个 UIWebViews,对于在 NSURLProtocol 中实现的特定算法,我需要知道哪个 UIWebViews 发送请求。
我的理解是 [self client] 返回的对象应该与请求对象有一定的联系。但是 NSURLProtocolClient(即由 [self client] 返回的对象实现的协议)和底层对象 _NSCFURLProtocolBridge 都没有任何属性/方法来获取请求的发送者。
谁能帮我出主意?
javascript - 使用 POST 而不是 GET 将数据传递给目标 c
我一直在使用 url 拦截方法将数据从 javascript 传递到目标 C,方法是将数据作为 url 编码参数传递并使用 NSURLProtocol 拦截请求但是我现在想要发送大量数据,比如 10,000 个字符长的字符串,但是这个在 GET 请求中似乎不切实际。对?
目标 c 有没有办法拦截从 UIWebView 发送的 POST 数据?
如果是这样,我是否仍然使用 NSURLProtocol 以及如何获取 POST 数据?
如果没有,是否有其他方法可以将大量数据从 UIWebView 传递到目标 c?
ios - 如何使用自定义 NSURLProtocol 播放带有 URL 的电影?
如您所知,使用 MPMoviePlayerController 对象播放电影
现在,我想实现一个自定义的 NSURLProtocol,我将在其中解密已由 AlgorithmDES 加密的电影源。有这种可能吗?感谢您提供任何想法。需要您的帮助~
iphone - 如何在 NSURLResponse 中设置 statusCode
我覆盖了 NSURLProtocol 并且需要返回带有特定状态码的 HTTP 响应。NSHTTPURLResponse 没有 statusCode 设置器,所以我尝试用以下方法覆盖它:
NSURLProtocol 的重写 startLoading 方法如下所示:
但是这种方法不起作用,在 NSURLProtocol 中创建的响应在网页上总是带有 statusCode = 0。同时,由 NSURLConnection 从网络返回的响应具有正常的预期状态码。
任何人都可以请教如何为创建的 NSURLResponse 显式设置 statusCode 吗?谢谢。
iphone - 如何更改自定义 NSURLProtocol 的内容类型?
我编写了 NSURLProtocol 的自定义子类,但是似乎每当我使用该协议在 UIWebView 中加载请求时,它都假定数据是内容类型“text/html”。有没有办法指定这个内容实际上是别的东西(例如“text/plain”或“image/png”)?
iphone - 带有本地图像文件的 iOS WebView 远程 html
以前也有人问过类似的问题,但我永远找不到解决方案。
这是我的情况 - 我的 UIWebView 加载了一个远程 html 页面。网页中使用的图像在构建时是已知的。为了让页面加载更快,我想在iOS应用中打包图片文件,在运行时替换掉。
[请注意,html 是远程的。我总是得到从本地加载 html 和图像文件的答案 - 我已经这样做了]
我得到的最接近的建议是在 html 页面和 iOS 应用程序中使用自定义 url 方案,例如 myapp://images/img.png,用 NSURLProtocol 子类拦截 myapp:// URL,并用本地替换图像图片。理论上听起来不错,但我还没有遇到一个完整的代码示例来证明这一点。
我有Java背景。我可以使用自定义内容提供程序轻松地为 Android 做到这一点。我确信 iOS/Objective-C 必须存在类似的解决方案。我在 Objective-C 方面没有足够的经验来在短时间内自己解决它。
任何帮助将不胜感激。