|
|
8 سال پیش | |
|---|---|---|
| .. | ||
| External | 8 سال پیش | |
| TunneledWebView | 8 سال پیش | |
| TunneledWebView.xcodeproj | 8 سال پیش | |
| TunneledWebViewTests | 8 سال پیش | |
| TunneledWebViewUITests | 8 سال پیش | |
| README.md | 8 سال پیش | |
Note: NSURLProtocol is only partially supported by UIWebView (https://bugs.webkit.org/show_bug.cgi?id=138169) and in iOS 9 (and perhaps other versions of iOS) audio and video are fetched out of process in mediaserverd and therefore not intercepted by NSURLProtocol.
Note: this approach does not work with WKWebView (see http://www.openradar.me/17190141).
This app tunnels UIWebView traffic by proxying requests through the local Psiphon proxies created by PsiphonTunnel.
The listening Psiphon proxy ports can be obtained via TunneledAppDelegate delegate callbacks (see onListeningSocksProxyPort and onListeningHttpProxyPort in AppDelegate.swift).
This is accomplished by registering NSURLProtocol subclass JAHPAuthenticatingHTTPProtocol with NSURLProtocol.
JAHPAuthenticatingHTTPProtocol is then configured to use the local Psiphon proxies.
This is done by setting the connectionProxyDictionary of NSURLSessionConfiguration.
See + (JAHPQNSURLSessionDemux *)sharedDemux in JAHPAuthenticatingHTTPProtocol.m.
We use a slightly modified version of JiveAuthenticatingProtocol (https://github.com/jivesoftware/JiveAuthenticatingHTTPProtocol), which in turn is largely based on Apple's CustomHTTPProtocol example.
The sample app requires some extra files and configuration before building.
PsiphonTunnel.framework into the TunneledWebView directory.TunneledWebView/psiphon-config.json.stub,
removing the .stub extension.psiphon-config.json. Remove the comments and fill in the values with
those received from Psiphon Inc. The "ClientVersion" value is up to you.TunneledWebView should now compile and run.
Just update urlString = "https://freegeoip.net" in onConnected to load a different URL into UIWebView with TunneledWebView.
See the LICENSE file.