Форум программистов, компьютерный форум, киберфорум
Наши страницы
Objective-C
Войти
Регистрация
Восстановить пароль
 
sp1derok
1 / 1 / 0
Регистрация: 04.02.2015
Сообщений: 18
#1

Открытие второго контроллера после удачного POST запроса - Objective-C

13.03.2015, 19:21. Просмотров 911. Ответов 5
Метки нет (Все метки)

При старте программы у меня открывается loginWindowController, там я ввожу логин и пароль. После нажатия на кнопку войти отправляются два запроса, с помощью AFNetworking, для ввода двух паролей. Но я не могу понять, как сделать так, чтобы если оба пароля верны, то закрылся loginWindowController и открылся mainWindowController, где добавится WebView и загрузится сессия данных запросов.

Objective-C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
#import "LoginWindowController.h"
#import "AFNetworking.h"
#import "MainWindowController.h"
 
@interface LoginWindowController ()
 
@end
 
@implementation LoginWindowController
 
- (void)windowDidLoad {
    [super windowDidLoad];
 
}
 
- (IBAction)loginButton:(id)sender{
 
    NSString *myLogin = usernameTextField.stringValue;
    NSString *myPassword = passwordTextField.stringValue;
    NSString *myFlash = flashpasswordTextField.stringValue;
    NSString *myNid = @"123456";
    NSString *urlString = @"http://neverlands.ru/game.php";
    NSString *ua = @"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/41.0.2272.89 Safari/537.36";
 
    AFHTTPRequestOperationManager *manager = [AFHTTPRequestOperationManager manager];
    manager.responseSerializer = [AFHTTPResponseSerializer serializer];
    AFHTTPRequestSerializer * requestSerializer = [AFHTTPRequestSerializer serializer];
    [requestSerializer setValue:ua forHTTPHeaderField:@"User-Agent"];
    manager.requestSerializer = requestSerializer;
    AFHTTPResponseSerializer * responseSerializer = [AFHTTPResponseSerializer serializer];
    manager.responseSerializer = responseSerializer;
    NSDictionary *parameters = @{@"player_nick": myLogin, @"player_password": myPassword};
    [manager POST:urlString parameters:parameters success:^(AFHTTPRequestOperation *operation, id responseObject) {
        //Условия после запроса 1
        if ([operation.responseString rangeOfString:@"NeverLands: Земли, которых нет... - Второй пароль"].location == NSNotFound) {
            NSLog(@"Неверный логин или пароль");
        } else {
            NSDictionary *parameters = @{@"flcheck": myFlash, @"nid": myNid};
            [manager POST:urlString parameters:parameters success:^(AFHTTPRequestOperation *operation, id responseObject) {
                //Условия после запроса 2
                if ([operation.responseString rangeOfString:@"NeverLands: Земли, которых нет... - бесплатная браузерная онлайн игра в стиле фэнтези"].location == NSNotFound) {
                    NSLog(@"Неверный флеш пароль");
                } else {
                    mainWindowController = [[MainWindowController alloc] initWithWindowNibName:@"MainWindow"];
                    [mainWindowController showWindow:self];
                    [mainWindowController addWebView:[NSURL URLWithString:urlString]];
                    NSLog(@"Авторизация произведена");
                }
            } failure:^(AFHTTPRequestOperation *operation, NSError *error) {
                NSLog(@"Error: %@", error);
            }];
        }
    } failure:^(AFHTTPRequestOperation *operation, NSError *error) {
        NSLog(@"Error: %@", error);
    }];
}
 
@end
Если я задаю
Objective-C
1
[mainWindowController addWebView:[NSURL URLWithString:urlString]];
, то mainWindowController открывается, загружает сайт, но, по всей видимости, с новой сессией, в Charles Web proxy пишет что авторизация обоих паролей прошла удачно и возвращает мне html страницу с самой игрой, а в только что открытом контролере пишет что не введены логин и пароль и + не закрывается loadWindowController. Я очень извиняюсь за такие вопросы, но сам не могу разобраться, уже второй день гуглю и пока бестолку
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
13.03.2015, 19:21
Я подобрал для вас темы с готовыми решениями и ответами на вопрос Открытие второго контроллера после удачного POST запроса (Objective-C):

Файловый менеджер открытие нужного контроллера
Здравствуйте, в целях изучения делаю проект файловый менеджер. Есть разные типы...

Отправка POST запроса на сервер
Так как,в прошлой теме мне никто отвечать даже и не собирается,то спрошу у...

Изменения цвета div после после удачного завершения запроса Ajax
Добрые сутки! Помогите решить следующую проблему. Есть 10-ть Div внутри...

Открытие аккаунта с помощью HTTPS POST-запроса (Delphi XE3)
Здравствуйте ребята . -- Есть https://www.icloud.com/ на это сайте у меня...

Нет ответа после post запроса
Всем привет!! почему в место ответа post получаю такой символ код...

Ответ от сервера после post запроса
Проблема в том что я могу после отправки post получить ответ от сервера , но не...

5
sp1derok
1 / 1 / 0
Регистрация: 04.02.2015
Сообщений: 18
15.03.2015, 15:40  [ТС] #2
В общем я уже перепробовал кучу вариантов и даже представить не могу как мне еще загрузить эту страницу которая возвращается после запроса.
Получается так что когда я отправляю первый запрос на game.php то появляется страница с вводом второго пароля по адресу game.php :

HTML5
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" id="html">
<head>
<title>NeverLands: Земли, которых нет... - Второй пароль</title>
<link href="./css/nl_try.css" rel="stylesheet" type="text/css">
<SCRIPT src="./js/nl_main.js"></SCRIPT> 
<SCRIPT src="./js/nl_try.js"></SCRIPT>
</head>
<body onResize="resizer()">
 
    <script type="text/javascript">
 
    var h = (get_doc_height() / 2) - 164;
    if(h > 0)
    {
        d.write('<style type="text/css">');
        d.write('#auth{margin-top:'+h+'px}\r\n');
        d.write('</style>');
    }
    </script>
    
    <div id="auth">
        <object classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" id="flashpass" width="294" height="328" codebase="http://fpdownload.macromedia.com/get/flashplayer/current/swflash.cab">
        <param name="movie" value="./swf/flashpass.swf">
        <param name="quality" value="high">
        <param name="bgcolor" value="#ececec">
        <param name="allowScriptAccess" value="sameDomain">
        <param name="flashvars" value="plid=123456">
        <embed src="./swf/flashpass.swf" quality="high" bgcolor="#ececec" flashvars="plid=123456" width="294" height="328" name="flashpass" align="middle" play="true" loop="false" quality="high" allowScriptAccess="sameDomain" type="application/x-shockwave-flash" pluginspage="http://www.adobe.com/go/getflashplayer"></embed>
        </object>
    </div>
</body>
</html>
Отправив запрос на ввод этого пароля, мне по этом же адресу game.php возвращается :

HTML5
1
2
3
4
5
6
7
8
9
10
11
12
13
14
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">  
<html xmlns="http://www.w3.org/1999/xhtml" id="html">
<head>
<title>NeverLands: Земли, которых нет... - бесплатная браузерная онлайн игра в стиле фэнтези</title>
<META Content="text/html; charset=windows-1251" Http-Equiv=Content-type>
<META Http-Equiv=Cache-Control Content=No-Cache>
<META Http-Equiv=Pragma Content=No-Cache>
<META Http-Equiv=Expires Content=0>
<SCRIPT src="./js/game.js"></SCRIPT>
<SCRIPT>
    view_frames();
</SCRIPT>
</head>
</html>
Где <SCRIPT src="./js/game.js"></SCRIPT> сам скрипт который описывает фреймы и ссылки на них, а <SCRIPT>view_frames();</SCRIPT> запрашивает загрузку данных фреймов.

Я пытался создать локальный файл game.html и внести в него этот код, только с полными ссылками на скрипты и страницы, все вроде бы отлично прогрузилось, но верхний фрейм который http://neverlands.ru/main.php работает отлично, а вот нижний фрейм который отвечает за чат, не работает. Не получает сообщения и не отправляет их. В чем может быть проблема я уже просто даже не знаю.
Может у кого есть идем как можно это реализовать?
0
zulkis
684 / 611 / 43
Регистрация: 13.01.2011
Сообщений: 1,724
15.03.2015, 22:08 #3
Цитата Сообщение от sp1derok Посмотреть сообщение
[operation.responseString rangeOfString:@"NeverLands: Земли, которых нет... - Второй пароль"].location == NSNotFound)
Это издевательство над трупом какое-то :/
Не делайте так никогда. Проверяйте статусы, куки/прочие вещи. Но так не делайте.
Завтра напишут что "земли есть" - и ваш код будет нерабочим.

Если вы хотите все делать в webView - делайте все в нем. Наследуйтесь от WebView/NSURLProtocol и делайте обертку.
Либо делайте полноценную обертку над их API. Если нет прямого API - печалька. Может там у них есть что на JS написанное. Я видел в ваших выкладках game.js там присутствует.

Добавлено через 2 минуты
Цитата Сообщение от sp1derok Посмотреть сообщение
Я пытался создать локальный файл game.html и внести в него этот код, только с полными ссылками на скрипты и страницы, все вроде бы отлично прогрузилось, но верхний фрейм который http://neverlands.ru/main.php работает отлично, а вот нижний фрейм который отвечает за чат, не работает.
Чтобы ответить на ваш вопрос людям нужно быть в курсе как работает этот сервис. Что это, игра похоже какая-то?
Лучший выходя для вас - написать напрямую разработчикам и спросить может у них там API нормальное есть и что вы рьяно хотите все это дело обернуть в нативное приложение. Хотя я бы вам не поверил, так как вы пытаетесь какой-то "браузер" делать на основе webView :/
0
sp1derok
1 / 1 / 0
Регистрация: 04.02.2015
Сообщений: 18
15.03.2015, 22:18  [ТС] #4
Цитата Сообщение от zulkis Посмотреть сообщение
Чтобы ответить на ваш вопрос людям нужно быть в курсе как работает этот сервис. Что это, игра похоже какая-то?
Лучший выходя для вас - написать напрямую разработчикам и спросить может у них там API нормальное есть и что вы рьяно хотите все это дело обернуть в нативное приложение. Хотя я бы вам не поверил, так как вы пытаетесь какой-то "браузер" делать на основе webView :/
С админами я знаком, API нету.
Есть подобные игровые клиенты под винду привязанные к IE. Я по сути пытаюсь сделать то же самое только под OS X. А делаю это из двух побуждений, выучить Obj-c и сделать для себя игровой клиент под OS X.
Цитата Сообщение от zulkis Посмотреть сообщение
Завтра напишут что "земли есть" - и ваш код будет нерабочим.
Насчет этого я не переживаю, так как 11 лет это не менялось и не думаю что изменится. Хотя Ваш совет учту.

Цитата Сообщение от zulkis Посмотреть сообщение
Если вы хотите все делать в webView - делайте все в нем. Наследуйтесь от WebView/NSURLProtocol и делайте обертку.
Но по сути же у меня сессия в WebView сохраняется, только я не могу просто зайти по ссылке в игру, так как в одном и том же game.php при вводе второго пароля и после него отображает разный код (который я могу видеть) и когда я просто ломлюсь на game.php меня отправляет на ввод логина и пароля.
0
zulkis
684 / 611 / 43
Регистрация: 13.01.2011
Сообщений: 1,724
15.03.2015, 22:40 #5
Цитата Сообщение от sp1derok Посмотреть сообщение
Но по сути же у меня сессия в WebView сохраняется, только я не могу просто зайти по ссылке в игру, так как в одном и том же game.php при вводе второго пароля и после него отображает разный код (который я могу видеть) и когда я просто ломлюсь на game.php меня отправляет на ввод логина и пароля.
Тут помочь ничем не могу. Так как для этого мне нужно разбираться с этим игровым клиентом, на что нет ни времени ни желания. Разбирайтесь как работают куки с webview.
0
sp1derok
1 / 1 / 0
Регистрация: 04.02.2015
Сообщений: 18
15.03.2015, 22:43  [ТС] #6
Цитата Сообщение от zulkis Посмотреть сообщение
Разбирайтесь как работают куки с webview.
спасибо за совет. сегодня как раз этим и занимался.
0
15.03.2015, 22:43
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
15.03.2015, 22:43
Привет! Вот еще темы с решениями:

Редирект после получения POST запроса
Всем привет! Есть проблема. Для добавления новых вакансий искользую K-MVC ...

Получение результата после POST запроса
Как получить код страницы после POST запроса? параметры я передал верно, но...

Не переходит после POST запроса на страницу
Не могу понять почему не переходит после POST запроса на страницу. Вроде бы...

Изменение переменной после POST запроса
Доброе время суток, может кто-нибудь подсказать как можно присвоить переменной...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru