问题标签 [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.

0 投票
1 回答
3444 浏览

swift - 有没有办法在带有自定义配置的 NSURLSession 中使用 NSURLProtocol?

我有一个在后台队列中运行的 NSURLSession。我正在将我的NSURLProtocol子类添加到NSURLsessionConfiguration.protocolClasesoverride class func canInitWithRequest(request: NSURLRequest) -> Bool永远不会被调用。

这就是我添加我的方式NSURLProtocol

我还尝试了会话不在后台运行但也没有工作:

由于这不起作用,我只是尝试过:

并在我的 AppDelegate 中调用它

这确实有效,我做错了什么?!

0 投票
4 回答
24224 浏览

javascript - 我如何监控 WKWebview 上的请求?

我如何监控 WKWebview 上的请求?

我试过使用 NSURLprotocol (canInitWithRequest) 但它不会监控 ajax 请求 (XHR),只有导航请求(文档请求)

0 投票
0 回答
472 浏览

objective-c - 代理服务器持久连接关闭

我正在为 osx 应用程序实现代理支持。

我创建了一个自定义NSURLProtocol,它非常适合无需身份验证的代理。在本地网络中的 Windows 计算机上尝试使用 CCProxy 和 FreeProxy。

但是,当代理身份验证开启时,前几秒钟内的任何请求都可以正常工作,然后连接会在 5 秒内从 ESTABLISHED 变为 CLOSE_WAIT。代理再次显示 0 连接,之后在应用程序中任何 HTTP 请求都会得到 407,即使 proxy-auth 标头已预先设置。

我的代码如下所示:

如您所见,我尝试将先前的连接存储在静态输入流中,并仅在打开新连接后才释放它,但似乎没用。

还尝试按照NSStream TCP Keep-alive iOSkCFStreamEventOpenCompleted中的建议将底层套接字设置为保持活动状态,但仍然没有成功。

为什么连接关闭?我怎样才能调试它或使它工作?连接的错误是代理变得疯狂吗?

谢谢。

编辑 1线鲨

编辑2:它似乎与HTTPS有关......如果我将服务器更改为纯http而不是https,它将完美运行。

0 投票
1 回答
621 浏览

ios - NSURLProtocol 使用 AJAX 超时

我使用 NSURLProtocol 为所有从 UIWebview 发出的请求添加自定义标头。在此 WebView 上执行某些操作时,会触发 AJAX 调用以显示消息。显示消息的此操作使用 AJAX,并且在我使用 NSURLProtocol 方法时总是超时。没有 NSURLProtocol 也可以正常工作。

如果需要更多信息,请告诉我。这是我的代码。

0 投票
1 回答
741 浏览

ios - 添加到 configuration.protocolClasses 的自定义 NSURLProtocol 阻止了默认 url 协议的工作

我尝试向 a 添加自定义NSURLProtocolNSURLSession以便为某些呼叫提供测试数据,同时为所有其他呼叫提供正常的互联网连接。我需要通过添加NSURLProtocol到会话配置来做到这一点protocolClasses,因为会话驻留在项目中包含的库中。

出于某种原因,当我的自定义协议通过返回调用true来接受请求时,我的设置确实提供了测试数据canInitWithRequest,但是对于所有其他请求(当它返回时false),仍然在protocolClasses我的自定义协议后面的默认协议获取请求和甚至truecanInitWithRequest通话中返回,但他们从不将请求发送到互联网,而是在 30 秒后发送请求超时。当我从 中删除我的自定义协议时protocolClasses,一切正常 - 当然,不再提供我的测试数据。

这是我用于安装协议的代码:

当我用 注册自定义协议时[NSURLProtocol registerClass:[MyProtocol class]],失败确实有效,但正如所写,我不能在我的项目中使用这种方法。

关于为什么这不能正常工作的任何想法?

0 投票
2 回答
1487 浏览

uiwebview - 在 WKWebview 中使用本地资源

如何让 WKWebview 使用本地 .js、.css 和/或本地图像文件代替远程文件,以加快网页加载速度。另外,我注意到 NSURLProtocol 方法(通过注册类实现时)在实现 WKNavigationDelegate 方法时不会被调用,知道为什么吗?

0 投票
1 回答
713 浏览

ios - NSURLProtocol + UIWebView + certain domains = app UI frozen

We're building a browser for iOS. We decided to experiment with using a custom NSURLProtocol subclass in order to implement our own caching scheme and perform user-agent spoofing. It does both of those things quite well...the problem is, navigating to certain sites (msn.com is the worst) will cause the entire app's UI to freeze for up to fifteen seconds. Obviously something is blocking the main thread, but it's not in our code.

This issue only appears with the combination of UIWebView and a custom protocol. If we swap in a WKWebView (which we can't use for various reasons) the problem disappears. Similarly, if we don't register the protocol such that it isn't ever utilized, the problem goes away.

It also doesn't seem to much matter what the protocol does; we wrote a bare-bones dummy protocol that does nothing but forward responses (bottom of post). We dropped that protocol into a bare-bones test browser that doesn't have any of our other code--same result. We also tried using someone else's (RNCachingURLProtocol) and observed the same result. It appears that the simple combination of these two components, with certain pages, causes the freeze. I'm at a loss to attempt to resolve (or even investigate) this and would greatly appreciate any guidance or tips. Thanks!

0 投票
3 回答
3353 浏览

ios - 使用 NSURLProtocol 和 NSURLSession

我的应用程序用于NSURLConnection与服务器通信。我们使用 https 进行通信。为了在一个地方处理来自所有请求的身份验证,我NSURLProtocol在该类的委托中使用并处理了身份验证。现在我决定使用NSURLSession而不是NSURLConnection. 我正在尝试与我NSURLProtocol一起工作,NSURLSession 我创建了一个任务NSURLProtocol并由

CustomHTTPSProtocol这是我的NSURLProtocol课看起来像这样

调用开始加载并完成身份验证质询,但之后立即调用停止加载。

一段时间后返回错误代码 -999“已取消”。didReceiveData 没有被调用。

Note:NSURLProtocol and the Authentication Process worked fine with NSURLConnection.

我错过了什么??我的问题是

  1. 注册 [NSURLProtocol registerClass:[CustomHTTPSProtocol class]];与 NSURLConnection 一起工作得很好,但是如何使用 NSURLSession 全局抵抗 NSURLProtocol ?

  2. 为什么使用 URLSession 的 NSURLProtocol(相同的 URL 和逻辑与 URLConnection 一起使用)中的请求失败,以及如何让 NSURLProtocol 与 URLSession 一起使用?

请帮助我,如果您需要更多详细信息,请告诉我。

0 投票
1 回答
378 浏览

ios - 在全球范围内为 NSURLSessions 注册 NSRULProtocol

我正在尝试使用 NSURLProtocol 来处理每个 NSURLSession 连接的身份验证挑战。我用了

对于 NSURLConnection 。但它不适用于 NSURLSession 所以我需要设置SessionConfiguration.protocolClasses=@[[CustomHTTPSProtocol class]];。问题是我使用这个 URLProtocol 类只处理身份验证挑战,并且我在原始类的代表中收到了数据。

像这样的东西

原班

NSURL连接

NSURLSession

NSURLProtocol 类

NSURL连接

NSURLSession

使用上述逻辑,我能够全局处理所有请求的身份验证并单独处理响应。但是如果我使用 NSURLProtocol,则使用 NSURLSession,身份验证是在协议类中完成的,但我无法接收数据,因为没有调用我的原始类委托。

有人帮帮我。

0 投票
2 回答
370 浏览

ios - UIWebView/NSURLProtocol - 离线时不可访问的外部资产的占位符

我的应用程序是用于在 iPhone/iPad 上查看书籍的电子阅读器。用户可以选择下载我们在设备上保存为 .epub 文件(压缩内容)的图书 - 这样可以在离线时查看图书。页面内容为html。

但是,某些资产(例如视频)不在此 .epub 内容中。当用户导航到这样的页面时,我必须检测不在 .ePub 中的外部资产并显示一个简单的占位符,其中包含文本“此内容在脱机时不可用”。

这些视频可以嵌入到 iFrame html 标签或对象标签中。

现在我们有一个继承自 NSURLProtocol 抽象类的类,我正在使用它来处理这个需求。我有这三种方法的实现:

我现在的问题是我有一个简单的 .png 显示“此内容在离线时不可用”但它很难看,因为有时 iFrame 的区域小于图像。我如何缩放它以适应?还是有更好的方法?只要我可以显示该内容不可用的消息,它就不必是图像。我在 startLoading 方法中的当前代码:

感谢您的任何建议。