2

我知道如何使用NSStream类创建输入/输出流套接字。我也能够建立 TCP 连接和 SSL 连接。但我不知道如何与HTTP_PROXY服务器建立流套接字连接。服务器还需要发送用户名/密码。

这可能使用NSStreamAPI 吗?

4

1 回答 1

0

对于像我这样被卡住的人。这就是我解决它的方法。

  • 使用 CFReadStreamCreateForHTTPRequest 而不是 CFStreamCreatePairWithSocketToHost。
  • 使用正确的代理密钥 -kCFStreamPropertyHTTPProxyHostkCFStreamPropertyHTTPProxyPort.

       CFHTTPMessageRef    request;
    
       request = CFHTTPMessageCreateRequest(
           NULL, 
           CFSTR("GET"), 
           (__bridge CFURLRef) [NSURL URLWithString:@"http://www.apple.com/"], 
           kCFHTTPVersion1_1
       );
       assert(request != NULL);
    
       self.inputStream = CFBridgingRelease( 
           CFReadStreamCreateForHTTPRequest(NULL, request)
       );
    
       CFRelease(request);
    
       if (YES) {
           BOOL            success;
           NSDictionary *  proxyDict;
    
           proxyDict = @{
               (__bridge NSString *) kCFStreamPropertyHTTPProxyHost: @"proxy.example.com",
               (__bridge NSString *) kCFStreamPropertyHTTPProxyPort: @12345,
           };
    
           success = [self.inputStream setProperty:proxyDict 
               forKey:(__bridge NSString *) kCFStreamPropertyHTTPProxy
           ];
           assert(success);
       }
    
       [self.inputStream setDelegate:self];
       [self.inputStream scheduleInRunLoop:[NSRunLoop currentRunLoop] 
           forMode:NSDefaultRunLoopMode
       ];
       [self.inputStream open];
    
于 2014-08-16T14:42:18.657 回答