Delphi i wysyłanie dokumentów metodą POST i GET

0

Witam,

Mam Delphi XE i przyszło mi się zderzyć z tematem wysyłania dokumentów wykorzystując udostępnione API i metody POST i GET. Przyznam, że temat dla mnie jest zupełnie nowy i nie wiem czy Delphi XE w ogóle obsługuje takie metody? Czy do tego wykorzystuje się pakiet Indy?

Ogólnie temat dotyczy Elektronicznych Tytułów Wykonawczych. http://www.is-szczecin.pl/egzadm/inf_stronyinstrukcji/system_eTW.php

Opisują tam interfejs API https://etw-tst.mf.gov.pl/ai/ i inne potrzebne do tego szczegóły. Nigdy jednak z czymś takim się nie zetknąłem stąd moje pytanie czy w Delphi XE da się to obsłużyć? Jeśli tak to macie może jakieś tutoriale, przykłady?

0

@UglyMan: Sprawdziłem to całe REST ale z tego co wyczytałem to jest dostępne w Delphi XE Enterprise lub Architekt. Moja wersja Delphi XE to Professional więc nie mam takich komponentów.

3

Przykład z Internetu, ale tak używa się np. Indy

function PostExample: string;
var
  lHTTP: TIdHTTP;
  lParamList: TStringList;
begin
  lParamList := TStringList.Create;
  lParamList.Add('id=1');

  lHTTP := TIdHTTP.Create;
  try
    Result := lHTTP.Post('http://blahblahblah...', lParamList);
  finally
    lHTTP.Free;
    lParamList.Free;
  end;
end;
1
jm0x01 napisał(a):

@UglyMan: Sprawdziłem to całe REST ale z tego co wyczytałem to jest dostępne w Delphi XE Enterprise lub Architekt. Moja wersja Delphi XE to Professional więc nie mam takich komponentów.

Skoro środowisko jest słabe, skąd ten wybór?
To nie lata 1990-2000, są 100% darmowe nielimitowane ekosystemy, z intensywnym życiem i tysiącami projektów, a nie platforma o statystykach githiba na poziomie zaokrągleń

Pewnie znów bana dadzą

0

@AnyKtokolwiek: W takim środowisku został napisany cały program (projekt) już dawno temu i dlatego taki wybór, a raczej brak wyboru bo to nie ja pisałem tylko teraz otrzymałem w spadku.
Jakie są 100% darmowe ekosystemy do takich zadań?

Na chwilę obecną spróbowałem z Indy i przesłałem plik na swój serwer gdzie znajduje się odpowiedni plik index.php, który przetwarza moją wysyłkę, czyli po prostu zapisuje przesyłany plik na serwerze. Wygląda to mniej więcej tak:

idhttp := TIdHttp.Create(self); 
Params := TIdMultiPartFormDataStream.Create;
Params.AddFile('plik', 'mojplik.zip');

res := idhttp.Post('http://mojastrona.pl/', Params);

Params.Free;
idhttp.Free;

Jednak przy tej wysyłce Elektronicznych Tytułów Wykonawczych jest jakieś niezrozumiałe dla mnie żądanie:

POST /api/v1/etw-documents{
   "etwDocument":{
      "encryption":{
         "encryptionKey":{
            "key":"pHlGeultDGNZQoKV4RlVjor14ypRIF6O0ZGjlGCMqojYSuEqYo5awZlWU8OmvCEgQuwiT1AXLLJ3r0fR5eiKg
lJ+/UF3dQCpfgamr1DU2ThVsa2goFyKhNvMSohQI1gV3a4Tm9YAUXlLQkEu9QC+NkB6jIfB/dG91P4DrjXxEf/
ptAJIXN7L9/3GUiV1onhP2JHTRgxreil1vtZEazXXyFwe2ZGh1stpgpoDFlRee+Ss3WFX6nuq+QWSiIdFPwA9p
PozrGbDZS0Jf9Qwdzs/i2UCpkP8qOplk20dBF+S2/T1b41B+GSGIrN5LL9UxePluoA1+v7Uy9nNMCi/R4MODA=
=",
            "algorithm":"RSA",
            "mode":"ECB",
            "padding":"PKCS#1",
            "encoding":"Base64"
         },
         "encryptionDetails":{
            "aes":{
               "block":"16",
               "padding":"PKCS#7",
               "size":"256",
               "mode":"CBC",
               "aesIV":{
                  "bytes":"16",
                  "encoding":"Base64",
                  "iv":"JUnzAQXNexe7Dg0u9lwOUg=="
               }
            }
         }
      },
      "document":{
         "formType":{
            "code":"EZW",
            "version":"V1"
         },
         "formContent":{
            "encoding":"Base64",
            "content":"PERva3VtZW50PgoJPE9waXNEb2t1bWVudHUgLz4KCTxTaWduYXR1cmUgSWQ9IklEMSIgLz4KPERva3VtZW50P
g=="
         }
      }
   }
}

O co tutaj chodzi?
Czy cały taki zapis miałoby się wysłać jako parametr w funkcij idhttp.Post('http://mojastrona.pl/', TEKSTZADANIA)?

2

Wygląda na to, że po prostu leci sobie jakiś JSON na adres z końcówką /api/v1/etw-documents więc jako TEKSTZADANIA ustawiasz JSON z zapytania. Poza tym ważne aby przed wywołaniem Post ustawić IdHTTP.Request.ContentType:= 'application/json';.

1 użytkowników online, w tym zalogowanych: 0, gości: 1