解决 macOS 10.12 下 PAC 模式下Safari 或 Twitter 客户端 tweetbot客户端不能FQ的问题
解决 macOS 10.12 下 PAC 模式下Safari 或 Twitter 客户端 tweetbot客户端不能FQ的问题 https://github.com/qiuyuzhou/ShadowsocksX-NG/issues/30 PS 手头没有 macOS 10.12 的机器,麻烦有的请帮忙测试一下 或者可以从 https://github.com/qinyuhang/ShadowsocksX-NG/tree/webserver 下载去 Xcode build 一下
This commit is contained in:
@ -144,6 +144,10 @@ class AppDelegate: NSObject, NSApplicationDelegate, NSUserNotificationCenterDele
|
||||
|
||||
func applicationWillTerminate(aNotification: NSNotification) {
|
||||
// Insert code here to tear down your application
|
||||
StopSSLocal()
|
||||
ProxyConfHelper.disableProxy("hi")
|
||||
let defaults = NSUserDefaults.standardUserDefaults()
|
||||
defaults.setBool(false, forKey: "ShadowsocksOn")
|
||||
}
|
||||
|
||||
func applyConfig() {
|
||||
@ -154,15 +158,15 @@ class AppDelegate: NSObject, NSApplicationDelegate, NSUserNotificationCenterDele
|
||||
if isOn {
|
||||
StartSSLocal()
|
||||
if mode == "auto" {
|
||||
ProxyConfHelper.enablePACProxy()
|
||||
ProxyConfHelper.enablePACProxy("hi")
|
||||
} else if mode == "global" {
|
||||
ProxyConfHelper.enableGlobalProxy()
|
||||
} else if mode == "manual" {
|
||||
ProxyConfHelper.disableProxy()
|
||||
ProxyConfHelper.disableProxy("hi")
|
||||
}
|
||||
} else {
|
||||
StopSSLocal()
|
||||
ProxyConfHelper.disableProxy()
|
||||
ProxyConfHelper.disableProxy("hi")
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -7,15 +7,21 @@
|
||||
//
|
||||
|
||||
#import <Foundation/Foundation.h>
|
||||
#import <GCDWebServer/GCDWebServer.h>
|
||||
#import <GCDWebServer/GCDWebServerDataResponse.h>
|
||||
|
||||
@interface ProxyConfHelper : NSObject
|
||||
|
||||
+ (void)install;
|
||||
|
||||
+ (void)enablePACProxy;
|
||||
+ (void)enablePACProxy:(NSString*) PACFilePath;
|
||||
|
||||
+ (void)enableGlobalProxy;
|
||||
|
||||
+ (void)disableProxy;
|
||||
+ (void)disableProxy:(NSString*) PACFilePath;
|
||||
|
||||
+ (NSString*)startPACServer:(NSString*) PACFilePath;
|
||||
|
||||
+ (void)stopPACServer;
|
||||
|
||||
@end
|
||||
|
@ -113,10 +113,14 @@
|
||||
}
|
||||
}
|
||||
|
||||
+ (void)enablePACProxy {
|
||||
NSString* urlString = [NSString stringWithFormat:@"%@/.ShadowsocksX-NG/gfwlist.js", NSHomeDirectory()];
|
||||
NSURL* url = [NSURL fileURLWithPath:urlString];
|
||||
|
||||
+ (void)enablePACProxy:(NSString*) PACFilePath {
|
||||
//start server here and then using the string next line
|
||||
//next two lines can open gcdwebserver and work around pac file
|
||||
NSString *PACURLString = [self startPACServer: PACFilePath];//hi 可以切换成定制pac文件路径来达成使用定制文件路径
|
||||
NSURL* url = [NSURL URLWithString: PACURLString];
|
||||
// NSString* urlString = [NSString stringWithFormat:@"%@/.ShadowsocksX-NG/gfwlist.js", NSHomeDirectory()];
|
||||
// NSURL* url = [NSURL fileURLWithPath:urlString];
|
||||
|
||||
NSMutableArray* args = [@[@"--mode", @"auto", @"--pac-url", [url absoluteString]]mutableCopy];
|
||||
|
||||
[self addArguments4ManualSpecifyNetworkServices:args];
|
||||
@ -135,10 +139,12 @@
|
||||
[self callHelper:args];
|
||||
}
|
||||
|
||||
+ (void)disableProxy {
|
||||
// 带上所有参数是为了判断是否原有代理设置是否由ssx-ng设置的。如果是用户手工设置的其他配置,则不进行清空。
|
||||
NSString* urlString = [NSString stringWithFormat:@"%@/.ShadowsocksX-NG/gfwlist.js", NSHomeDirectory()];
|
||||
NSURL* url = [NSURL fileURLWithPath:urlString];
|
||||
+ (void)disableProxy:(NSString*) PACFilePath {
|
||||
// 带上所有参数是为了判断是否原有代理设置是否由ssx-ng设置的。如果是用户手工设置的其他配置,则不进行清空。
|
||||
// NSString* urlString = [NSString stringWithFormat:@"%@/.ShadowsocksX-NG/gfwlist.js", NSHomeDirectory()];
|
||||
// NSURL* url = [NSURL fileURLWithPath:urlString];
|
||||
NSString *PACURLString = [self startPACServer: PACFilePath];//hi 可以切换成定制pac文件路径来达成使用定制文件路径
|
||||
NSURL* url = [NSURL URLWithString: PACURLString];
|
||||
NSUInteger port = [[NSUserDefaults standardUserDefaults]integerForKey:@"LocalSocks5.ListenPort"];
|
||||
|
||||
NSMutableArray* args = [@[@"--mode", @"off"
|
||||
@ -149,4 +155,27 @@
|
||||
[self callHelper:args];
|
||||
}
|
||||
|
||||
+ (NSString*)startPACServer:(NSString*) PACFilePath {
|
||||
//接受参数为以后使用定制PAC文件
|
||||
NSData * originalPACData;
|
||||
if (![PACFilePath isEqual: @"hi"]) {//用默认路径来代替
|
||||
PACFilePath = [NSString stringWithFormat:@"%@/%@", NSHomeDirectory(), @".ShadowsocksX-NG/gfwlist.js"];
|
||||
originalPACData = [NSData dataWithContentsOfFile: [NSString stringWithFormat:@"%@/%@", NSHomeDirectory(), @".ShadowsocksX-NG/gfwlist.js"]];
|
||||
}else{//用定制路径来代替
|
||||
originalPACData = [NSData dataWithContentsOfFile: [NSString stringWithFormat:@"%@/%@/%@", NSHomeDirectory(), @".ShadowsocksX-NG", PACFilePath]];
|
||||
}
|
||||
GCDWebServer *webServer = [[GCDWebServer alloc] init];
|
||||
[webServer addHandlerForMethod:@"GET" path:@"/proxy.pac" requestClass:[GCDWebServerRequest class] processBlock:^GCDWebServerResponse *(GCDWebServerRequest *request) {
|
||||
return [GCDWebServerDataResponse responseWithData: originalPACData contentType:@"application/x-ns-proxy-autoconfig"];
|
||||
}
|
||||
];
|
||||
int port = 8090;
|
||||
[webServer startWithPort:port bonjourName:@"webserver"];
|
||||
return @"http://127.0.0.1:8090/proxy.pac";//为以后的定制PAC文件做准备
|
||||
}
|
||||
|
||||
+ (void)stopPACServer {
|
||||
//原版似乎没有处理这个,本来设计计划如果切换到全局模式或者手动模式就关掉webserver 似乎没有这个必要了?
|
||||
}
|
||||
|
||||
@end
|
||||
|
@ -37,7 +37,7 @@ class ProxyPreferencesController: NSWindowController, NSTableViewDataSource, NST
|
||||
}
|
||||
|
||||
@IBAction func ok(sender: NSObject){
|
||||
ProxyConfHelper.disableProxy()
|
||||
ProxyConfHelper.disableProxy("hi")
|
||||
|
||||
let defaults = NSUserDefaults.standardUserDefaults()
|
||||
defaults.setValue(selectedNetworkServices.allObjects, forKeyPath: "Proxy4NetworkServices")
|
||||
|
@ -28,7 +28,7 @@
|
||||
return;
|
||||
}
|
||||
else if ([[event charactersIgnoringModifiers] isEqualToString:@"z"]) {
|
||||
if ([self sendAction:@selector(undo:) to:nil from:self])
|
||||
if ([self sendAction:@selector(undo) to:nil from:self])
|
||||
return;
|
||||
}
|
||||
else if ([[event charactersIgnoringModifiers] isEqualToString:@"a"]) {
|
||||
@ -38,7 +38,7 @@
|
||||
}
|
||||
else if (([event modifierFlags] & NSDeviceIndependentModifierFlagsMask) == (NSCommandKeyMask | NSShiftKeyMask)) {
|
||||
if ([[event charactersIgnoringModifiers] isEqualToString:@"Z"]) {
|
||||
if ([self sendAction:@selector(redo:) to:nil from:self])
|
||||
if ([self sendAction:@selector(redo) to:nil from:self])
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
5937
ShadowsocksX-NG/proxy.pac
Normal file
5937
ShadowsocksX-NG/proxy.pac
Normal file
File diff suppressed because it is too large
Load Diff
Reference in New Issue
Block a user