iOS, ¿cualquier organismo sabe cómo agregar un proxy a NSURLRequest?

Estoy configurando una vista web pero necesito cargar el contenido de la vista web usando un proxy. ¿Alguno de ustedes sabe cómo puedo implementar el proxy en NSURLRequest?

por ejemplo:

NSString *location=@"http://google.com"; NSURL *url=[NSURL URLWithString:location]; NSURLRequest *request=[NSURLRequest requestWithURL:url]; // some code to set the proxy [self.myWebView loadRequest:request]; 

Apreciaré tu ayuda

Eche un vistazo al sistema de carga de URL de iOS y al protocolo NSURL

Puede escribir una class NSURLProtocol personalizada para su NSURLRequest. Un NSURLProtocol personalizado puede interceptar sus requestes y agregar un proxy a cada request. el método relevante es -(void)startLoading , dentro de este método puede usar Core-Function, que es un poco de nivel bajo api en iOS para agregar el proxy a cada request:

 //"request" is your NSURLRequest NSURL *url = [request URL]; NSString *urlString = [url absoluteString]; CFStringRef urlStringRef = (CFStringRef) urlString; CFURLRef myURL = CFURLCreateWithString(kCFAllocatorDefault, urlStringRef, NULL); CFStringRef requestMethod = CFSTR("GET"); CFHTTPMessageRef myRequest = CFHTTPMessageCreateRequest(kCFAllocatorDefault, requestMethod, myURL, kCFHTTPVersion1_1); self.httpMessageRef = CFHTTPMessageCreateCopy(kCFAllocatorDefault, myRequest); CFReadStreamRef myReadStream = CFReadStreamCreateForHTTPRequest(kCFAllocatorDefault, myRequest); // You can add body, headers.... using core function api, CFNetwork.etc // below code is to set proxy from code if needs NSString *hostKey; NSString *portKey; if ([[[urlString scheme] lowercaseString] isEqualToString:@"https"]) { hostKey = (NSString *)kCFStreamPropertyHTTPSProxyHost; portKey = (NSString *)kCFStreamPropertyHTTPSProxyPort; } else { hostKey = (NSString *)kCFStreamPropertyHTTPProxyHost; portKey = (NSString *)kCFStreamPropertyHTTPProxyPort; } //set http or https proxy, change "localhost" to your proxy host, change "5566" to your proxy port NSMutableDictionary *proxyToUse = [NSMutableDictionary dictionaryWithObjectsAndKeys:@"localhost",hostKey,[NSNumber numberWithInt:5566],portKey,nil]; CFReadStreamSetProperty(myReadStream, kCFStreamPropertyHTTPProxy, proxyToUse); CFReadStreamOpen(myReadStream); 

Espero que esto le pueda ayudar.

No olvide registrar su NSURLProtocol personalizado en su delegado.

No puede agregar un proxy a NSURLRequest. Deberá usar una biblioteca de terceros como ASIHTTPRequest .

 // Configure a proxy server manually NSURL *url = [NSURL URLWithString:@"http://allseeing-i.com/ignore"]; ASIHTTPRequest *request = [ASIHTTPRequest requestWithURL:url]; [request setProxyHost:@"192.168.0.1"]; [request setProxyPort:3128]; 

He utilizado el siguiente código para el proxy Http.

 let sessionConfiguration = NSURLSessionConfiguration.defaultSessionConfiguration(); sessionConfiguration.connectionProxyDictionary = [ kCFNetworkProxiesHTTPEnable: true, kCFNetworkProxiesHTTPPort: myPortInt, kCFNetworkProxiesHTTPProxy: myProxyUrlString, ] let url = NSURL(string: endPointUrl) let postRequest = NSMutableURLRequest(URL: url!, cachePolicy: NSURLRequestCachePolicy.ReloadIgnoringLocalAndRemoteCacheData, timeoutInterval: 10.0) let jsonString = bodyString postRequest.HTTPBody = jsonString postRequest.HTTPMethod = "POST" postRequest.setValue("application/json", forHTTPHeaderField: "Content-Type") let session = NSURLSession(configuration: sessionConfiguration) let task = session.dataTaskWithRequest(postRequest){}