首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >无法在CFStream参数上将代理设置为kCFStreamPropertyHTTPProxy

无法在CFStream参数上将代理设置为kCFStreamPropertyHTTPProxy
EN

Stack Overflow用户
提问于 2014-06-30 07:44:25
回答 2查看 1.2K关注 0票数 0

关于配置CF流以使用系统指定的代理,我有一个问题。即使这个带有手动配置字典的简单示例也不能工作,isSet字段将被设置为false。开发人员期望哪一组选项能够将字典应用到kCFStreamPropertyHTTPProxy参数?

代码语言:javascript
复制
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);

我真的很感激任何帮助,因为我在这个问题上挣扎了几个月,却找不到任何回应。

向你问好,谢尔盖

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-07-01 22:37:19

这一切都是因为使用了基于套接字连接的普通流,而不是用CFReadStreamCreateForStreamedHTTPRequest创建的HTTP流(我不知道苹果为什么没有一些信息以及属性名称描述)

票数 0
EN

Stack Overflow用户

发布于 2014-07-16 08:03:22

下面的代码是关于ASIHttpRequest如何处理代理设置的。如果代理类型是套接字,则应该使用kCFStreamPropertySOCKSProxy。只是你回答的补充。

代码语言:javascript
复制
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);
    }
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/24485192

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档