我有一个关于配置CF流以使用系统指定代理的问题。即使这个手动配置字典的简单示例也不起作用, isSet 字段将设置为 false 。 开发人员可以使用哪些选项将字典应用于 kCFStreamPropertyHTTPProxy 参数?
CFReadStreamRef readStream;
CFWriteStreamRef writeStream;
CFStreamCreatePairWithSocketToHost(kCFAllocatorSystemDefault, CFSTR("apple.com"), 80, &readStream, &writeStream);
NSDictionary *proxySettings = @{(NSString *)kCFStreamPropertyHTTPProxyHost:@"10.0.1.2", (NSString *)kCFStreamPropertyHTTPProxyPort:@(8888)};
Boolean isSet = CFReadStreamSetProperty(readStream, kCFStreamPropertyHTTPProxy, (__bridge CFTypeRef)proxySettings);
我真的很感激任何帮助,因为我几个月来一直在努力解决这个问题而无法找到答案。
最诚挚的问候, 塞吉
答案 0 :(得分:0)
所有这些都是因为使用了基于套接字连接的普通流而不是使用CFReadStreamCreateForStreamedHTTPRequest
创建的HTTP读取流(我不知道为什么Apple没有提供一些信息以及属性名称描述)
答案 1 :(得分:0)
以下代码约为ASIHttpRequest
如何处理代理设置。如果代理类型是套接字,则应使用kCFStreamPropertySOCKSProxy
。只是你的答案的补充。
if ([self proxyHost] && [self proxyPort]) {
NSString *hostKey;
NSString *portKey;
if (![self proxyType]) {
[self setProxyType:(NSString *)kCFProxyTypeHTTP];
}
if ([[self proxyType] isEqualToString:(NSString *)kCFProxyTypeSOCKS]) {
hostKey = (NSString *)kCFStreamPropertySOCKSProxyHost;
portKey = (NSString *)kCFStreamPropertySOCKSProxyPort;
} else {
hostKey = (NSString *)kCFStreamPropertyHTTPProxyHost;
portKey = (NSString *)kCFStreamPropertyHTTPProxyPort;
if ([[[[self url] scheme] lowercaseString] isEqualToString:@"https"]) {
hostKey = (NSString *)kCFStreamPropertyHTTPSProxyHost;
portKey = (NSString *)kCFStreamPropertyHTTPSProxyPort;
}
}
NSMutableDictionary *proxyToUse = [NSMutableDictionary dictionaryWithObjectsAndKeys:[self proxyHost],hostKey,[NSNumber numberWithInt:[self proxyPort]],portKey,nil];
if ([[self proxyType] isEqualToString:(NSString *)kCFProxyTypeSOCKS]) {
CFReadStreamSetProperty((CFReadStreamRef)[self readStream], kCFStreamPropertySOCKSProxy, proxyToUse);
} else {
CFReadStreamSetProperty((CFReadStreamRef)[self readStream], kCFStreamPropertyHTTPProxy, proxyToUse);
}