Ir para conteúdo
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

Compartilhar este post


Link para o post
Compartilhar em outros 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.

Compartilhar este post


Link para o post
Compartilhar em outros 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

Compartilhar este post


Link para o post
Compartilhar em outros sites

Crie uma conta ou entre para comentar

Você precisar ser um membro para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar Agora

  • Conteúdo Similar

    • Por danilofoganholi
      Eu estou tentando receber um JSON via POST deste jeito, mas não esta funcionando. Sou novo em php e estou aprendendo por conta, então, se possível, detalhar mais a resposta, eu agradeço. 
       
      //NOME DO CLIENTE $name = $_POST["name"];   // CPF $cpf_cnpj = $_POST["cpf_cnpj"];   //EMAIL $email = $_POST["email"];   //ID DO CLIENTE HUGGY $chat_id = $_POST["chat_id"];
    • Por sergiosantojacinto
      Olá Pessoal,   Pelo que estive analisando os links abaixo do Site Broadcast.com.br eles tem a opção JSON, não identifiquei nada de RSS ou ATOM. Saberiam me informar se é possível eu ter um link RSS/FEED/ATOM para colocar no programa http://www.rssowl.org, para receber as noticias, este programa RSSOWL faz leitura em RSS/XML. http://www.broadcast.com.br/cadernos/financeiro/ http://www.broadcast.com.br/cadernos/politico/ <link rel="alternate" type="application/json+oembed" href="http://www.broadcast.com.br/wp-json/oembed/1.0/embed?url=http%3A%2F%2Fwww.broadcast.com.br%2Fcadernos%2Fpolitico%2F" /> <link rel="alternate" type="text/xml+oembed" href="http://www.broadcast.com.br/wp-json/oembed/1.0/embed?url=http%3A%2F%2Fwww.broadcast.com.br%2Fcadernos%2Fpolitico%2F&#038;format=xml" /> Muito obrigado.

    • Por fkmello
      Estou estudando Rest e JSON no Delphi e pra isso estou usando a API do Cartola FC pra estudo, porém, tem alguns dados que precisa estar logado para conseguir consumir e eu não estou sabendo pegar o Token e fazer o login na API do Cartola FC (globo.com)... 
       
      Gostaria de uma luz por onde seguir... Provavelmente é burrice minha... KKK, pois é a primeira vez que estou mexendo com isso, então desculpe se falei alguma besteira... Kkk
    • Por Remeling
      Ola pessoal,
      Estou fazendo um sistema web em Delphi xe8 Intraweb, coloco os objetos no form e quando vou compilar o sistema, aparece somente a pagina em branco, o que estou fazendo errado.
    • Por Maykel-ctba
      Eu tenho uma tabela no BD chamada "menu", com uma coluna chamada ESTRUTURA. Ela era do tipo text, e nela contém um JSON com uma estrutura de menus referenciadas por IDs de outra tabela "categoria".
       
      Ex: [{"id": 1}, {"id": 3}, {"id": 4}, {"id": 131}, {"id": 125}, {"id": 5}]  
      Estes IDs acima são categorias cadastradas na tabela "categoria". Porém, para retornar no PHP, tem sido bem custoso para a performance, fazer um loop, dentro desse loop fazer um SELECT * FROM categoria WHERE id = 1, = 2, e por aí vai...
       
      Li que existe um novo tipo de coluna chamada JSON, que poderia referenciar informações na hora da consulta. Corrijam-me se estiver errado.
       
      Mas é possível, por exemplo, fazer uma consulta desta tabela "menu", e nela, retornar as infos de cada ID deste JSON, em uma consulta apenas?
       
      Exemplo do que gostaria (Não sei a sintaxe, não sei onde referenciar a tabela "categoria")
       
      SELECT *, JSON_EXTRACT(menEstrutura, '$.*') as Data FROM sistema_menu WHERE menId = 1

      Resultado:
       
×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.