powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Delphi [игнор отключен] [закрыт для гостей] / synapse + api
6 сообщений из 6, страница 1 из 1
synapse + api
    #39818011
ab555
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Всем доброго времени суток!
Только начал работать с api онлайн сервисов. Имеется некий сайт, на этом сайте надо авторизоваться. Приведу кусок из
документации к сайту, в части касающейся авторизации:

Код: html
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.
#1. Аутентификация
Type: POST
URL: /api/authenticate
Params:
login : string
password : string
Example Request via CURL:
$ curl -i  -H "Content-Type:application/json" -XPOST "https://сайт.ru/api/authenticate" -d '{"login": "user10", "password": "user10"}'
HTTP/1.1 200 OK
Server: nginx/1.14.0
Date: Sat, 01 Dec 2018 11:27:41 GMT
Content-Type: application/json; charset=UTF-8
Content-Length: 75
Connection: keep-alive
X-Powered-By: PHP/5.6.37
Set-Cookie: _csrf-frontend=2715967350f3a6f6b7b5fbe6b206a08f0380b2e2160acddc946a8e6441f36d11a%3A2%3A%7Bi%3A0%3Bs%3A14%3A%22_csrf-frontend%22%3Bi%3A1%3Bs%3A32%3A%22fHCE8PunPkX8JAsejQsJ_vKsUeeVKMkW%22%3B%7D; path=/; httponly

{"success":true,"data":{"access-token":"cc546f186f23a8aeeebbc5a4cb1c7e8f"}}
Success Response:
{
    "success": true,
    "data": {
        "access-token": "de18b292a57935ca015cee2c67cae778"
    }
}


Решил использовать библиотеку Synapse для этой задачи. Итак написал следующий код:

Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
uses httpsend, ssl_openssl;

procedure TForm1.Button1Click(Sender: TObject);
var
  HTTPSend: THTTPSend;
begin
  HTTPSend:=THTTPSend.Create;
  HTTPSend.KeepAlive:=true;
  HTTPSend.KeepAliveTimeout:=300;
  HTTPSend.TargetHost:='сайт.ru';
  HTTPSend.Protocol:='1.1';
  HTTPSend.MimeType:='application/json; charset=UTF-8';
  HTTPSend.UserName:='user10';
  HTTPSend.Password:='user10';

  if HTTPSend.HTTPMethod('post','https://сайт.ru/api/authenticate') then 
    begin
      Memo1.Clear;
      Memo1.Lines.LoadFromStream(HTTPSend.Document);
      Memo1.Text:=Utf8ToAnsi(memo1.Text);
    end;
end;



В итоге получаю от сервера ответ вида: {"success":false,"errors":{"username":["Необходимо заполнить «Username»."],"password":["Необходимо заполнить «Password»."]}}
Но я то считал, что эти поля у меня заполнены:
Код: pascal
1.
2.
  HTTPSend.UserName:='user10';
  HTTPSend.Password:='user10';



Но по всей видимости, делать это надо как то иначе. Провозился с этим почти весь день, но результата пока нет, буду рад любой помощи
...
Рейтинг: 0 / 0
synapse + api
    #39818054
Фотография Dmitry Arefiev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Надо понять, какую аутенфикацию использует сайт. Выше приведенное - хрень какая-то ...
Если ты явку не предоставишь и он не тупой, то организует хендшейк.
Если ничего не понятно из этого, то ...
...
Рейтинг: 0 / 0
synapse + api
    #39818111
sql2012
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ab555,


Причём здесь этот кусок?
авторHTTPSend.UserName:='user10';
HTTPSend.Password:='user10';

Если сервер ждёт данные в теле запроса...
'{"login": "user10", "password": "user10"}'

в виде: Content-Type:application/json
...
Рейтинг: 0 / 0
synapse + api
    #39818112
ab555
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
sql2012ab555,


Причём здесь этот кусок?
авторHTTPSend.UserName:='user10';
HTTPSend.Password:='user10';

Если сервер ждёт данные в теле запроса...
'{"login": "user10", "password": "user10"}'

в виде: Content-Type:application/json

Вы имеете в виду так?

Код: pascal
1.
HTTPSend.HTTPMethod('post','https://сайт.ru/api/authenticate -d {"login": "user10", "password": "user10"}')



Такой способ я тоже пробовал, но к сожалению безрезультатно...
...
Рейтинг: 0 / 0
synapse + api
    #39818119
inoremap
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ab555,

Код: pascal
1.
2.
PostData := '{"login": "user10", "password": "user10"}';
HTTPSend.Document.WriteBuffer(PostData[1], Length(PostData));
...
Рейтинг: 0 / 0
synapse + api
    #39818169
ab555
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
sql2012, inoremap Спасибо!

Получилось, оставлю код тут, вдруг кому то будет полезен:

Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
uses httpsend, ssl_openssl;

procedure TForm1.Button1Click(Sender: TObject);
var
  Data: TStringList;
  HTTPSend: THTTPSend;
begin
  HTTPSend:=THTTPSend.Create;
  HTTPSend.KeepAlive:=true;
  HTTPSend.KeepAliveTimeout:=300;
  HTTPSend.TargetHost:='сайт.ru';
  HTTPSend.Protocol:='1.1';
  HTTPSend.MimeType:='application/json; charset=UTF-8';
  Data:=TStringList.Create;
  Data.Add('{"login": "User10", "password": "User10"}');
  Data.SaveToStream(HTTPSend.Document);
  Data.free;
  if HTTPSend.HTTPMethod('post','https://сайт.ru/api/authenticate') then 
    begin
      Memo1.Clear;
      Memo1.Lines.LoadFromStream(HTTPSend.Document);
      Memo1.Text:=Utf8ToAnsi(memo1.Text);
    end;
end;
...
Рейтинг: 0 / 0
6 сообщений из 6, страница 1 из 1
Форумы / Delphi [игнор отключен] [закрыт для гостей] / synapse + api
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]