powered by simpleCommunicator - 2.0.59     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Delphi [игнор отключен] [закрыт для гостей] / HTTP 400 неверный запрос
11 сообщений из 11, страница 1 из 1
HTTP 400 неверный запрос
    #40068667
BESO1212
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Доброго дня.
Авторизация через Postman передаётся параметры Headers хешированы SHA512 UserName+SecretKey+Password+date и на вкладке Body UserName и Password формате JSON

1) Делаю хеширования SHA512 через Delphi

Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
uses System.Hash,
......................
var
  UserName,  SecretKey, Password: string;
  mydate : string;
  Fullparam : string;
  Hash : string;
begin
   UserName := 'MyLogin';
   SecretKey := 'jghhjgghjhkhjkhhhhjkjhk';
   Password := 'MyPass';
   mydate := FormatDateTime('dd.mm.yyyy',now());
   Fullparam := UserName+SecretKey+Password+mydate;
   Hash := THashSHA2.GetHashString(Fullparam, THashSHA2.TSHA2Version.SHA512).ToUpper;
   // для проверки получаю в  Memo1 и это проверял Postman-е
   Memo1.Text := Hash;
end;


Это хешированы код я проверяю Postman-е и всё нормально - правильно работает. Проблема возникает при передача параметров для авторизаций. Питаюсь передать так
Код: 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.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
procedure TForm1.Button1Click(Sender: TObject);
  const URL = 'http://testapi.screeninghub.ge/api/Authorize/SignIn';
var
  UserName,  SecretKey, Password: string;
  mydate : string;
  Fullparam : string;
  Hash : string;
  MyParams :  TStringList;
  RequestBody: ISuperObject;

begin
    try
    // ---TStringList Создать
    MyParams:= TStringList.Create;
    //--------------
    NetHTTPClient1.Create(nil);
 //------------------------------------------
     UserName := 'MyLogin';
     SecretKey := 'jghhjgghjhkhjkhhhhjkjhk';
     Password := 'MyPass';
     mydate := FormatDateTime('dd.mm.yyyy',now());
     Fullparam := UserName+SecretKey+Password+mydate;
 //--------------------------------
   //--------HandleRedirects := true; ----------------------
   IdHTTP1.HandleRedirects := true;
   // -----------------------
   IdHTTP1.IOHandler := IdSSLIOHandlerSocketOpenSSL1;
 //--------------------------------
     Hash := THashSHA2.GetHashString(Fullparam, THashSHA2.TSHA2Version.SHA512).ToUpper;
 //-------------------------------------
     MyParams.Add('Hash='+Hash+'');
     MyParams.Add('userName=MyLogin');
     MyParams.Add('password=MyPass');

 //------------------------------------------------------------------------
  idHTTP1.Request.ContentType := 'application/json';
  idHTTP1.Request.ContentEncoding := 'utf-8';
  Idhttp1.Request.Accept := 'application/json';
//  Idhttp1.Request.AcceptEncoding :='raw';
 //-----------------------------------------------------------
    Memo1.Text := IdHTTP1.Post(URL, MyParams);
//  Memo1.Text := Hash;
    finally
         MyParams.Free;
    end;
end;


Получаю ошибка HTTP 400 Bad Request я передаю MyParams всё ... Ребята, из за чего это может быть ? где я допускаю ошибку ?
...
Рейтинг: 0 / 0
HTTP 400 неверный запрос
    #40068668
BESO1212
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Параметр Body
...
Рейтинг: 0 / 0
HTTP 400 неверный запрос
    #40068672
vkorshun
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
BESO1212, Мне кажется в вашем запросе не передается JSON. По идее MyParams должен быть не TStringList а типа TStringStream.Create('{"userName":"...","password":"...","hash":"..."}')
...
Рейтинг: 0 / 0
HTTP 400 неверный запрос
    #40068673
vkorshun
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
BESO1212, И судя по скринам с проверкой. Json должен содержать только userName и password а hash передается в header. И еще вопрос, правильно ли Вы hash формируете ?
...
Рейтинг: 0 / 0
HTTP 400 неверный запрос
    #40068676
BESO1212
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
vkorshun Спасибо за внимание .
Смотрите у меня Hash да правильно хешированы , я его проверял в Postman-е .
Вопрос: то что есть в Postman-е Headers - это не JSON да ? а то что есть на Body это JSON , и все равно параметры из Headers и из Body надо передать как JSON ?
...
Рейтинг: 0 / 0
HTTP 400 неверный запрос
    #40068684
BESO1212
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Так тоже самое ошибка
Код: 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.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
procedure TForm1.Button1Click(Sender: TObject);
  const URL = 'http://testapi.screeninghub.ge/api/Authorize/SignIn';
var
  UserName,  SecretKey, Password: string;
  mydate : string;
  Fullparam : string;
  Hash : string;
  JSON :  TStringStream;
  Headers : TStringList;

begin
    try
 //------------------------------------------
     UserName := 'MyLogin';
     SecretKey := 'jghhjgghjhkhjkhhhhjkjhk';
     Password := 'MyPass';
     mydate := FormatDateTime('dd.mm.yyyy',now());
     Fullparam := UserName+SecretKey+Password+mydate;
 //--------------------------------
   //--------HandleRedirects := true; ----------------------
   IdHTTP1.HandleRedirects := true;
   // -----------Только это для SSL -------------
   IdHTTP1.IOHandler := IdSSLIOHandlerSocketOpenSSL1;
 //--------------------------------
     Hash := THashSHA2.GetHashString(Fullparam, THashSHA2.TSHA2Version.SHA512).ToUpper;
 //-------------------------------------
    Headers := TStringList.Create;
    Headers.Add('Hash='+Hash+'');
    // ---TStringList Создать
    JSON:= TStringStream.Create('{"userName": "MyLogin",  '+
                                ' "password": "MyPass"  '+
                                '}');

 //------------------------------------------------------------------------

  idHTTP1.Request.ContentType := 'application/json';
  idHTTP1.Request.ContentEncoding := 'utf-8';
  Idhttp1.Request.Accept := 'application/json';
 //---------------Передаю Headers и JSON--------------------------------------------
     idHTTP1.Post(URL, Headers, JSON);
//  ------------------------
    finally
         Headers.Free;
         JSON.Free;
    end;
end;

end.
...
Рейтинг: 0 / 0
HTTP 400 неверный запрос
    #40068694
zeon11
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
BESO1212,

Надо смотреть сниффером, что уходит с PostMan'a и с вашей программы.
С вашей программы скорее всего будет в BODY JSON'е каша. Например, перевод строки может быть заменён на "&" или на "%"
...
Рейтинг: 0 / 0
HTTP 400 неверный запрос
    #40068711
vkorshun
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
BESO1212,
Headers.Add('Hash='+Hash+''); Мне кажется так не верно. Посмотрите как правильно заполнять header
...
Рейтинг: 0 / 0
HTTP 400 неверный запрос
    #40068715
vkorshun
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
BESO1212,
Например
Код: pascal
1.
IdHTTP1.Request.CustomHeaders.AddValue('Hash',hash);


И еще одна строка меня смущает
Код: pascal
1.
IdHTTP1.IOHandler :=IdSSLIOHandlerSocketOpenSSL1

. Я не помню как там в Indy надо, но уже по идее даже TLS1 deprecated. И Ваш запрос работает по htpp , не по https.
...
Рейтинг: 0 / 0
HTTP 400 неверный запрос
    #40068722
vkorshun
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
BESO1212, Я вижу по коду что у Вас есть возможность использовать NetHTTPClient. Почему его не используете?
Примерно так
Код: 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.
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.
    FHttpClient: TNetHTTPClient;
    FHttpRequest: TNetHTTPRequest;
    FLastResponse: IHTTPResponse;


  FHttpClient := TNetHTTPClient.create(AOwner);
  FHttpRequest := TNetHTTPRequest.create(AOwner);
  FHttpRequest.Client := FHttpClient;

function TEReceiptAssistent.doRequest( hesh, data: String): String;
var
  sourceStream: TStringStream;
  respStream: TMemoryStream;
begin
  sourceStream := nil;
  respStream := TMemoryStream.create;
  FHttpRequest.CustomHeaders['Hash'] := hash;
  FHttpRequest.ContentStream := respStream;
  FHttpRequest.MethodString := 'post';
  FHttpRequest.URL := 'http://testapi.screeninghub.ge/api/Authorize/SignIn';
  FHttpClient.ContentType := 'application/json';
  FHttpClient.AcceptEncoding := 'UTF-8';

  if not data.IsEmpty then
  begin
    sourceStream := TStringStream.create;
    sourceStream.WriteString(data);
    sourceStream.Position := 0;
    FHttpRequest.sourceStream := sourceStream;
  end;
  try
    FLastResponse := FHttpRequest.execute();
    Result := FLastResponse.ContentAsString(TEncoding.UTF8);
    if (FLastResponse.StatusCode <> 200) then
    begin
      if Result.Contains(':"ERROR"') then
      begin
        var
        resp := SO(Result);
        if resp.S['result'] = 'ERROR' then
          raise Exception.create(resp.O['content'].S
            ['errorMessage']);
      end
      else
        raise Exception.create(FLastResponse.StatusText + ' ' +
          IntToStr(FLastResponse.StatusCode) + ' ' + Result);
    end;

  finally
    respStream.Free;
    FreeAndNil(sourceStream);
    FHttpRequest.ContentStream := nil;
    FHttpRequest.sourceStream := nil;

  end;
end;

TUserAuth = record
   userName: String;
   password: String;
end;

userInfo: TUserAuth;

// Вызов
   doRequest(hesh, TJSON.stringify(userAuth));
...
Рейтинг: 0 / 0
HTTP 400 неверный запрос
    #40068776
BESO1212
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Ребята всем огромное спасибо .! Реализовал так через NetHTTPClient1 работает всё нормально.

Код: 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.
25.
26.
27.
28.
29.
30.
31.
procedure TForm1.Button1Click(Sender: TObject);
  Const MyURL =  'http://testapi.screeninghub.ge/api/Authorize/SignIn';
var
  UserName,  SecretKey, Password: string;
  mydate : string;
  Fullparam : string;
  Hash : string;
  JSON :  TStringStream;
begin
 //----------------------------------------
     UserName := 'MyLogin';
     SecretKey := 'jghhjgghjhkhjkhhhhjkjhk';
     Password := 'MyPass';
     mydate := FormatDateTime('dd.mm.yyyy',now());
     // Обединить таком порядке как на документацие
     Fullparam := UserName+SecretKey+Password+mydate;
 //-------------хешироват SHA512 UserName+SecretKey+Password+mydate ---------------------------
 Hash := THashSHA2.GetHashString(Fullparam, THashSHA2.TSHA2Version.SHA512).ToUpper;
 //-----------передаю Headers = hash -----------------------------
  NetHTTPClient1.CustomHeaders['Hash'] := hash;
 //-----------------------------------------
  NetHTTPClient1.ContentType := 'application/json';
  NetHTTPClient1.AcceptEncoding := 'UTF-8';
//-----------------Body JSON ------------------------
     JSON:= TStringStream.Create('{"userName": "MyLogin",  '+
                                 ' "password": "MyPass"  '+
                                 '}');
  //----------------передаю URL + только JSON .! ----------------------
 Memo1.Lines.Text := NetHTTPClient1.Post(MyURL,  JSON).ContentAsString();
end;
end.
...
Рейтинг: 0 / 0
11 сообщений из 11, страница 1 из 1
Форумы / Delphi [игнор отключен] [закрыт для гостей] / HTTP 400 неверный запрос
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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