matsuda
9/27/2012 - 5:45 AM

Objective-Cの通信関連コードスニペット

Objective-Cの通信関連コードスニペット

// hostName = @"123.456.78.9:5678";
// return @"123.456.78.9"
- (NSString *)domainFromHost:(NSString *)host
{
    NSError *error = nil;
    NSRegularExpression *regexp = [NSRegularExpression regularExpressionWithPattern:@"([-\\w\\.]+):?(\\d+)?" options:0 error:&error];
    if (error != nil) {
        return nil;
    }
    @try {
        NSTextCheckingResult *match = [regexp firstMatchInString:host options:0 range:NSMakeRange(0, host.length)];
        return [host substringWithRange:[match rangeAtIndex:1]];
    }
    @catch (NSException *exception) {
        return nil;
    }
}
- (NSArray *)cookiesFromUserDefaults
{
    NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
    NSData *cookiesData = [defaults objectForKey:zCookie];
    return [NSKeyedUnarchiver unarchiveObjectWithData:cookiesData];
}

- (NSData *)dataFromCookie
{
    NSHTTPCookieStorage *cookieStorage = [NSHTTPCookieStorage sharedHTTPCookieStorage];
    return [NSKeyedArchiver archivedDataWithRootObject:[cookieStorage cookies]];
}
@interface NSURLRequest (IgnoreSSL)
+ (BOOL)allowsAnyHTTPSCertificateForHost:(NSString *)host;
@end

@implementation NSURLRequest (IgnoreSSL)
+ (BOOL)allowsAnyHTTPSCertificateForHost:(NSString *)host { return YES; }
@end
- (void)assignCookie:(NSArray *)cookies
{
    NSHTTPCookieStorage *cookieStorage = [NSHTTPCookieStorage sharedHTTPCookieStorage];
    NSEnumerator *enumerator = [cookies objectEnumerator];

    for (NSHTTPCookie *cookie in enumerator) {
        [cookieStorage setCookie:cookie];
    }
}

- (void)deleteCookie
{
    NSHTTPCookieStorage *cookieStorage = [NSHTTPCookieStorage sharedHTTPCookieStorage];
    NSArray *cookies = [cookieStorage cookies];
    NSEnumerator *enumerator = [cookies objectEnumerator];
    NSString *domain = @"xxx.example.com";

    for (NSHTTPCookie *cookie in enumerator) {
        NSDictionary *properties = [cookie properties];
        NSString *cookieDomain = [properties objectForKey:NSHTTPCookieDomain];
        NSRange match = [cookieDomain rangeOfString:domain];
        if (cookieDomain && match.location != NSNotFound) {
            [properties setValue:[NSDate dateWithTimeIntervalSinceNow:-3600] forKey:NSHTTPCookieExpires];
            NSHTTPCookie *newCookie = [[NSHTTPCookie alloc] initWithProperties:properties];
            [cookieStorage deleteCookie:cookie];
            [cookieStorage setCookie:newCookie];
            [newCookie release];
        }
    }
}