Environments:
MacOS 12.5.1
A squid proxy sever is set up on my local machine(127.0.0.1 with port 3128), and it requires username and password. In System Preferences->Network->Advanced, enable "Secure Web Proxy (HTTPS)", input the server 127.0.0.1 and port 3128, and do not enable "Proxy server requires password".
Open a website on Chrome, an dialog will pop up to ask user to input the credentials for proxy server 127.0.0.1.
I want to do the same but met this issue. As I understand, the delegate method - (void)URLSession:(NSURLSession *)session task:(NSURLSessionTask *)task didReceiveChallenge:(NSURLAuthenticationChallenge *)challenge completionHandler:(void (^)(NSURLSessionAuthChallengeDisposition disposition, NSURLCredential * _Nullable credential))completionHandler should be called after [mTask resume],
but the actual behaviour is - (void)URLSession:(NSURLSession *)session task:(NSURLSessionTask *)task didCompleteWithError:(NSError *)error was called, and the current session was terminated. Error message in console is "[] nw_http_connect_send_auth_request_block_invoke Proxy authentication failed with error -1002, cancelling connection".
BTW, I tried put proxy server and port into connectionProxyDictionary, then didReceiveChallenge can be called. AM I misuse the APIs? or this is a bug in MSURLSession?
Here is the codes for testing:
// proxyHandler.h
#import <Foundation/Foundation.h>
@interface proxyHandler : NSObject <NSURLSessionTaskDelegate>
- (void)submitRequest;
@end
//proxyHandler.m
#import "proxyHandler.h"
@interface proxyHandler()
{
NSURLSession *mSession;
NSURLSessionTask *mTask;
}
@end
@implementation proxyHandler
- (void)submitRequest
{
NSURLSessionConfiguration *configuration = [NSURLSessionConfiguration ephemeralSessionConfiguration]; // connectionProxyDictionary is NULL, which means that tasks use the default system settings.
mSession = [NSURLSession sessionWithConfiguration:configuration delegate:self delegateQueue:nil];
NSURLRequest *request = [NSURLRequest requestWithURL:[NSURL URLWithString:@"https://www.google.com"]];
mTask = [mSession dataTaskWithRequest:request];
[mTask resume];
}
- (void)URLSession:(NSURLSession *)session task:(NSURLSessionTask *)task didCompleteWithError:(NSError *)error {
NSLog(@"Task compelter with error domain : %s, error code: %ld\n", [error.domain UTF8String], error.code);
}
- (void)URLSession:(NSURLSession *)session task:(NSURLSessionTask *)task didReceiveChallenge:(NSURLAuthenticationChallenge *)challenge completionHandler:(void (^)(NSURLSessionAuthChallengeDisposition disposition, NSURLCredential * _Nullable credential))completionHandler{
NSLog(@"Task challenge: %@, isProxy: %d", challenge.protectionSpace.authenticationMethod, [challenge.protectionSpace isProxy]);
}
@end
Post
Replies
Boosts
Views
Activity
Our application (VPN solution) works well on macOS 13 and this issue only occurred on macOS 14 beta.
This issue is:
If we connect the cable to a Mac mini’s ethernet port, and enable the VPN in our application, then the Tunnel is enabled under System Settings->Network->VPN & Filter, after that, the DNS stops resolving.
If we use a “USB-C LAN” adapter to connect the cable to Mac mini’s USB-C port, this issue disappears. Only enable Wi-Fi can also avoid this issue.
The confusion is what’s the difference between connect to Ethernet directly and use an adapter?