Форум программистов, компьютерный форум, киберфорум
Наши страницы
Objective-C
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.97/32: Рейтинг темы: голосов - 32, средняя оценка - 4.97
MaZaHaKa91
0 / 0 / 0
Регистрация: 13.11.2013
Сообщений: 8
1

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

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

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

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

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

Отправка POST-запроса на сервер
Задача - отправить на сервер запрос (либо параметры для запроса на сервере) и...

Отправка POST запроса на сервер
Нужно отправить POST запрос на сервер:...

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

14
albert102
-21 / 1 / 0
Регистрация: 30.10.2013
Сообщений: 54
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
Монфрид
1212 / 1022 / 293
Регистрация: 07.03.2012
Сообщений: 3,243
Завершенные тесты: 2
20.11.2013, 23:19 6
вам бы элементарно книжек для начала почитать по тематике программирования на objc, а то вы своими "вылетает после запуска" замучаете всех
0
zulkis
684 / 611 / 43
Регистрация: 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
Сообщений: 54
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
43 / 43 / 3
Регистрация: 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
Сообщений: 54
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
Монфрид
1212 / 1022 / 293
Регистрация: 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 запроса
Добрый день! столкнулся с проблемой, не могу отправить пост запрос, сваливаюсь...

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

Отправка POST запроса
Мне необходимо сделать ПО для авторегистрации на одном из сайтов. Делаю...


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

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

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