Форум программистов, компьютерный форум, киберфорум
Delphi: Сети
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.56/9: Рейтинг темы: голосов - 9, средняя оценка - 4.56
21 / 14 / 11
Регистрация: 09.06.2011
Сообщений: 832
Записей в блоге: 3
1

Авторизация на сайте и получение данных по запросу

19.08.2017, 00:17. Показов 1701. Ответов 11
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Доброго времени суток. Ребят подскажите. В общем делаю авторизацию на сайте, все хорошо проходит я авторизуюсь. Потом мне нужно по запросу получить JSON в Response. Но мне выдает что я не авторизован. Как можно поддержать (работать в той же сессии как я понимаю).

Делаю запрос на авторизацию:

Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
var
  LoginData, Response: TStrings;
begin
  LoginData := TStringList.Create;
  Response := TStringList.Create;
  try
    LoginData.Add('username=' + Form1.edt1.Text);
    LoginData.Add('password=' + Form1.edt2.Text);
    LoginData.Add('rememberme=false');
    LoginData.Add('type=shipstation');
    Response.Text := Form1.idhtp1.Post('https://ss5.**********.com/api/auth/GetToken', LoginData);
    Form1.mmo1.Lines.Clear;
    Form1.mmo1.Lines.Add(Response.Text);
  except
 
  end;

Так пытаюсь получить JSON (в анализатое смотрел):
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
var
  TovarData, Response: TStrings;
  page, sort, dir, pageSize, showInactive: string;
begin
  TovarData := TStringList.Create;
  Response := TStringList.Create;
  //try
    TovarData.Add('page=1');
    TovarData.Add('sort=Name');
    TovarData.Add('dir=asc');
    TovarData.Add('pageSize=500');
    TovarData.Add('showInactive=false');
    Form1.idhtp1.Post('https://ss5.*********.com/api/products?', TovarData);
    Form1.mmo2.Lines.Clear;
    Form1.mmo2.Lines.Add(Response.Text);
  //except
 
  //end;
Буду признателен за любую подсказку куда смотреть.

Добавлено через 10 минут
Цитата Сообщение от First Посмотреть сообщение
Но мне выдает что я не авторизован
Точнее пишет: HTTP/1.1 401 Unauthorized
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
19.08.2017, 00:17
Ответы с готовыми решениями:

Авторизация на сайте и получение данных из личного кабинета на сайте
В общем, проштудировав три справочника за неделю и полазав в интернете, кроме как опухнувшего мозга...

Авторизация на сайте и получение html кода страницы
Доброго всем времени суток! У меня возникла одна проблема в написании кода. Может, кто-то сможет...

Получение данных по запросу через COM Порт
Добрый день. Сначала немного опишу общую картину. Имеется электронная индикаторная головка с...

Авторизация на сервере и получение данных
Всем привет)Прошу в меня камнями не кидать,я новичок,читаю гайды ,книги,но одному поднимать весь...

11
5786 / 4528 / 1431
Регистрация: 14.04.2014
Сообщений: 20,157
Записей в блоге: 20
19.08.2017, 16:01 2
в ответ на логин вам должны выдать какие-то данные, которые нужно присоединять к последующим запросам неким образом, который придумали авторы
1
21 / 14 / 11
Регистрация: 09.06.2011
Сообщений: 832
Записей в блоге: 3
19.08.2017, 16:18  [ТС] 3
Цитата Сообщение от krapotkin Посмотреть сообщение
в ответ на логин вам должны выдать какие-то данные, которые нужно присоединять к последующим запросам неким образом, который придумали авторы
Да я получаю данные в response

JSON
1
{"success":true,"userName":"dropshipping1","username":"dropshipping1","userId":"e01b8939-4a2d-488e-9ce2-e9d904dff767","seller":303692,"homeCountry":"CA","email":"6821652@mail.ru","token":"JNNK2KbdQPvrMNxKFJL9ZXDbkq79xJQAHWEM8sZ+R8KR0ppmc8uStlBO96cyhvBv/a6tOvnWTeIt73yu5n5h92/vo1l49RVqG+H7B7BNFb3+KML2Q2RJSSn9LBCk/DMXr6nZVwoxjh3lI0RnqopyuWMBJgu9v4h3H8Ku2seS7gkWYU0NGLn70HBnU3+2q2BKcaKzKJuXKgXzZrT6xS+YRm9Ig4LAoA+6yQCRW9fr+yjiIcq/ecrvfpvhZP0B/XvG3PjTi5TQfcLrMb/YTdv4tOUvjRwqQNbeqGUXWzqo7NszaTDQaBeRXhk/TobYNEl4os0Mm1wcSzlNXZWUBRatRTXPSiesxdXxegsht5wW4+qtS8VdHFL/iR0LIqkSebyKHIrK95afpGMmV/iFnOLaZT+LZoRN22+yI3DpU7KymVmIkZZsP/zLWSd+PBSxlhsPbqllgIJHEWi9rLJ0zKbeaNmFECEvlTTiQr8AqOx50RJV8GbUYI81/OZALiwZxYn1SCibzgr/Q2gjv3wJh34GOYPFqae4A/JIhva32KtGjs6PtAUG+BSVADTNcEAch7FmGKcID5oPfXwHP0vquSihFRr33lj2jzVDh/1vYg9bg+WaoOlrwrUo/oAFmWogcl/IptLMnVeVeDZia3KmFEqD49E1CQSpxIS6IQ+ZE8qEaQA=","sessionHandle":"e4a5f4b3-295c-4198-8cae-8bb5f2d138a8","tokenTtl":"0","proviso":128,"gravatar":"https://www.gravatar.com/avatar/eaa6935cfc769f0015cb3531777b36c3","redirect":false,"redirectHost":null}

То есть надо смотреть какие параметры передавать надо что бы выполнить запрос?
0
884 / 586 / 179
Регистрация: 28.02.2017
Сообщений: 2,359
Записей в блоге: 1
19.08.2017, 16:40 4
Может просто подключить куки-менеджер?
1
5786 / 4528 / 1431
Регистрация: 14.04.2014
Сообщений: 20,157
Записей в блоге: 20
19.08.2017, 17:58 5
нет не просто
вот зачем вам приходит токен?
чисто нечем людям было заняться? давайте что-нибудь пошлем в ответ на запрос???
если нет описания API можно только сниффать обмен существующего приложения и смотреть, куда и как эти данные пихаются
1
21 / 14 / 11
Регистрация: 09.06.2011
Сообщений: 832
Записей в блоге: 3
19.08.2017, 19:10  [ТС] 6
Куки не помогают. Выходит что мне надо вытащить токен из ответа от сервера и юзать его в запросах? А что бы знать что юзать надо посмотреть в анализаторе что за запрос идет и какие параметры?
0
5786 / 4528 / 1431
Регистрация: 14.04.2014
Сообщений: 20,157
Записей в блоге: 20
19.08.2017, 19:54 7
все верно
для того, чтобы самому слать запросы, надо делать это так как делают другие
1
21 / 14 / 11
Регистрация: 09.06.2011
Сообщений: 832
Записей в блоге: 3
22.08.2017, 12:39  [ТС] 8
Простите за наглость, но подскажите почему не могу получить токен, выдает ошибку и все.

Delphi
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
 Items: ISuperObject;
  A: ISuperArray;
  JSON, response_token: string;
  i: Integer;
  LoginData, Response: TStringList;
begin
  LoginData := TStringList.Create;
  Response := TStringList.Create;
  try
    LoginData.Add('username=' + Form1.edt1.Text);
    LoginData.Add('password=' + Form1.edt2.Text);
    LoginData.Add('rememberme=false');
    LoginData.Add('type=shipstation');
    Response.Text := Form1.idhtp1.Post('https://ss5.*************.com/api/auth/GetToken', LoginData);
    A := TSuperArray.Create(Response.Text);
    for i := 0 to A.Length - 1 do
    begin
      Items := A.O[i];
      response_token := Items.S['token'];
      Form1.mmo2.Lines.Add(response_token);
    end;
  except
    Form1.mmo2.Lines.Clear;
    Form1.mmo2.Lines.Add('Ошибка!!!');
  end;
Ошибка: Access violation at address ....
0
5786 / 4528 / 1431
Регистрация: 14.04.2014
Сообщений: 20,157
Записей в блоге: 20
22.08.2017, 13:21 9
Лучший ответ Сообщение было отмечено First как решение

Решение

Цитата Сообщение от First Посмотреть сообщение
A := TSuperArray.Create(Response.Text);
а что, ответ похож на JSON array ??
по мне, так обычный TSuperObject
соответственно A не создается. а вы и не проверяете. лезете for ... A.Length
соответственно, NIL.Length не существует

еще раз настоятельно рекомендую пользоваться дебаггером. и он вам даже показал, на какой строке ошибка
а вот мы почему-то должны догадываться.
1
21 / 14 / 11
Регистрация: 09.06.2011
Сообщений: 832
Записей в блоге: 3
22.08.2017, 22:15  [ТС] 10
Спасибо большое я разобрался. Теперь точно ошибаться в этом не буду. Спасибо еще раз.

Добавлено через 3 часа 19 минут
Ребят собственно по теме еще спрошу вас. В общем я посмотрел какие параметры отправляются на сервер по запросу, но там нет куда отправить токен.

Передаваемые параметры


page 1
sort Name
dir asc
pageSize 500
showInactive false


Вот думаю как получить ответ. Может надо использовать cookie? Тогда подскажите, что смотреть.
Простите за глупые вопросы, но с таким не работал(
0
5786 / 4528 / 1431
Регистрация: 14.04.2014
Сообщений: 20,157
Записей в блоге: 20
22.08.2017, 22:31 11
смотрите не на параметры а на заголовки (headers)
обычно именно там передается токен
Навскидочку что то типа
Authorization: Bearer JNNK2KbdQPvrMNxKFJL9ZXDbkq79xJQAHWEM8sZ+R8KR0ppmc8uStlBO96cyhvBv/a6tOvnWTeIt73yu5n5h92/vo1l49RVqG+H7B7BNFb3+KML2Q2RJSSn9LBCk/DMXr6nZVwoxjh3lI0RnqopyuWMBJgu9v4h3H8Ku2seS7gkWYU0NGLn70HBnU3+2q2BKcaKzKJuXKgXzZ rT6xS+YRm9Ig4LAoA+6yQCRW9fr+yjiIcq/ecrvfpvhZP0B/XvG3PjTi5TQfcLrMb/YTdv4tOUvjRwqQNbeqGUXWzqo7NszaTDQaBeRXhk/TobYNEl4os0Mm1wcSzlNXZWUBRatRTXPSiesxdXxegsht5wW4+qtS8VdHFL/iR0LIqkSebyKHIrK95afpGMmV/iFnOLaZT+LZoRN22+yI3DpU7KymVmIkZZsP/zLWSd+PBSxlhsPbqllgIJHEWi9rLJ0zKbeaNmFECEvlTTiQr8AqOx50RJV8GbUYI81/OZALiwZxYn1SCibzgr/Q2gjv3wJh34GOYPFqae4A/JIhva32KtGjs6PtAUG+BSVADTNcEAch7FmGKcID5oPfXwHP0vquSihFRr33lj2jzVDh/1vYg9bg+WaoOlrwrUo/oAFmWogcl/IptLMnVeVeDZia3KmFEqD49E1CQSpxIS6IQ+ZE8qEaQA=
1
21 / 14 / 11
Регистрация: 09.06.2011
Сообщений: 832
Записей в блоге: 3
22.08.2017, 22:40  [ТС] 12
Да такое я уже нашел.
Authorization-Token
lIPwYCCqHx0paUEO8x3TbeuMjpy6i7…wNgb4YPckBMMcxwoL0Oi2GnlhAfE=

А потом как действовать? Я так понимаю перед запросом надо указать?
Примерно так:

Delphi
1
2
  Form1.idhtp1.Request.CustomHeaders.AddValue('Authorization', тут токен который я получаю);
  Form1.mmo3.Text := Form1.idhtp1.Get('https://ssapi.*********.com/products/');
Добавлено через 5 минут
Все разобрался все получаю.
Не знаю как правильно или нет но работает (если что то поправлю потом)

Delphi
1
2
  Form1.idhtp1.Request.CustomHeaders.AddValue('Authorization-Token', тут токен который получил);
  Form1.mmo3.Text := Form1.idhtp1.Get('https://ss5.************.com/api/products?page=1&sort=Name&dir=asc&pageSize=500&showInactive=false');
СПАСИБО! Вам люди добрые!!!
0
22.08.2017, 22:40
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
22.08.2017, 22:40
Помогаю со студенческими работами здесь

Авторизация на сайте и ввод данных в поля
Добрый день. Нужен скрипт для авторизации на сайте и ввода данных в поля(формы ввода). Первую...

Получение данных введенных в форму на сайте
Вообщем есть идея: написать программу которая будет работать подобно вирусу (без окна, запускаться...

Получение капчи с сайта и отправка данных в форму на сайте
Помогите начинающему программисту. Допустим нужна программа для регистрации тут. Как это...

Авторизация в Windows по запросу клиента
Здравствуйте, дорогие форумчане. У меня есть сервер, который запускается на моём компьютере до...


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

Или воспользуйтесь поиском по форуму:
12
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru