问题标签 [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 投票
0 回答
35 浏览

ios - NSURLProtocol 超时太快

我观察到有一段时间 StopLoading 在一秒钟内被调用。它没有给足够的时间来满足请求。

以前有没有其他人遇到过类似的行为?这个问题有什么解决办法吗?

0 投票
0 回答
1492 浏览

ios - 使用 NSURLProtocol 和 NSURLSession 做代理请求,当我的代理服务器需要用户名和密码时,它返回警告

我使用NSURLProtocolNSURLSession做一个webview代理请求,

当我的代理服务器是匿名的时它可以工作,</p>

但是,当我的代理服务器需要用户名和密码时,它会返回以下警告

CFMachPortSetInvalidationCallBack()CFMachPort使用没有任何发送权限的 Mach 端口 (0x8e03)调用。这是行不通的。回调函数:0x24232ea1

和 webview 提醒一个窗口,要求我填写usernamepassword

当我单击取消按钮时,它转到- (void)URLSession:(NSURLSession *)session task:(NSURLSessionTask *)task didReceiveChallenge:(NSURLAuthenticationChallenge *)challenge completionHandler:(void (^)(NSURLSessionAuthChallengeDisposition, NSURLCredential *))completionHandler

和我的方法工作。

我不想提醒窗口

谁能解决我的问题

0 投票
0 回答
322 浏览

ios - ios自定义播放器而不是UIWebView中的默认MPMoviePlayerController

我有一个使用 AVFoundation 库构建的自定义播放器(包含一些自定义流逻辑和控件)。播放器未使用 MPMoviePlayerController 类。在 UIWebView 内部,有一些逻辑(可能是内容类型)检测是否需要启动电影播放器​​,默认情况下它会启动 MPMoviePlayerController。根据要求,我需要启动我拥有的自定义播放器。

PS:自定义 MPMoviePlayerController 可能是一个选项,但我想将它坚持到自定义 NSURLProtocol 类,不幸的是 MPMoviePlayerController 没有。

我创建了一个自定义NSURLProtocol类,其中包含以下方法:

在这个方法中,我正在检查内容类型

我得到不同的内容类型 - mp4/vtt/flv 等。我正在考虑从这里启动自定义播放器。但我观察到的是 MPMoviePlayerController 已启动。有什么方法可以阻止 MPMoviePlayerController 启动,而是启动自定义播放器。

0 投票
1 回答
2734 浏览

ios - NSURLSessionTask 身份验证挑战完成处理程序和 NSURLAuthenticationChallenge 客户端

我正在实现一个自定义NSURLProtocol,并且在内部希望将NSURLSession数据任务与内部网络一起使用,而不是NSURLConnection.

我遇到了一个有趣的问题,想知道NSURLSession/的挑战处理程序的内部实现NSURLSessionTask

在这里,我基本上提供了两种不同的挑战处理程序,一个是completionHandler块,它提供了处理挑战的所有必要信息,但也有一些遗留NSURLAuthenticationChallenge.client的方法与completionHandler的方法与信息选项

由于我正在开发一个协议,并且想将某些身份验证挑战向上传递到 URL 加载系统以供调用 API 实现,因此我需要使用NSURLSession客户端方法:

我的问题是completionHandlerand的内部实现是否NSURLAuthenticationChallenge.client相同,如果是,我可以跳过在委托方法中调用完成处理程序,期望 URL 加载系统会调用适当的NSURLAuthenticationChallenge.client方法吗?

0 投票
2 回答
709 浏览

ios - NSURL 协议。requestIsCacheEquivalent 从未调用过

我不确定这里的交易是什么,但功能:

在我的 NSURLProtocol 子类中从未调用过。我什至见过使用缓存的案例(通过使用网络代理进行验证并且没有看到任何调用),但是这个方法永远不会被调用。我不知道为什么会这样。

我要解决的问题是我有一些想要缓存数据的请求,但是这些请求的签名参数对于每个请求都不同(有点像随机数)。这使得尽管数据相同,但缓存键并不相同。

要详细说明:

  1. 我使用自定义签名发出请求(如下所示 www.example.com?param1=1&param2=2&signature=1abcdefabc312093:)
  2. 请求返回一个 Etag
  3. Etag 应该由 NSURLCache 管理,但由于它认为www.example.com?param1=1&param2=2&signature=1abdabcda3359809823正在发出不同的请求(),所以它不会打扰。

我认为使用 NSURLProtocol 可以解决我所有的问题,因为 Apple 的文档说:

如果 aRequest 和 bRequest 对于缓存目的是等效的,则为 YES,否则为 NO。当且仅当它们将由相同的协议处理并且该协议在执行特定于实现的检查后声明它们等效时,请求被认为是等效的用于缓存目的。

可悲的是,该函数从未被调用。我不知道可能是什么问题...

我在我的应用程序委托中注册了协议,如下所示:

我触发协议如下:

0 投票
0 回答
198 浏览

ios - NSURL 在 URL 加载期间如何“复制”?

我正在编写一个子类NSURL(以及一个合作子类NSURLProtocol)。我有意在 URL 对象上存储一个额外的数据属性,以便在 URL 加载中检索和使用。(这只是一个实验;不要判断。)

但是,当我通过创建这些自定义 URL 对象之一然后尝试从中加载来测试类组合时......

...我的 URL 协议得到了一个实际 NSURL的实例来检查,而不是我创建的实例。这absoluteString是我所期望的——换句话说,加载内部已经将我的原始 URL 复制到了一个新的 URL——但它不是我的自定义子类,所以它缺少额外的属性。

请注意,我的NSURL子类正确覆盖-copyWithZone:了 NSCopying 合规性以及两者-initWithCoder:和合规-encodeWithCoder:NSSecureCoding。这应该确保任何对我的类的实例进行浅拷贝或深拷贝的人都应该得到一个完整、正确的拷贝。但是在这个过程中这些方法都没有被调用。(也不是absoluteString, path,relativeString等)

有人在没有调用我希望看到的任何方法的情况下“复制”出我的 URL(字符串)内容。我想另一个 Foundation 类可能只是绕过公共接口并访问私有/内部属性来执行此操作。

任何人都可以确认 NSURL 是否从根本上不可子类化?或者如果我可能遗漏了什么?

0 投票
3 回答
2394 浏览

ios - iOS - 将 AFNetworking 与自定义 NSURLProtocol 类一起使用

我有一个在本教程NSURLProtocol class的帮助下实现的自定义。除了名称、数据模型等之外,我的实现与教程中的几乎相同......

本质上,我正在尝试发送HTTP请求,但不是URL以“http://”开头,而是需要以“bla://”开头

现在,我正在尝试通过 注册protocol class并使用它AFNetworking framework,但遇到了一些麻烦。

canInitWithRequest:方法在某个时候开始返回 NO,此时请求失败,并且我不断收到“不支持的 URL”错误。

除了注册之外protocol class,我还尝试通过在方法中调用它来将类添加到AFHTTPSessionManager's :protocolClassesdidFinishLaunchingWithOptions

而且我还在应用程序的 info.plist 中的 URL Schemes 字段中添加了 url 方案

仍然没有运气......我正在尝试做的甚至可能吗?如果是这样,我会错过什么?谢谢

0 投票
3 回答
3920 浏览

objective-c - 使用自定义 NSURLProtocol 时 UIWebView 不加载重定向页面的内容

我有一个 UIWebView 和一个自定义 NSURLProtocol 类注册到代理 HTTP 请求。我在加载 github.com 时遇到问题。如果我浏览到https://github.com,那么它会很好地加载页面及其内容。但是,如果我浏览到http://github.com,它会正确加载 HTML,但不会加载图像或 CSS。这是我加载 https 版本时的样子:

HTTPS GitHub

这是我加载 http 版本时的样子:

HTTP GitHub

这是我用来重现此问题的视图控制器的代码:

这是 NSURLProtocol 的实现:

如果我禁用自定义 NSURLProtocol 类,它工作正常。我使用 Charles 来检查 HTTP 请求和响应,无论是否使用 NSURLProtocol,它们看起来都相同。

那么问题来了:为什么UIWebView在使用NSURLConnection获取页面数据的时候不请求网页的内容呢?

0 投票
1 回答
2640 浏览

ios - 使用自定义 NSURLProtocol 和 HTTP 代理处理重定向

我有一个自定义 URLProtocol,我想通过代理服务器重定向所有流量。

我当前的工作代码如下所示:

到目前为止,这很好用。问题是有些 url 使用重定向 - 我希望重定向也由代理服务器执行,而不是由设备执行。我尝试添加以下代码,但没有帮助:

问题是新请求没有被发送到代理服务器,而是被设备本身重定向。

谢谢。

0 投票
2 回答
1103 浏览

ios - NSURLProtocol - 处理 https 请求

这是canInitWithRequestNSURLProtocol

但我也想NSURLProtocol允许https请求。
我试过了,但所有请求在调用时都失败了:

}

一个示例是具有https方案的登录请求。在上面的函数中,返回YES但是当登录请求被调用时,我在日志中得到这个错误:

错误域=NSURLErrorDomain 代码=-1004 “无法连接到服务器。”

但是,如果我删除https in 的检查canInitWithRequest,我不会收到任何错误。
我正在使用RNCachingURLProtocol来缓存请求。
我怎样才能做到这一点。