【问题标题】:How can I create an iOS web browser that proxies all traffic through a proxy server?如何创建一个通过代理服务器代理所有流量的 iOS 网络浏览器?
【发布时间】:2017-08-23 08:17:14
【问题描述】:

我正在寻求创建一个 iOS 应用程序,该应用程序实现了一个标准的类似 Safari 的网络浏览器,该浏览器通过代理服务器代理其所有流量。具体来说,它必须使用自己的代理配置,以便仅通过代理引导其流量,而不是使用 iOS 的系统设置。

我对使用哪种代理有一定的灵活性。我更喜欢 Socks5 代理,但 HTTP / HTTPS 代理也可以。无论哪种方式,它都必须支持身份验证。

我非常喜欢使用SFSafariViewController,因为我希望这个网络浏览器尽可能接近使用 Safari 的体验,但我知道SFSafariViewController 是有限的,这可能是不可能的.如果做不到这一点,我希望使用WKWebView,但如果这也不可行,我可以不情愿地使用UIWebView

如何实现这一目标?

编辑:我应该补充一点,我不打算在应用商店发布这个应用程序,所以我对通常不会在那里运行的方法持开放态度,比如未记录的 API 和 swizzling。尽管我不想使用这样的方法,但其他所有条件都相同。

【问题讨论】:

    标签: ios proxy uiwebview wkwebview sfsafariviewcontroller


    【解决方案1】:

    您可以实现一个本地 Web 服务器,托管在 localhost:<some_weird_port_number>,并让您的 WKWebView 仅从该服务器加载本地地址。您的服务器将加载您想要的内容以及您想要的方式,然后将其作为对 Web 视图的响应。

    【讨论】:

    • 我不太明白如何使用它来进行正常的网页浏览。一旦页面被加载并由本地 Web 服务器提供,任何指向页面资源或其他页面的链接都不会使用 localhost 地址。
    • 是的,您必须抓取网页内容并在那里替换 url 链接。其他方法可以是您将使用 UIWebView 和自定义 NSURLProtocol 来完全覆盖网络连接。
    • 我确实想避免抓取网页,尤其是因为这意味着我必须替换脚本中的 url 链接,这是一项冒险且可能不可能完成的任务。感谢您提供关于 NSURLProtocol 和 UIWebView 的提示。我一直在研究那个。不幸的是,UIWebView 意味着使用性能较差的 javascript 引擎,并且必须在 UI 方面重新发明轮子才能提供类似 Safari 的体验。
    • 是的,不幸的是,WKWebView(也用于 SFSafariViewController)在一个单独的进程中运行 Web 连接,不可能覆盖任何东西。
    • 我正在考虑尝试方法调配,所以谢谢你让我知道它不会提前工作!
    猜你喜欢
    • 1970-01-01
    • 2018-08-17
    • 2011-10-06
    • 2020-11-14
    • 1970-01-01
    • 2011-12-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多