Форум программистов, компьютерный форум, киберфорум
Наши страницы

Objective-C

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 40, средняя оценка - 4.68
MaZaHaKa91
0 / 0 / 0
Регистрация: 13.11.2013
Сообщений: 8
#1

Отправка POST запроса на сервер - Objective-C

17.11.2013, 09:02. Просмотров 5542. Ответов 14
Метки нет (Все метки)

Так как,в прошлой теме мне никто отвечать даже и не собирается,то спрошу у добрых и умных людей в другйо формулировке?Как отправить в XCode POST запрос с верными параметрами(логин,пароль)?И как определить на какую именоо страничку на сервере нужно посылать этот запрос?Сайт www.dnevnik.ru
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
17.11.2013, 09:02
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Отправка POST запроса на сервер (Objective-C):

Открытие второго контроллера после удачного POST запроса - Objective-C
При старте программы у меня открывается loginWindowController, там я ввожу логин и пароль. После нажатия на кнопку войти отправляются два...

Отправка приложением на сервер файлов с устройства - Программирование iOS
Доброго дня! Подскажите, пожалуйста, возможно ли в принципе организовать доступ приложению к каким-то данным пользователя на...

Отправка POST запроса на сервер - PHP
Нужно отправить POST запрос на сервер: http://mysite.ru/folder1/folder2/?KEY1=VALUE1&KEY2=VALUE2&KEY3=VALUE3 и получить ответ, ответ...

Отправка POST запроса - Программирование Android
Добрый день! столкнулся с проблемой, не могу отправить пост запрос, сваливаюсь на OutputStream os = con.getOutputStream(); в query...

Отправка POST запроса - JavaScript
Как сделать что бы скриптfunction loadXMLDoc() { var xmlhttp; if (window.XMLHttpRequest) {// код для IE7+, Firefox, Chrome,...

Отправка запроса Post - Visual Basic .NET
Всех приветствую. Знаю что тема много раз обсуждалась, посмотрел на форуме, попытался реализовать то что мне нужно - не получилось. По...

14
albert102
-21 / 1 / 0
Регистрация: 30.10.2013
Сообщений: 53
19.11.2013, 10:18 #2
делаю так:

при нажатии на кнопку отправки\логига
Код
NSMutableURLRequest* request = [NSMutableURLRequest requestWithURL:[NSURL
URLWithString:@"http://сайт.ru/login.php"]
cachePolicy:NSURLRequestUseProtocolCachePolicy timeoutInterval:15.0];
request.HTTPMethod = @"POST";

NSString * myName = edit_name.text;
NSString * myPassword= edit_password.text;

NSString * param = [NSString stringWithFormat:@"action=login&name=%@&password=%@", myName, myPassword];
request.HTTPBody = [param dataUsingEncoding:NSUTF8StringEncoding];

NSURLConnection *connection = [[NSURLConnection alloc] initWithRequest:request delegate:self];


if (connection) {
// сообщение пользователю - пожалуйста, подождите ...
receivedData = [[NSMutableData data] init];
}
далее обрабатываю ответ

Код
- (void)connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response
{
[receivedData setLength:0];
}

- (void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data
{

[receivedData appendData:data];
}

- (void)connection:(NSURLConnection *)connection didFailWithError:(NSError *)error {
UIAlertView *errorAlert = [[UIAlertView alloc]
initWithTitle:@"Ошибка" message:@"Пожалуйста, проверьте соединение с Интернетом." delegate:nil cancelButtonTitle:@"OK" otherButtonTitles:nil];
[errorAlert show];
}


- (void)connectionDidFinishLoading:(NSURLConnection *)connection {
    
NSString * data = [[NSString alloc] initWithData:receivedData encoding:NSUTF8StringEncoding];

if ([data  isEqual: @"OK"]) {

label_status.text = @"Вы успешно залогинены.";
}

}
0
MaZaHaKa91
0 / 0 / 0
Регистрация: 13.11.2013
Сообщений: 8
19.11.2013, 15:32  [ТС] #3
albert102,большое спасибо за ответ.Этот код более менее завелся,но у меня есть парочка вопросов

1)Почему мне XCode перед каждой переменной предлагает поставить черту _ ? Понять не могу что он хочет .Он пишет "Use of undeclared identifer".Переменную я обьявил,а он будто не видит
2)Ты написал в коде что запрос посылается на php страницу на сервере,как мне понять на какой адрес посылать эти данные? Сайт www.dnevnik.ru .Может как-то можно в HTML коде страницы это увидеть?
0
glvrzzz
95 / 71 / 12
Регистрация: 12.12.2012
Сообщений: 214
19.11.2013, 19:30 #4
Цитата Сообщение от MaZaHaKa91 Посмотреть сообщение
1)Почему мне XCode перед каждой переменной предлагает поставить черту _ ? Понять не могу что он хочет .Он пишет "Use of undeclared identifer".Переменную я обьявил,а он будто не видит
Вы скорее всего объявили не переменную, а @property, xcode для @property автоматом создает ivar, называя его _имяпроперти, и соответствующие аксессоры (емнип так с версии 4)
2)Ты написал в коде что запрос посылается на php страницу на сервере,как мне понять на какой адрес посылать эти данные? Сайт www.dnevnik.ru .Может как-то можно в HTML коде страницы это увидеть?
HTML5
1
<form id="loginForm" action="https://login.dnevnik.ru" method="post" class="form">
0
MaZaHaKa91
0 / 0 / 0
Регистрация: 13.11.2013
Сообщений: 8
20.11.2013, 17:26  [ТС] #5
albert102,вылетает после запуска(скрин и код ниже):
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
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
#import "DNVViewController.h"
 
@interface DNVViewController ()
 
 
@end
 
@implementation DNVViewController
 
- (void)viewDidLoad
{
    [super viewDidLoad];
  
 
       
        
 
//- (IBAction)comeButtonAction:(id)sender
//{
 
NSMutableURLRequest* request = [NSMutableURLRequest requestWithURL:[NSURL
                                                                    URLWithString:@"http://login.dnevnik.ru"]
                                                       cachePolicy:NSURLRequestUseProtocolCachePolicy timeoutInterval:15.0];
request.HTTPMethod = @"POST";
 
NSString * myName = _edit_name.text;
NSString * myPassword= _edit_password.text;
 
NSString * param = [NSString stringWithFormat:@"action=login&name=%@&password=%@", myName, myPassword];
request.HTTPBody = [param dataUsingEncoding:NSUTF8StringEncoding];
 
NSURLConnection *connection = [[NSURLConnection alloc] initWithRequest:request delegate:self];
 
 
if (connection) {
    _otvet.text = @"Соединение установлено";
    NSLog(@"ama ama");
    receivedData = [[NSMutableData data] init];
}
else
{
    _otvet.text=@"Проблема с соединением";
    NSLog(@"ama ama faza");
}
    
}
 - (void) connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response
    {
        [[receivedData init] setLength:999999];
        
    }
    
- (void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data
    {
        
        [receivedData appendData:data];
    }
    
    - (void)connection:(NSURLConnection *)connection didFailWithError:(NSError *)error {
        UIAlertView *errorAlert = [[UIAlertView alloc]
                                   initWithTitle:@"Ошибка" message:@"Пожалуйста, проверьте соединение с Интернетом." delegate:nil cancelButtonTitle:@"OK" otherButtonTitles:nil];
        [errorAlert show];
    }
    
    
    - (void)connectionDidFinishLoading:(NSURLConnection *)connection {
        
        NSString * data = [[NSString alloc] initWithData:receivedData encoding:NSUTF8StringEncoding];
        
        if ([data  isEqual: @"OK"]) {
            
            _otvet.text = @"Вы успешно залогинены.";
            NSLog(@"Вы успешно залогинены.");
        }
    }
 
 
 
 
 
    @end
http://www.picshare.ru/uploads/131120/osBCoFt4k9.jpg
0
Монфрид
1199 / 1009 / 154
Регистрация: 07.03.2012
Сообщений: 3,243
Завершенные тесты: 2
20.11.2013, 23:19 #6
вам бы элементарно книжек для начала почитать по тематике программирования на objc, а то вы своими "вылетает после запуска" замучаете всех
0
zulkis
683 / 610 / 38
Регистрация: 13.01.2011
Сообщений: 1,724
21.11.2013, 08:27 #7
MaZaHaKa91, это надо было такой бесполезный скриншот снять... Аплодирую стоя

Добавлено через 8 минут
Падает либо на didReceiveResponse либо на didReceiveData... Не ясно из скриншота. Но делаете вы еще ту "магию"...
Не делайте так.
0
glvrzzz
95 / 71 / 12
Регистрация: 12.12.2012
Сообщений: 214
21.11.2013, 09:34 #8
Цитата Сообщение от MaZaHaKa91 Посмотреть сообщение
[[receivedData init] setLength:999999];
это прелестно

Поддерживаю Монфрид
0
albert102
-21 / 1 / 0
Регистрация: 30.10.2013
Сообщений: 53
21.11.2013, 09:49 #9
вместо
Код
[[receivedData init] setLength:999999];
надо же
Код
[receivedData setLength:0];

а что бы редактор понял что такое receivedData наверху
Код
@interface DNVViewController (){
NSMutableData * receivedData;
}
надо добавить

кстати вопрос, читал что после alloc надо всегда делать release, чтобы утечки памяти не было.
почему в xcode 5 при добавлении например
Код
[errorAlert show];
[errorAlert release];
вылетает ошибка? типо xcode 5 сам понимает?
0
Dark_Knight12
41 / 41 / 2
Регистрация: 07.11.2013
Сообщений: 132
21.11.2013, 11:32 #10
Цитата Сообщение от albert102 Посмотреть сообщение
вылетает ошибка? типо xcode 5 сам понимает?
Да, в Xcode 5 организована система ARC. ARC не только управляет памятью вместо вас, но и запрещает вам делать это собственноручно. Совершенно недопустимо, используя ARC, посылать сообщения retain/release/autorelease объектам.
0
MaZaHaKa91
0 / 0 / 0
Регистрация: 13.11.2013
Сообщений: 8
21.11.2013, 15:56  [ТС] #11
albert102,спасибо,я указал такой параметр для метода setLength ,т.к программа крашилась из за этого параметра,и на стеке было такое решение(оказалось необходимо было правильно работать с массивом данных получаемых из сети.Теперь программа не крашится,т.к я пересоздал проект уже с функцией ARC ,потому что из за косяков с памятью программа и чудила.Теперь все нормально.Осталась одна проблема.Я привязал код на кнопку и Text Field (для того чтобы можно было вводить логин и пароль),но осталась одна проблема при исполнении данного кусочка кода,программа говорит что не авторизовалась:

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
59
60
61
62
63
64
65
66
67
68
69
70
71
72
#import "MainClass.h"
 
@implementation MainClass
 
- (IBAction)actionButton:(id)sender {
    NSMutableURLRequest* request = [NSMutableURLRequest requestWithURL:[NSURL
                                                                        URLWithString:@"http://login.dnevnik.ru"]
                                                           cachePolicy:NSURLRequestUseProtocolCachePolicy timeoutInterval:15.0];
    request.HTTPMethod = @"POST";
    
    NSString * myName = _loginLogin.text;
    NSString * myPassword= _passwordLogin.text;
    
    NSString * param = [NSString stringWithFormat:@"action=login&name=%@&password=%@", myName, myPassword];
    request.HTTPBody = [param dataUsingEncoding:NSUTF8StringEncoding];
    
    NSURLConnection *connection = [[NSURLConnection alloc] initWithRequest:request delegate:self];
    
    
    if (connection) {
        _otvet.text = @"Соединение установлено";
        NSLog(@"ama ama");
        
    }
    else
    {
        _otvet.text=@"Проблема с соединением";
        NSLog(@"ama ama faza");
    }
    
}
- (void) connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response
{
    [receivedData setLength:0];
    
}
 
- (void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data
{
    
    [receivedData appendData:data];
}
 
- (void)connection:(NSURLConnection *)connection didFailWithError:(NSError *)error {
    UIAlertView *errorAlert = [[UIAlertView alloc]
                               initWithTitle:@"Ошибка" message:@"Пожалуйста, проверьте соединение с Интернетом." delegate:nil cancelButtonTitle:@"OK" otherButtonTitles:nil];
    [errorAlert show];
}
 
 
- (void)connectionDidFinishLoading:(NSURLConnection *)connection {
    
    NSString * data = [[NSString alloc] initWithData:receivedData encoding:NSUTF8StringEncoding];
    
    if ([data  isEqual: @"OK"]) {
        
        _otvet.text = @"Вы успешно залогинены.";
        NSLog(@"Вы успешно залогинены.");
    }
    else
    {
        NSLog(@"Ошибка авторизации");
  }
}
 
 
- (IBAction)passwordLogin:(id)sender {
}
 
- (IBAction)loginLogin:(id)sender {
}
@end
Подозреваю ,что ошибка в этом отрывке кода :
Objective-C
1
2
3
4
5
NSString * myName = _loginLogin.text;
    NSString * myPassword= _passwordLogin.text;
    
    NSString * param = [NSString stringWithFormat:@"action=login&name=%@&password=%@", myName, myPassword];
    request.HTTPBody = [param dataUsingEncoding:NSUTF8StringEncoding];
Обьясните пожалуйста,как необходимо формировать параметр для отправки данных?Литературы для работы в Objective C,с HTML в интернете я не нашел.Осилил уже два учебника,а нигде такой темы и не встречается.И кстати массив receivedData у меня был описан как переменная в h файле,так что с этим все нормально.
0
albert102
-21 / 1 / 0
Регистрация: 30.10.2013
Сообщений: 53
21.11.2013, 16:01 #12
зачем тут то все верно,.
авторизации нет, потому что надо на стороне сайта смотреть php файл, что он там обрабатывает и как.
я просто пример привел как передать в него
Код
action=login&name=%@&password=%@
0
MaZaHaKa91
0 / 0 / 0
Регистрация: 13.11.2013
Сообщений: 8
21.11.2013, 16:22  [ТС] #13
Цитата Сообщение от albert102 Посмотреть сообщение
зачем тут то все верно,.
авторизации нет, потому что надо на стороне сайта смотреть php файл, что он там обрабатывает и как.
я просто пример привел как передать в него
Код
action=login&name=%@&password=%@
воот,а вот как его найти,и что потом с ним делать,я и не знаю((совсем замучался уже

Добавлено через 6 минут
HTML5
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
<form id="formLogin" action="/" method="post" class="formLogin">
    <input type="hidden" name="xss" value="7e90ae165d678d17966fc4e74e2e7029fd9e8895c8739a8d6d8e91a5a31e310e" />
    <input id="ReturnUrl" name="ReturnUrl" type="hidden" value="" />
 
    <h2>Вход в Дневник</h2>
 
    <div class="col24 first">
        <div class="panel">
            <div class="rounded">
                <div class="c1">
                    <div class="c2"></div>
                </div>
                <div class="cc">
                    <div class="row">
                        <label for="Login">Логин</label>
                        <input class="t w2 r required" id="Login" name="Login" tabindex="1" type="text" value="" />
                        <div class="clear"></div>
                    </div>
                    <div class="row">
                        <label for="Password" class="f">Пароль <a href="/password" title="Восстановление забытого пароля">Забыли пароль?</a></label>
                        <input type="password" id="Password" name="Password" value="" maxlength="50" class="t w2 r required" tabindex="2" />
                        <div class="clear"></div>
Вот,откопал кусок странички,который подозрительно похож на то что мне нужно

Добавлено через 11 минут
но ,а с ним то,что делать?
0
Монфрид
1199 / 1009 / 154
Регистрация: 07.03.2012
Сообщений: 3,243
Завершенные тесты: 2
21.11.2013, 19:05 #14
есть такая штука как sniffer (или анализатор траффика) (Http Analizer, например), вот его запускаете, указываете, за каким процессом следить (ie, например), в ie открываете эту страничку свою, делаете логин, и проч. После чего сниффер покажет все запросы, заголовки, и данные которые отсылаются этим процессом
1
sp1derok
1 / 1 / 0
Регистрация: 04.02.2015
Сообщений: 18
13.03.2015, 01:37 #15
Цитата Сообщение от MaZaHaKa91 Посмотреть сообщение
воот,а вот как его найти,и что потом с ним делать,я и не знаю((совсем замучался уже
Я думаю что уже не в тему, но я как раз разбирался с тем же самым и мне очень помогла программа Charles web proxy, там как раз и можно посмотреть что конкретно отправляется.
В Вашем случаи я думаю :

Objective-C
1
NSString * param = [NSString stringWithFormat:@"Login=%@&Password=%@", myLogin, myPassword];
Для моей программы я взял именно этот запрос и подставил данные по поему сайту, все работает.
1
13.03.2015, 01:37
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
13.03.2015, 01:37
Привет! Вот еще темы с ответами:

Отправка POST запроса - Программирование Android
Здраствуйте, нужно на сайт отправить пост запрос з логином і паролем, потом сайт оддаст строку, ее нужно вивсти в текствів, у меня есть код...

Отправка Post запроса - PHP
Можно ли сделать так, что бы пхп скрипт отправлял пост запрос другому скрипту и заносил ответ в переменную без cURL?

Отправка post запроса - C#
Здравствуйте, есть сайт, на котором нужно авторизироваться. Снифером отловил post запрос, посылающий данные: Parameter Name Value ...

Отправка POST запроса - PHP Сети
Доброго времени суток! Существует некий сайт (Сайт_1) на котором есть форма заказа пропусков, для заказа пропуска нужно ввести ID и...


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

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

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