Я занимаюсь этой проблемой в течение нескольких дней. Моему приложению нужно зайти на сервер ASP.NET (версия: 4.0.30319, MVC версии: 3.0), а затем отправить через NSMutableURLRequest на ограниченную страницу (страницу, для которой вам необходимо войти в систему для доступа).Как правильно включить файлы .ASPXAUTH и ASP.NET_SessionId с NSMutableURLRequest
В настоящее время я могу, успешно, зайти на сайт. Для входа в систему я использую этот код:
NSString *post =[[NSString alloc] initWithFormat:@"LogInEmail=%@&Password=%@",@"[email protected]",@"password"];
NSURL *url=[NSURL URLWithString:@"http://www.website.com/LogIn"];
NSData *postData = [post dataUsingEncoding:NSASCIIStringEncoding allowLossyConversion:YES];
NSString *postLength = [NSString stringWithFormat:@"%d", [postData length]];
NSMutableURLRequest *request = [[NSMutableURLRequest alloc] init];
[request setURL:url];
[request setHTTPMethod:@"POST"];
[request setValue:postLength forHTTPHeaderField:@"Content-Length"];
[request setValue:@"application/x-www-form-urlencoded" forHTTPHeaderField:@"Content-Type"];
[request setHTTPBody:postData];
NSError *error = [[NSError alloc] init];
NSHTTPURLResponse *responseMeta = nil;
NSData *urlData = [NSURLConnection sendSynchronousRequest:request returningResponse:&responseMeta error:&error];
я могу проверить и убедиться, что одновременно ASP.NET_SessionId и .ASPXAUTH печенье, для этого веб-сайта, можно найти в sharedHTTPCookieStorage. Я понимаю, что оба они должны быть отправлены с запросом, если я хочу «войти в систему».
Код для проверки куки здесь:
NSArray *cookiesForURL = [cookieJar cookiesForURL: [NSURL URLWithString: @"http://www.example.com"]];
for (cookie in cookiesForURL)
{
if([cookie.name compare:@"ASP.NET_SessionId"] == NSOrderedSame)
{
ASPdotNET_SessionId = [cookie value];
NSLog(@"ASP.NET_SessionId: %@" , ASPdotNET_SessionId);
}
if([cookie.name compare:@".ASPXAUTH"] == NSOrderedSame)
{
dotASPXAUTH = [cookie value];
NSLog(@".ASPXAUTH: %@" , dotASPXAUTH);
}
}
Чтобы очистить печенье использовать это:
NSHTTPCookieStorage *cookieStorage = [NSHTTPCookieStorage sharedHTTPCookieStorage];
for (NSHTTPCookie *each in [[cookieStorage cookiesForURL:[NSURL URLWithString:@"http://www.example.com"]] copy]) {
[cookieStorage deleteCookie:each];
}
Я попытался разместить на ограниченной странице путем изменения NSString *post
и NSUrl *url
и с использованием тех же код выше.
NSString *post =[[NSString alloc] initWithFormat:[MessageId stringByAppendingString:@"=%@"],Comment];
NSURL *url=[NSURL URLWithString:@"https://www.website.com/message
Это неудачно. Я предполагаю, что я каким-то образом пренебрег пешками. Я попытался добавить в этот код только под [request setHTTPMethod:@"POST"];
:
[request addValue:ASPdotNET_SessionId forHTTPHeaderField:@"Cookie"];
и/или:
[request addValue:dotASPXAUTH forHTTPHeaderField:@"Cookie"];
где ASPdotNET_SessionId
и dotASPXAUTH
являются значения кук, извлеченные из sharedHTTPCookieStorage.
Я чувствую, что это действительно просто, любая помощь?