Swift 4/5 设置将代理添加到 WKWebview

Posted

技术标签:

【中文标题】Swift 4/5 设置将代理添加到 WKWebview【英文标题】:Swift 4/5 setting adding proxy to WKWebview 【发布时间】:2019-04-02 19:40:39 【问题描述】:

我一直在寻找一种方法来为 WKWebview 请求设置代理,但没有成功。

另一方面,我已经能够将代理设置为 http 请求

func createURLSessionConfiguration(_ host:String,_  port:String) -> URLSessionConfiguration 

    let config = URLSessionConfiguration.default
    config.requestCachePolicy = URLRequest.CachePolicy.reloadIgnoringLocalCacheData
    config.connectionProxyDictionary = [AnyHashable: Any]()
    config.connectionProxyDictionary?[kCFNetworkProxiesHTTPEnable as String] = 1
    config.connectionProxyDictionary?[kCFNetworkProxiesHTTPSProxy as String] = host
    config.connectionProxyDictionary?[kCFNetworkProxiesHTTPSPort as String] = port

    return config

但是我的问题是如何将代理设置为 WKWebView?

非常感谢您的帮助

【问题讨论】:

看到这个内容希望对你有帮助***.com/a/39405291/9880393 @ViraniVivek,该代码是用 Swift 2 或类似的东西编写的。如果您尝试编译某些 api 已被弃用或重命名。 【参考方案1】:

HTTP 代理不能使用 WKWebView —— NSURLProtocol 注册技巧在使用 WKWebView 时不起作用(它仅适用于 UIWebView)。

使用 WKURLSchemeHandler 可能也可以使用类似的技巧,但它不允许注册由 WKWebView 本地处理的方案,因此实际上是不可能的。

来源:https://forums.developer.apple.com/thread/110312#337642

【讨论】:

【参考方案2】:

Web 视图用于输入您不希望应用程序直接访问的非常敏感的信息(例如信用卡号、密码)。

因此,WKWebview 明确阻止所有劫持该信息的尝试。

例如,在委托方法中,您可以看到请求正在发生并查看其 URL,但您无法访问请求正文。

出于同样的原因,您不能篡改代理。

如果您真的可以这样做,那么使用 Web 视图会非常危险。

【讨论】:

【参考方案3】:

我们对WKWebView 的访问权限有限,最少delegate 我们可以实现它NSURLProtocol 如果您的代理服务器支持隧道(***),那么您可以使用 NetworkExtension.framework 在这里查看内容,希望对您有所帮助。 source is here

【讨论】:

以上是关于Swift 4/5 设置将代理添加到 WKWebview的主要内容,如果未能解决你的问题,请参考以下文章

Swift 4 快捷语法将多个对象(设置了一些属性)添加到数组中?

Swift 接收 javascript 消息不起作用

swift - VC添加手势返回

Swift 3:将UIButton扩展添加到ViewController

Swift 将按钮操作添加到 TableView 单元格

Swift - 将手势识别器添加到表格单元格中的对象