GithubHelp home page GithubHelp logo

viniciussanchez / restrequest4delphi Goto Github PK

View Code? Open in Web Editor NEW
483.0 483.0 141.0 2.07 MB

API to consume REST services written in any programming language with support to Lazarus and Delphi

Home Page: https://go.hotmart.com/U88695509H

License: MIT License

Pascal 100.00%
api client delphi embarcadero fpc freepascal indy lazarus nethttp request rest simple

restrequest4delphi's Introduction

Hi there 👋

restrequest4delphi's People

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

restrequest4delphi's Issues

TRequestIndy.Post incorrect execution

Imagino que esteja errado o método abaixo
function TRequestIndy.Post: IResponse;
begin
Result := FResponse;
ExecuteRequest(mrGET);
end;

trocar para :

function TRequestIndy.Post: IResponse;
begin
Result := FResponse;
ExecuteRequest(mrPOST);
end;

Windows 7

Boa tarde, uso sua biblioteca de longa data até hoje tudo rodando normalmente porem me deparei com a necessidade de usar no windows 7, só que ai estou tendo problema não funciona. Tem ideia de como posso resolver? Grato

the request contains an entity body but no content-type header

Olá tudo bem?

Estou tentando enviar via post um JSON, segui o exemplo da wiki, porem estou tendo esse retorno,

Ja tentei adicionar no header via AddHeader('Content-Type'... ja tentei usar o metodo ContentType('aplication/json') em ambos os casos a API me retorna essa mensagem,

Existe forma de resolver?

Obrigado

Oauth2

Bom dia Vinicius, é possível fazer autenticação com Oauth2 nesse componente?

Obrigado

Implementar métodos para recuperar cookies

Precisamos recuperar o cookies retornado de uma requisição, pois o mesmo pode ser um token para uso na API.

Exemplo como é feito no Indy:

FCookieName := FIdHTTP.CookieManager.CookieCollection.Cookies[0].CookieName;
FCookieText := FIdHTTP.CookieManager.CookieCollection.Cookies[0].CookieText;

Requisição retorna erro de segurança quando o exe é Release

Boa tarde, Vinícius.

Comecei a ter um erro de segurança em um sistema que faz requisições REST e quebrei muita cabeça até encontrar o que poderia estar acontecendo.
A princípio, achei que pudesse ser por causa da versão do windows do cliente, Windows 7, mas depois de muitos testes verifiquei que quando enviava um executável em Release, o erro de segurança acontecia, já quando o rodava o mesmo executável Debug este erro não acontecia.
Em outras versões do Windows o problema não acontece, independente do executável ser Debug ou Release.

Na requisição é passado um header com {'Authorization':'Basic_....'}

Você saberia me dizer o motivo de isso acontecer?

Contantes

Boa tarde, tudo bem? Poderia me ajudar, uso o RESTRequest4Delphi em todos meus projetos e gostaria de saber se teria como colocar alguns valores como constantes.
Valores como Request.BasicAuthentication o praticamente não muda então todas as requisições tem o mesmo valor, então não faz sentido eu passar ele em todas as chamadas, gostaria de colocar alguns valores como constantes.

Então todas as requisições já vão constar esses valores.
Grato

NetHTTP

Implement NetHTTP compatibility

CONSUMIR API PIX ITAU

BOA TARDE, AMIGOS ALGUEM JA CONSUMIU API PIX ITAU , UTILIZANDO O TOKEN E CERTFICAR CRC

Exception?

Bom dia, tenho um servidor horse com uma url (flag) para o app consultar se o servidor está online.
Quando faço uma requisição com o RestRequest nessa flag com o servidor offline o sistema 'trava' e não consigo tratar usando o bloco

try
iResposta := TRequest.New.BaseURL(sServidor).Resource(sURL).Accept(aAccept).get;
if iResposta.StatusCode = 200 then
Result := True
else
Result := false;
except
on E: Exception do
begin
Result := false;
TCrux.Log(E);
end;
end;

Algo que eu possa fazer para saber se o servidor está mesmo online? Grato

Deploy no Android

boa tarde Vinícius

Estou testando a biblioteca, porém quando faço os teste executando pelo Delphi tudo ok, porém ao fazer o deploy no celular a aplicação não encontra o endpoint retorno erro 404.

LResponse := TRequest.New.BaseURL(DMConexao.vsHost_App + '/usuarios/login/')
.AddUrlSegment('login', Edit_Usuario.Text) // Path Variables
.TokenBearer(DMConexao.Get_Token)
.ContentType('application/json')
.AddBody(json.ToJSON)
.DataSetAdapter(MemTable_1)
.Accept('application/json')
.Get;

Campo Blob Binary

Tenho um campo blob binary que armazeno a foto, quando faço um GET com opção de serializar o dataset, acontece dos situações:
1 - Quando o GET retorna mais de um registro, o campo vem como base64, sendo que em alguns caso é gravado no campo apenas parte do base64;
2- Quando o GET retorna apenas um registro, o campo vem como o código binário da imagem.

Obs: no response sempre vem em base64 completa sem corte.

Indy

Migrate to indy component

Autenticação OAuth2

Boa tarde, é possível fazer pelo RestRequest4Delphi com SSL:

Para a utilização do Pix é necessário que o cliente e o servidor se comuniquem em uma conexão verificada um com o outro. A verificação é feita pelo certificado bidirecional (.PEM ou .P12), isto é, o servidor e o cliente implementaram um certificado de chave privada e um certificado de chave pública que permite que um possa assegurar-se da identidade do outro.

Por isso para fazer qualquer requisição HTTP à API Pix, incluindo a requisição de autorização junto ao OAuth2, é necessário que o certificado .P12, ou .PEM, esteja presente nos cabeçalhos da requisição.

Se sim! teria uma exemplo ou uma dica?

Compiling problem with Interface

When Compiling Smaple from NetHTTP I obtain this errore about Interface implementation and another on Async
[dcc32 Error] RESTRequest4D.Request.NetHTTP.pas(10): E2291 Missing implementation of interface method IRequest.AddFile

SecureProtocols

Olá a Todos!

Gostaria de saber como fica a chamada quando precisamos definir o protocolo, exemplo:
RestClient.SecureProtocols:=[THTTPSecureProtocol.TLS12];
Como fica usando o RESTRequest4Delphi?

Agradeço!

Abraço!

function AddParam :: pkGETorPOST vs pkQUERY

Hi,

I use Delphi 10.4 (Sydney)
The following function give me a 404 error. Is there any reason why you force pkQUERY ? It only works when I replace pkQUERY by pkGETorPOST.

unit RESTRequest4D.Request.Intf;

{$IF COMPILERVERSION < 33}
function AddParam(const AName, AValue: string; const AKind: TRESTRequestParameterKind = TRESTRequestParameterKind.pkGETorPOST): IRequest;
{$ELSE}
function AddParam(const AName, AValue: string; const AKind: TRESTRequestParameterKind = TRESTRequestParameterKind.pkQUERY): IRequest;

FPC

Implement FPC compatibility

Info to Upload File

Thanks for share your interesting component.
I'm study regarding to upload file funcionality usind AddFile(), I'have made a rest server than run correctly with Indy tIdHTTP but I have problem with your component.
I add my example code below, please can you tell me if there are some errors in my code?
I think is a good idea to add to sample code a upload and download example in a future release.
Another question ... have you planned to put a debug function to know what is sent to server ?
Regards
Enrico

procedure Tfmmain.ButtonUploadClick(Sender: TObject);
var
LResponse: IResponse;
FStreamFile: TFileStream;
Response: string;
begin

FStreamFile := TFileStream.Create(GetCurrentDir + '\files\Test_PDF.pdf', fmOpenRead);

LResponse := TRequest.New.BaseURL

// (BASE_URL + 'files/uploadfile.php').TokenBearer(JWTToken) // normal
(BASE_URL + 'imageput').TokenBearer(JWTToken) // rewriteurl
.UserAgent('Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/61.0.3163.100 Safari/537.36')
.AddFile('TestPDF.pdf', FStreamFile)
.Post;

FStreamFile.Free;

end;

D11 compatibility

Hi Vinicius,

I found issues when compiling with D11 and NetHTTP, since the version was ifdef'd against a fixed define.
See below fix (22.09.21), with CompilerVersion instead of {$IFDEF VER340 } , should be solving the issue.

`unit RESTRequest4D.Request.NetHTTP;

...

function TRequestNetHTTP.AddHeader(const AName, AValue: string): IRequest;
begin
  Result := Self;
  if AName.Trim.IsEmpty or AValue.Trim.IsEmpty then
    Exit;

//S4 22.09.21: Replaced by 
{$IF CompilerVersion >= 34 }
  FNetHTTPClient.CustHeaders.Add(AName, AValue);
{$ELSE}
  {TODO -oAll -cCustoms Headers : Add headers with NetHTTPClient in versions below of 10.4 Sydney}
{$ENDIF}
end;

...

function TRequestNetHTTP.ClearHeaders: IRequest;
//S4 22.09.21: Replaced by 
{$IF CompilerVersion >= 34 }
var
  I: Integer;
{$ENDIF}
begin
  Result := Self;
//S4 22.09.21: Replaced by 
{$IF CompilerVersion >= 34 }
  for I := 0 to Pred(FNetHTTPClient.CustHeaders.Count) do
    FNetHTTPClient.CustHeaders.Delete(I);
{$ELSE}
  {TODO -oAll -cCustom Headers : Clear headers with NetHTTPClient in versions below of 10.4 Sydney}
{$ENDIF}
end;

`

Retorno no MacOS

Estou fazendo uma requisição HTTPS e no Windows e Android está vindo a resposta normalmente mas quando compilo para MacOs a resposta chega em branco, alguém já passou por isso?

Content-Type enviando duas vezes a API

Tenho uma API em java e ao realizar uma requisição percebi que era enviado duas vezes o Content-Type (application/json, application/json).

Na unit RESTRequest4D.Request.Client no create esta chamando o metodo Self.ContentType('application/json');

Eu comentei esse método e na minha requisição eu não alimentei o content type. Ficando assim.

lRes := TRequest.New
.BaseURL('http://localhost:8084/SisGestao/api/login')
.AddBody(lJson)
.Post;

Erro ao rodar o Client

Fala Dev blz.

Rodei o Client exemplo e me mostra os seguintes erros:

[dcc32 Hint] REST.Json.pas(259): H2443 Inline function 'TJSONObject.GetPair' has not been expanded because unit 'System.Generics.Collections' is not specified in USES list

[dcc32 Fatal Error] REST.Json.pas(286): F2051 Unit REST.Client was compiled with a different version of REST.Json.TJson

Delphi Rio 3

Implementar para uso em versões anteriores

Olá @viniciussanchez, segue uma dica de um amigo para que possa ser utilizado em versões anteriores (no caso, usamos no Delphi XE7):

function TRequest.AddBody(const AContent: TStream; const AOwns: Boolean): IRequest;
begin
Result := Self;
{$IF COMPILERVERSION <= 29}
FRESTRequest.AddBody(AContent, TRESTContentType.ctAPPLICATION_OCTET_STREAM);
{$ELSE}
FRESTRequest.Body.Add(AContent, TRESTContentType.ctAPPLICATION_OCTET_STREAM);
{$ENDIF}

if AOwns then
AContent.Free;
end;

Bug com Node

Usando o RESTRequest compilado com a diretiva RR4D_SYNAPSE e fazendo post em um servidor node o body vai vazio.

Mesmo configurando o Accept ou Content-Type.

Pra enviar corretamente tem que setar o mime type no FHTTPSend.

FHTTPSend.MimeType := 'application/json';

Acredito que o ideal seria criar TRequest.New.MimeType(''application/json'').

Autenticacao Bearer

Na documentacao mostra que a autenticacao via token Bearer deve ser da seguinte forma
Request.TokenBearer(token)
Porem ao implementar essa propriedade nao aparece

Show ? after export to TFDMemTable

Hi
This is my Code

  aRes:=TRequest.New.BaseURL(BaseURL)
        .Resource('Category')
        .BasicAuthentication('zig','zig')
        .DataSetAdapter(tblCategory)
        .Accept('Aplication/json')
        .Get;

aRes.Content value is :
[{"id":11,"pid":0,"categoryname":"\u011F\u00FC\u011E\u00DC\u0131I\u015Fi\u015E\u0130\u00F6\u00E7\u00D6\u00C7"}]

but frmData.tblCategory.FieldByName('CategoryName').AsWideString or frmData.tblCategory.FieldByName('CategoryName').AString show this '?ü?U?I?i???ç?C'

tblCategory is TFDMemTable

Consumir API de conciliação da Stone

Olá, estou consumindo a API de conciliação da Stone mas um dos endpoints, usando Get, sempre me retorna o mesmo erro: Authentication information is not given in the correct format. Check the value of Authorization header. Segue o código utilizado:

  LResponse := TRequest.New.BaseURL('https://conciliation.stone.com.br/v1/merchant/{affiliationCode}/conciliation-file/{referenceDate}')
    .Accept('application/xml')
    .TokenBearer('99c999ad-bf99-9999-b999-d99a999af999')
    .AddHeader('X-Authorization-Raw-Data', '9999E99ECF999999BDA99C99DDD9999F', [])
    .AddHeader('X-Authorization-Encrypted-Data', '099cf99ca9999cad9999f99b999f9dc9c999999ce99dcfc99999999b999999b9b9999999999c99f999999ded9999e999999999ebf999ab9c39999999ea9cf299', [])
    .AddParam('affiliationCode', '999999999', pkURLSEGMENT)
    .AddParam('referenceDate', '20230322', pkURLSEGMENT)
    .Get;

O problema é que, num outro endpoint também usando Get, passo os mesmos parâmetros acima no Header e a requisição retorna a resposta com exito.

O que pode estar acontecendo?

Transferring a file via API to a website

using your component
I'm trying to upload a file to the site using the API
Gives an error on POST
Don't tell me what I'm doing wrong

var
LResponse : IResponse;
X : ISuperObject;
FStream : TMemoryStream;
FileName : string;
begin
FileName:='D:\test.xml ';
FStream:=TMemoryStream.Create;
FStream.LoadFile(FileName);
LResponse:=TRequest.New.BaseURL(sURL)
.Accept('application/json')
.ContentType('multipart/form-data')
.AddHeader('Authorization',sToken)
// .AddParam('file',FileName, TRESTRequestParameterKind.pkFILE)
.AddFile('file',FStream)
.Post;
X:=SO(LResponse.Content);


{
"request_content_length": 2093,
"request_post_start": "",
"request_method": "POST",
"exception": "boundary missed for Content-Type: multipart/form-data",
"request_read_bytes_start": "b'---------Embt-Boundary--2A48963E66D72938\r\nContent-Disposition: form-data; name="file"; filename="file"\r\nContent-Type: application/octet-stream\r",
"details": "Помилка з параметром boundary у запиті",
"reason": "Невірно введені дані",
"request_content_type": "multipart/form-data",
"request_stream_cursor": "2093",
"request_post_end": "",
"can_read_body": true,
"code": 1001,
"request_stream_buffer": "deque([])",
"request_read_bytes_end": " 60\xd0\xb3 \xd1\x8524\r\n\r\n\r\n\r\n\r\n\r\n---------Embt-Boundary--2A48963E66D72938--\r\n'",
"request_stream_size": "0"
}

Problemas na Instalação

Olá eu já tenho instalado no meu path o dmvcframework, mesmo assim preciso colocar na pasta dependências ?
mesmo colocando estou tendo esse erro:
[dcc32 Error] REST4D.pas(71): E2003 Undeclared identifier: 'IMVCAuthenticationHandler'
[dcc32 Error] REST4D.pas(89): E2086 Type 'IRESTSecurity' is not yet completely defined
[dcc32 Fatal Error] REST4D.Client.pas(6): F2063 Could not compile used unit 'REST4D.pas'

Identifier idents no member "DisposeOf"

Olá,

grato pelo ótimo trabalho.

Estou tentando utilizar o RESTRequest4D com o Lazarus 2.2.0 e FPC 3.2.2 e estou com um problema na compilação do mesmo:
RESTRequest4D.Request.Indy.pas(112,18) Error: identifier idents no member "DisposeOf"
Linhas 132, 394, 419 e 436 também apresentam o mesmo problema.

Creio que seja por conta da linha:
{$IFDEF MSWINDOWS OR FPC}
Quando usado o $IFDEF o compilador ignora tudo depois da primeira condicional verificada, nesse caso ele não testa a condicional FPC. (fonte: https://wiki.freepascal.org/Conditional_compilation - tem um bloco de warning bem no meio dessa página explicando esse comportamento do $IFDEF)

Como alternativa tenho substituído essas linhas por
{$IF DEFINED(MSWINDOWS) OR DEFINED(FPC)}

grato.

Cannot use RESTRequest4D - Unit not found.

Estou com um probleminha pra utilizar a lib, Acho que é só inexperiência minha com Delphi e packages mesmo 😣.
Acredito que essa questão seria mais conveniente nas issues do Boss, contudo, como se trata dessa lib, decidi perguntar aqui.

Possuo um projeto com um groupproj que possui vários packages, e preciso usar o RESTRequest4D apenas em um package específico pois farei uma interação com uma api somente nesse package.
Quando eu instalo a lib com o boss, os diretórios de busca são inseridos no executável principal do sistema. Daí eu copio os caminhos e ponho no 'search path' do meu package '.bpl'. Mas quando faço a use do RESTRequest4D em uma das units desse package não consigo compilar o package.
Alguém pode me ajudar? Grato!

Parametros dinamicos

Grande Vini !
Existe uma possibilidade de passar paramentos dinâmicos ?
Algo do tipo :

var
  LResponse: IResponse;
begin
  LResponse := TRequest.New.BaseURL('http://localhost:8888/users')
     if A.Text <> EmptyStr then
    .AddParam('A', A.Text)
     if B.Text <> EmptyStr then
    .AddParam('B', B.Text)
     if C.Text <> EmptyStr then
    .AddParam('C', C.Text)
    .Accept('application/json')
    .Get;
  if LResponse.StatusCode = 200 then
    ShowMessage(LResponse.Content);
end;

Os if's foi so pra vc entender a necessidade, rsrsrs.
Valeu Mestre!!

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.