关于配置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);我真的很感激任何帮助,因为我在这个问题上挣扎了几个月,却找不到任何回应。
向你问好,谢尔盖
发布于 2014-07-01 22:37:19
这一切都是因为使用了基于套接字连接的普通流,而不是用CFReadStreamCreateForStreamedHTTPRequest创建的HTTP流(我不知道苹果为什么没有一些信息以及属性名称描述)
发布于 2014-07-16 08:03:22
下面的代码是关于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);
}https://stackoverflow.com/questions/24485192
复制相似问题