Форум программистов, компьютерный форум CyberForum.ru

Objective-C

Войти
Регистрация
Восстановить пароль
 
sp1derok
1 / 1 / 0
Регистрация: 04.02.2015
Сообщений: 18
#1

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

13.03.2015, 19:21. Просмотров 818. Ответов 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. Я очень извиняюсь за такие вопросы, но сам не могу разобраться, уже второй день гуглю и пока бестолку
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
13.03.2015, 19:21     Открытие второго контроллера после удачного POST запроса
Посмотрите здесь:

Открытие нового окна Objective-C
jQuery Изменения цвета div после после удачного завершения запроса Ajax
Objective-C Компиляция запроса в байт-код
Отправка POST запроса на сервер Objective-C
AFNetworking Post Request Objective-C
Открытие пункта меню настроек по ссылке Objective-C
Objective-C Добавление кода отправки GET запроса в AppDelegate.m

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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
sp1derok
1 / 1 / 0
Регистрация: 04.02.2015
Сообщений: 18
15.03.2015, 15:40  [ТС]     Открытие второго контроллера после удачного POST запроса #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 работает отлично, а вот нижний фрейм который отвечает за чат, не работает. Не получает сообщения и не отправляет их. В чем может быть проблема я уже просто даже не знаю.
Может у кого есть идем как можно это реализовать?
zulkis
681 / 608 / 38
Регистрация: 13.01.2011
Сообщений: 1,724
15.03.2015, 22:08     Открытие второго контроллера после удачного POST запроса #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 :/
sp1derok
1 / 1 / 0
Регистрация: 04.02.2015
Сообщений: 18
15.03.2015, 22:18  [ТС]     Открытие второго контроллера после удачного POST запроса #4
Цитата Сообщение от zulkis Посмотреть сообщение
Чтобы ответить на ваш вопрос людям нужно быть в курсе как работает этот сервис. Что это, игра похоже какая-то?
Лучший выходя для вас - написать напрямую разработчикам и спросить может у них там API нормальное есть и что вы рьяно хотите все это дело обернуть в нативное приложение. Хотя я бы вам не поверил, так как вы пытаетесь какой-то "браузер" делать на основе webView :/
С админами я знаком, API нету.
Есть подобные игровые клиенты под винду привязанные к IE. Я по сути пытаюсь сделать то же самое только под OS X. А делаю это из двух побуждений, выучить Obj-c и сделать для себя игровой клиент под OS X.
Цитата Сообщение от zulkis Посмотреть сообщение
Завтра напишут что "земли есть" - и ваш код будет нерабочим.
Насчет этого я не переживаю, так как 11 лет это не менялось и не думаю что изменится. Хотя Ваш совет учту.

Цитата Сообщение от zulkis Посмотреть сообщение
Если вы хотите все делать в webView - делайте все в нем. Наследуйтесь от WebView/NSURLProtocol и делайте обертку.
Но по сути же у меня сессия в WebView сохраняется, только я не могу просто зайти по ссылке в игру, так как в одном и том же game.php при вводе второго пароля и после него отображает разный код (который я могу видеть) и когда я просто ломлюсь на game.php меня отправляет на ввод логина и пароля.
zulkis
681 / 608 / 38
Регистрация: 13.01.2011
Сообщений: 1,724
15.03.2015, 22:40     Открытие второго контроллера после удачного POST запроса #5
Цитата Сообщение от sp1derok Посмотреть сообщение
Но по сути же у меня сессия в WebView сохраняется, только я не могу просто зайти по ссылке в игру, так как в одном и том же game.php при вводе второго пароля и после него отображает разный код (который я могу видеть) и когда я просто ломлюсь на game.php меня отправляет на ввод логина и пароля.
Тут помочь ничем не могу. Так как для этого мне нужно разбираться с этим игровым клиентом, на что нет ни времени ни желания. Разбирайтесь как работают куки с webview.
sp1derok
1 / 1 / 0
Регистрация: 04.02.2015
Сообщений: 18
15.03.2015, 22:43  [ТС]     Открытие второго контроллера после удачного POST запроса #6
Цитата Сообщение от zulkis Посмотреть сообщение
Разбирайтесь как работают куки с webview.
спасибо за совет. сегодня как раз этим и занимался.
Yandex
Объявления
15.03.2015, 22:43     Открытие второго контроллера после удачного POST запроса
Ответ Создать тему
Опции темы

Текущее время: 19:41. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru