iOS7:NSURLSessionのhttp(cookie)でハマった

2014-06-02

やってみた。英語は気合い。初心者上等。
間違ってたらご指摘ください。

iOSアプリを作りはじめて自前のwebサーバとの連携の検証のため、
とりあえず認証をためしてみたかった。

参考リンク

http://dev.classmethod.jp/references/ios-nsurlsession-1/
http://blog.techfirm.co.jp/2013/11/25/ios-7-nsurlsession%E3%81%A7%E3%83%90%E3%83%83%E3%82%AF%E3%82%B0%E3%83%A9%E3%82%A6%E3%83%B3%E3%83%89%E9%80%9A%E4%BF%A1%E3%82%92%E3%81%99%E3%82%8B/

めも

AFNetworkingではなくNSURLSessionを使ってみた。

 // セッション種類
NSURLSessionConfiguration *defaultConfigObject = [NSURLSessionConfiguration defaultSessionConfiguration];

// セッション作成 NSURLSession *urlSession = [NSURLSession sessionWithConfiguration: defaultConfigObject delegate: nil delegateQueue: [NSOperationQueue mainQueue]];

//cookieのプロパティ設定 NSMutableDictionary *properties = [NSMutableDictionary dictionaryWithObjectsAndKeys: @"http://www.hoge.com", NSHTTPCookieOriginURL, @"key", NSHTTPCookieName, @"value", NSHTTPCookieValue, nil ];

//cookie作成 NSHTTPCookie cookie = [NSHTTPCookie cookieWithProperties:properties]; NSArray cookies = [NSArray arrayWithObject:cookie]; NSDictionary * headers = [NSHTTPCookie requestHeaderFieldsWithCookies:cookies];

//リクエスト作成 NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:[NSURL URLWithString:@"http://www.hoge.com/"]]; [request setHTTPMethod:@"GET"]; [request setAllHTTPHeaderFields:headers];

// データタスクを実行します [[urlSession dataTaskWithRequest:(NSURLRequest ) request completionHandler:^(NSData data, NSURLResponse response,NSError error) { NSLog(@"Got response %@ with error %@.\n", response, error); NSLog(@"DATA:\n%@\nEND DATA\n",[[NSString alloc] initWithData: data encoding: NSUTF8StringEncoding]); }] resume];

なんどやってもcookieWithPropertiesがnilになってしまう。
ググった結果次の書き方じゃないといけない事が判明。

NSMutableDictionary *properties =
    [NSMutableDictionarydictionaryWithObjectsAndKeys:
    @"www.hoge.com",NSHTTPCookieDomain,
    @"\\", NSHTTPCookiePath, // IMPORTANT!
    @"key", NSHTTPCookieName,
    @"value", NSHTTPCookieValue,
    nil
];

あーはまった。

まぁ公式ドキュメントをよく見るとDiscussionのところに書いてあるんですね。
読み飛ばしよくなかった。でもDiscussionってなんだ??

https://developer.apple.com/library/mac/documentation/Cocoa/Reference/Foundation/Classes/NSHTTPCookie_Class/Reference/Reference.html#//apple_ref/occ/clm/NSHTTPCookie/cookieWithProperties:

#iOS  #HTTP  #NSURLSession