Jump to content
marcio pereira batista

webserver pegar os parametros que são enviados através da query string json 

Recommended Posts

boa noite amigos, estou iniciando com a parte de webserver e estou com dificuldade para pegar os parametros que são passados por uma catraca, ja consegui fazer toda a configuração da mesma e o webserver que fiz consegue indentificar a requisição dela, meu problema esta para pegar a informação do id_user que vem no json
quando coloco a digital na catraca o meu webserver identifica o evento vindo da mesma na porta 8080:

POST /new_user_identified.fcgi?session=?& HTTP/1.1

ate ae tudo ok,+ eu preciso e da informação que vem junto com o POST da ctraca no meu webserver agora segue oque o fabricante me passou:

O Fluxo de comunicação entre o servidor (web server que escutará as requisições http que o equipamento para enviará, o verbo http é o POST)  que você vai desenvolver e o equipamento é o seguinte:


Primeiro um pouco de teoria para você entender o fluxo do endpoint que você precisará implementar: new_user_identified.fcgi (https://www.controlid.com.br/suporte/api_idaccess_latest.html#50_events)


Usuário identificado

CLIENT -> SERVER

POST /new_user_identified.fcgi?session=gJgOHkblq69Vc3WLOOdUMvrf& HTTP/1.1

Host: 192.168.2.121

Accept: */*

Content-Type: application/x-www-form-urlencoded

Connection: Keep-Alive

Content-Length: 105


event=8&device_id=468507&identifier_id=1651076864&portal_id=1&user_id=1&user_name=Danilo&user_has_image=0

preciso pegar a informação do user_id acima e não sei como ja que oque chega na uri e somente:POST /new_user_identified.fcgi?session=?& HTTP/1.1

Share this post


Link to post
Share on other sites

tentando melhorar minha explicação para ver se consigo ajuda, estou prestes a perder o cliente..

no oncommandget do meu idttpserver tenho o seguinte

Var
contador : integer;
     Cmd           : String;
     Argumentos    : TArguments;
     ServerMethod1 : TServerMethods1;
     JSONStr       : string;
  lJSO : ISuperObject;
  lRequest: TStringStream;
  lResponse: String;
begin
contador:=0;
     Cmd := ARequestInfo.RawHTTPCommand;
     if (UpperCase(Copy (Cmd, 1, 4)) = 'POST')  then Begin
        Argumentos    := TServerUtils.ParseRESTURL (ARequestInfo.URI);
        ServerMethod1 := TServerMethods1.Create (nil);
        Try
           LoglastRequest (ARequestInfo);
           If UpperCase(Copy (Cmd, 1, 4)) = 'POST' Then
           BEGIN
         IF  Copy (Cmd, 1, 25) = ('POST /new_user_identified') then begin

///aqui vou coloca a função de pesquisa//pesquisasocio + para isso preciso saber user_id
  JSONStr := ServerMethod1.CallPOSTServerMethod(Argumentos);
                end;
           END;

           AResponseInfo.ContentText := JSONStr;

           LoglastResponse (AResponseInfo);
           AResponseInfo.WriteContent;
        Finally
           ServerMethod1.Free;
        End;
     end;
end;


com essa rotina acima que adaptei de um site consigo fazer meu server ver oque chega no endpoint "POST /new_user_identified", eu preciso pegar o json que vem junto e nao sei como, vi um topico aqui no forum que diz para fazer o seguinte pra pegar o json:

///////////////capturar o json///OnCommandGet do TidHTTPServer 
Var 
     AJSONInput: string; 
    aRequestStream: TStringStream; 
begin 
       aRequestStream := TStringStream. Create; 
    try 
       aRequestStream.LoadFromStream (ARequestInfo.PostStream); 
       aRequestStream.Position := 0; 
       AJSONInput := aRequestStream.DataString; 
    finally 
       aRequestStream. Free; 
    end;    
end; 

como posso colocar essa rotina pra capturar o json dentro do meu oncommandget ? ja fiz varius testes e nao estou conseguindo, é a primeira vez que trabalho com webserver e estou prestes a perder o cliente, por favor se alguem puder me ajudar.

Share this post


Link to post
Share on other sites

o para constar foi resolvido com a dica do amigo paulofreire do forum devmedia (muito obrigado!) deixo aqui a solução para ajudar a quem precisar do mesmo. 


var 
pID, pUsuario: string; 
st: TStringStream; 


if (ARequestInfo.URI = '/new_user_identified.fcgi?session=gJgOHkblq69Vc3WLOOdUMvrf&') or 
(ARequestInfo.URI = '/new_user_identified.fcgi?session=gJgOHkblq69Vc3WLOOdUMvrf&/') then 
begin 

try 
pID := ARequestInfo.Params.Values['user_id']; 
pUsuario := ARequestInfo.Params.Values['user_name']; 

Edit1.Text := pID; 

if pID = '0' then 
begin 
Label1.Caption := 'Não reconhecido...'; 

end else 
Label1.Caption := pUsuario + ' bem vindo ao Clube.'; 

finally 
lblInfo.Caption := AResponseInfo.ContentText; 
end; 

end; 

abraço

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

  • Similar Content

    • By mayconyury
      Galera, boa noite.
       
      Estou com dificuldades para realizar um insert em uma tabela no oracle. 
       
      Criei duas lists, uma buscando o código das filiais existentes em uma tabela e outro para receber as filiais de acordo com a escolha do usuário. Estou realizando um cadastro de produtos por filial, então ao terminar o cadastro o dialog pergunta se quer atualizar os dados em outra filial. Se marcada a opção SIM, abre a tela para escolher para qual filial o usuário quer copiar ( update ). Mas pode existir situações onde o produto não existe, então queria que realiza-se um insert para essas filiais ao invés do update.
       
      Alguém pode ajudar?
       
    • By JorgeeHenrique
      Bom dia, sou iniciante em Delphi, estou fazendo um Cadastro de Clientes, gostaria de usar três Edit´s para filtrar alguns  dados porem com o código abaixo consegui fazer apenas com 1 edit.text, como faço pra usar três e que se algum estiver em branco ele retorna o valor apenas do Edit.text que foi preenchido?
       
      Exemplo: 
       
      Quero buscar por Nome, Situação e Rota (Cliente a da rota B com situação C) e se algum desses campos estiver vazio ele busca apenas o que foi preenchido. Obrigado pela atenção!
       
      .
      procedure TFrm_Cadastro.Bt_BuscarClick(Sender: TObject); begin with Frm_Cadastro.Tbl_Clientes do begin Close; SQL.Clear; SQL.Add( 'Select * from Tbl_Cad_Clientes'); SQL.Add('where Cli_Nome like :nome'); ParamByName('nome').Value := '%' + txt_buscar_nome.Text + '%'; Open; end; end;  
    • By ricardonews
      Olá pessoal, fiz um formulario de cadastro usando o jquery ,ajax com o json. só que agora eu estou querendo logar  no banco, fiz todo o procedimento normal que se faz para site em php, mas não consegui nada,  eu tenho algumas imagem aqui  vou colocar.
      Queria logar, eu coloquei a index  sem o php porque tentei com php e js mas nao funcionou , alguem pode me ajudar ?
      desde já obrigado.




    • By lhdario
      Boa tarde Senhores, estou com um projeto de inclusão da QR-Code no sistema para um cliente que fica no Rio Grande do Sul através de WEB Service. Estou colocando os web-service disponível no site da SEFAZ-RS, mas está dando erro 403. Preciso que vocês me enviem um WEB-Service e se precisa de algum certificado digital válido. 
       
      Estou tentando com esse:
       
      https://nfce.sefazrs.rs.gov.br/ws/NfeConsulta/NfeConsulta4.asmx

      Encontrei ele por esse site:
       
      http://nfce.encat.org/desenvolvedor/webservices-p/
       
      Desde já agradeço.
      Luis Dario
    • By brenno_32br
      Ola, 

      Estou com seguinte problema, porém no meu nível e difícil.

      seguinte, estou fazendo a baixa e instalação de um drive de um link especifico, no meu caso consigo executar manualmente e pelo cmd usando msiexec, porém quando eu uso no Delphi em procedure não consigo.

      *certifiquei se o arquivo existe.
      *consigo executar e instalar usando o mouse.
      *usando msiexec manualmente o cmd ok
      *o arquivo esta na extensão .msi


      porém quando chamo essa função abaixa consigo entrar na condição, no entanto quando e executado o comando, apresentar a seguinte mensagem

      'Este pacote de instalação não pode ser aberto. verifique se o pacote exite e se você pode acessa-lo ou entre em contato com o o fornecedor do aplicativo para verificar se este é um pacote valido do Windows Installer.' 

      procedure TFormPrincipal.eInstalaDrive(Nome: string);
      begin
      if Nome = 'safenet-pro72k-x64.msi' then
      begin
      ShowMessage('intalando aqui: '+Nome);
      // WinExec('msiexec /i c:\\soluti\\safenet-pro72k-x64.msi',SW_SHOW);// foi usado essa forma sem exito por aqui
      WinExec('cmd /C msiexec /i c:\\soluti\\SafeNet-Aladin(x64).msi',SW_SHOW);// esse aqui tbm sem exito.
      end
      else
      .
      .
      .
      Alguém consegue me auxiliar nesse caso. obrigado.

×

Important Information

Ao usar o fórum, você concorda com nossos Terms of Use.