问题标签 [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.
objective-c - 如何通过 NSURLProtocol 将 prxoy 服务器添加到我的 http 请求中?
我需要通过代理服务器代理我所有应用程序的 http 和 https 请求。
我不能只更改 url,因为大多数请求都是通过 3rd 方库完成的。
我尝试了一些代码:iOS any body know how to add a proxy to NSURLRequest? 但它似乎不起作用或不完整。
有人可以给我一个很好的例子吗?
ios - 将 NSOutputStream outputStreamWithURL 与自定义 URL 协议一起使用
我正在编写一个自定义 URL 协议(NSURLProtocol 的子类)来处理需要特殊读写方式的本地文件。阅读时没问题:我可以成功地创建一个 URL,例如 -“my-funny-file-protocol://....”,并且一切正常。
当我尝试写入这种 URL 时,就会出现问题。特别是,我需要使用 NSOutputStream,所以我需要调用类似:
不会引发异常,控制台上没有日志,但结果始终是nil
. 如果我使用标准file:
协议,相同的文件可以工作:
为什么?事实上 NSURLProtocol 文档并没有很好地解释我的情况。也许我在我的 URLProtocol 实现中遗漏了一些东西......但是什么?
提前谢谢了,
抢
objective-c - NSURLProtocol 没有得到完整的 NSURLRequest
问题:我有 NSURLProtocol 的子类,但NSURLRequest
返回的+canonicalRequestForRequest:
或返回的请求-connection:willSendRequest:redirectResponse:
从未传递给我的 URL 协议实例。
详细信息:在我的子类中NSURLProtocol
,我实现了+canonicalRequestForRequest:
向请求添加 HTTP 标头的方法。标头已成功添加,但-startLoading
在我的 URL 协议上调用时,self.request
不包含该标头。
此外,当connection:willSendRequest:redirectResponse:
在 的委托上调用时,NSURLConnection
该方法返回的任何请求也永远不会到达我的 URL 协议实例。
我认为问题在于在initWithRequest:cachedResponse:client:
之前调用+canonicalRequestForRequest:
或被connection:willSendRequest:redirectResponse:
调用,并且来自这两种方法的结果请求在它被alloc
/之后永远不会传递给我的 URL 协议实例init
。
这是 Apple 的 URL 加载系统中的错误吗?有解决方法吗?难道我做错了什么?
2014 年 4 月 6 日更新
这是一些示例代码。我设置了 2 个标题:一个在-[APViewController connection:willSendRequest:redirectResponse:]
call 中X-WillSendRequestTest
,另一个在+[APURLProtocol canonicalRequestForRequest:]
. 两者都不是NSURLRequest
通过调用self.request
within获取的-[APURLProtocol startLoading]
。
APViewController.m(NSURLProtocol 的代理)
APURL协议.m
NSURLRequest+test.m(类扩展NSURLRequest的描述)
警告:不要在家里这样做。不要使用类别覆盖方法或属性。这仅用于快速调试目的。
ios - NSURLProtocol 和相对路径
我实现了一个自定义的 NSURLProtocol,它允许我使用网站的静态压缩版本作为 webView 的目标。它会在旅途中打开 zip 并加载所需的数据。但问题是 NSURLProtocol 似乎在相对路径中表现不佳?那就是我有以下结构:
并使用 : 从 css 调用 sprite.png,background: url(../images/sprite.png) no-repeat;
但是,我的自定义 NSURLProtocol 中的 requestURL 显示 scheme://host/images/sprite.png,缺少资产部分。如果我将..
部分切换为,它工作正常assets
,但我宁愿不必这样做。
我在这里发现了同样的问题:Loading resources from relative paths through NSURLProtocol subclass但这没有答案。
我找不到任何方法来解决此问题,以便请求正确解析相对路径,或者之后自己修复路径(但我需要知道请求的来源,并且那里也没有运气)
任何帮助表示赞赏,在此先感谢。
旁注:@import url("style.css");
在 main.css 中使用同样的问题
编辑 :
我首先从远程服务器下载 zip 文件:
所以,从http://host/foo/archive.zip
,我把它保存到documentsDirectory/archive.zip
。从那里,我将方案和 url 更改为指向 zip 文件:
这会打开 myzip://archive.zip,如果在 zip 文件中没有找到这样的文件,我会将 /index.html 附加到当前路径。因此,以下请求到达我的NSURLProtocol
子类- (id)initWithRequest:(NSURLRequest *)request cachedResponse:(NSCachedURLResponse *)cachedResponse client:(id < NSURLProtocolClient >)client
:
ios - iOS - 如何为我的 UIWebView 发出的每个请求添加自定义标头字段
我想为我的 UIWebView 发出的每个请求添加一个自定义标头字段。首先,我尝试在控制器中的“shouldStartLoadWithRequest”方法中执行此操作,但这仅适用于发出的第一个请求 - 此方法不会处理所有后续请求。
经过一番搜索,我找到了这个教程(http://eng.42go.com/customizing-uiwebview-requests-with-nsurlprotocol/)。所以我实现了我自己的 NSURLProtocol 子类,一切正常,除了我的登录页面 - 身份验证存在一些问题,我无法解决这个问题。我看到存在一些方法,如“canAuthenticateAgainsProtectionSpace”和“didReceiveAuthenticationChallenge”,我可能需要实现这些方法才能让我的登录页面正常工作。但是,这似乎需要做很多额外的工作,因为首先我只想为每个请求添加一个字段。
所以我的疑问是:
- 有没有其他简单的方法可以做到这一点?
- 如果不是,我应该实现所有这些身份验证方法吗?
- 有没有办法让我的自定义 NSURLProtocol 子类从 NSURLHTTPProtocol 之类的东西(因此我只需要做最少的工作)而不是 NSURLProtocol 本身进行扩展?
谢谢!
ios - NSURLProtocol canInitWithRequest:多次调用
我们的应用程序中有很多 Web 视图,我最近添加了一个 NSURLProtocol 来拦截来自它们的一些请求。
我注意到一些 Web 视图多次调用 +[NSURLPRotocol canInitWithRequest:] 方法,似乎是完全相同的请求。有时6或7次。我试图弄清楚为什么会发生这种情况。
有人对这个有经验么?我已经注销了 [NSURL absoluteString] 和 httpMethod 值,它们对于每个请求都是相同的。我希望这个方法只会为服务器所需的任何给定文件或资源调用一次,而不是多次。它似乎因网页而异。
有任何想法吗?
ios - How to use NSURLCache to cache content served by an NSURLProtocol
I've written an NSURLProtocol
that will check outbound http
requests against a plist
of URL to local path mappings and serve up the local content instead, and then cache it using NSURLCache:
I limit the number of times local data can be fetched to one. The intent that the first time that its fetched it'll come from the NSBundle
, but thereafter it'll use the stock NSURLCache
to check whether it should come from either the cache or the network:
Sadly, it seems as though the local data will go into the cache, but it won't ever come back out. Here's a log snippet:
My expectation is that after the first time it's refused by the protocol it'll result in a couple of cache hits but instead it always counts it as a miss, fetches the content from the server, and then after that I start getting cache hits.
My fear is that my NSURLProtocol
subclass constructs its responses in a way that allows them to be cached, but prevents them from ever being pulled out of the cache. Any ideas?
Thanks in advance. :)
ios - iOS:[NSURLProtocol propertyForKey:inRequest:] return nil
在玩 NSURLProtocol 时,我发现[NSURLProtocol propertyForKey:inRequest:]在stopLoading中总是返回 nil ,但对canInitWithRequest 来说效果很好:
我的代码有什么问题吗?
ios - Phonegap 和 MobileIron 兼容性
我为 iOS 设备开发了一个 PhoneGap 应用程序。出于安全原因,我需要集成一个 MobileIron 产品。特别是,我必须将 MobileIron 的 AppConnectSDK for iOS 导入我的 Xcode 项目。我担心NSURLProtocol
子类被实例化了两次。第一个来自 Phonegap (CDVURLProtocol),第二个来自 AppConnectSDK。
这两个实例可以一起工作吗?MobileIron 的 AppConnect 是否与 PhoneGap 兼容?
谢谢, 恩里
ios - UIWebView + NSUrlConnection - LinkedIn 陷入无限循环
我正在尝试WebView
在 iOS 上创建一个应用程序来拦截所有 URL 请求以进行某些日志记录。
为此,我按照本教程编写了一个扩展NSUrlProtocol
& 并加载请求的类:NSUrlConnection
http://www.raywenderlich.com/59982/nsurlprotocol-tutorial
Gmail 在这方面工作正常。但在输入用户 ID 和密码后,LinkedIn 陷入了无限循环(连续 302 次请求)。
我使用中间 Web 调试代理检查了这个无限循环。
请注意,这个无限循环与本教程第一部分中提到的不同,我已经解决了与本教程中提到的相同的问题。
如果我不注册我的NSUrlProtocol
派生类,则链接可以正常工作。
任何帮助,将不胜感激。如果您需要更多信息/代码等,请告诉我。