1

NSURLConnection を使用して、自分のユーザー名とパスワードで接続してログインしようとしています。投稿リクエストを送信して応答を受け取ることはできますが、セッションを維持できません。リクエストを行った後、Web サイトから次のメッセージを受け取りました。

このシステムでは、認証情報を確認するために HTTP Cookie を使用する必要があります。お使いのブラウザで HTTP Cookie が無効になっているか、サポートされていないことがシステムで検出されました。このシステムで使用するためにブラウザを正しく設定する方法の詳細については、ブラウザのヘルプ ページを参照してください。

接続を行うための私のコードは次のとおりです。

NSMutableURLRequest *request = nil;
request = [NSMutableURLRequest requestWithURL:[NSURL URLWithString:@"https://loginsite.com"]];
[[NSHTTPCookieStorage sharedHTTPCookieStorage]setCookieAcceptPolicy:NSHTTPCookieAcceptPolicyAlways];

NSString *post = [NSString stringWithFormat:@"username=username&pass=password"];
NSData *postData = [post dataUsingEncoding:NSASCIIStringEncoding allowLossyConversion:YES];
[request setValue:[NSString stringWithFormat:@"%d", [postData length]] forHTTPHeaderField:@"Content-Length"];
[request setTimeoutInterval: 15];
[request setHTTPMethod:@"POST"];
[request setHTTPBody:postData];

_urlConnection = [[NSURLConnection alloc] initWithRequest:request delegate:self];
[_urlConnection start];

誰かが私を助けてくれたらうれしいです。

4

1 に答える 1

0

送信したユーザーエージェントヘッダーをチェックする可能性があります。この場合はありません...

1)互換性のあるヘッダーを追加します

    NSString *myAgent = @"SOME AGENT StRING";
    [request setValue:myAgent forHTTPHeaderField:@"User-Agent"];

例:AFNetworkingのエージェント文字列

    #if __IPHONE_OS_VERSION_MIN_REQUIRED
        // User-Agent Header; see http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html#sec14.43
        [self setDefaultHeader:@"User-Agent" value:[NSString stringWithFormat:@"%@/%@ (%@; iOS %@; Scale/%0.2f)", [[[NSBundle mainBundle] infoDictionary] objectForKey:(NSString *)kCFBundleExecutableKey] ?: [[[NSBundle mainBundle] infoDictionary] objectForKey:(NSString *)kCFBundleIdentifierKey], (__bridge id)CFBundleGetValueForInfoDictionaryKey(CFBundleGetMainBundle(), kCFBundleVersionKey) ?: [[[NSBundle mainBundle] infoDictionary] objectForKey:(NSString *)kCFBundleVersionKey], [[UIDevice currentDevice] model], [[UIDevice currentDevice] systemVersion], ([[UIScreen mainScreen] respondsToSelector:@selector(scale)] ? [[UIScreen mainScreen] scale] : 1.0f)]];
    #elif __MAC_OS_X_VERSION_MIN_REQUIRED
        [self setDefaultHeader:@"User-Agent" value:[NSString stringWithFormat:@"%@/%@ (Mac OS X %@)", [[[NSBundle mainBundle] infoDictionary] objectForKey:(NSString *)kCFBundleExecutableKey] ?: [[[NSBundle mainBundle] infoDictionary] objectForKey:(NSString *)kCFBundleIdentifierKey], [[[NSBundle mainBundle] infoDictionary] objectForKey:@"CFBundleShortVersionString"] ?: [[[NSBundle mainBundle] infoDictionary] objectForKey:(NSString *)kCFBundleVersionKey], [[NSProcessInfo processInfo] operatingSystemVersionString]]];
    #endif

2)応答Cookieを取得し、メインセッションへの今後のリクエストで使用します

nextR.requestCookies = rLogin.responseCookies.mutableCopy;
于 2012-12-05T21:29:54.793 に答える