Jump to content
marcio pereira batista

configurar web server para escutar as requisições http

Recommended Posts

boa noite meus amigos, meu problema e o seguinte : 
preciso ler a informação que vem de uma catraca controlid, consigo fazer toda a comunicação com a catraca via restjson usando idttp indy, logo, libero acesso e etc, o problema esta quando preciso receber oque vem da catraca sem que eu solicite, ex : o usuario coloca a digital no equipamento e eu preciso que o webserver receba o json que vem da catraca via http, fiz todos os passos abaixo indicado pelo o suporte do fabricante e tudo correu bem e os comandos foram executados sem erro algum, porem quando coloca a digital na catraca o webserver que fiz usando idttpserver nao recebe nada no ip e porta expecifica vindo da catraca e se tento enviar algo pela rede no ip e porta do webserver ele responde perfeitamente, por favor se alguem puder me ajudar a terminar de configurar o webserver, acho q não falta muito e o cliente ja perdeu a paciencia..., segue oque foi feito de acordo com o fabricante : 

O fluxo é o seguinte: 

Realizar o login no equipamento para obter uma sessão; 
lJSO := SO('{"login": "admin", "password": "admin"}'); 
lResponse := IdHTTP1.Post('http://192.168.001.171/login.fcgi', lRequest); 

Criar um novo device que representará o servidor do equipamento. Referências: aqui e aqui (procurar 'devices'). Note que o campo 'public_key' deve ser qualquer texto em base64. Em Linux, pode-se gerar facilmente um através do comando: echo -n chave_secreta | base64 
lJSO := SO('{ object: "devices", values: [{id: 3333, name: "clube_server", ip: "192.168.1.100:8080", public_key:"Y2hhdmVfc2VjcmV0YQ=="}] })}'); 
lResponse := IdHTTP1.Post('http://192.168.001.171/create_objects.fcgi?session='+trim(edit1.text),lRequest); 


Modificar a configuração 'server_id' do objeto 'online_client' para o id do device cadastrado na etapa anterior. Exemplo : 
lJSO := SO('{ online_client: {server_id: "3333" } }'); 
lResponse := IdHTTP1.Post('http://192.168.001.171/set_configuration.fcgi?session='+trim(edit1.text),lRequest); 


Modificar a configuração 'online' do objeto 'general' para 1 
lJSO := SO('{ general: {online: "1"} }'); 
lResponse := IdHTTP1.Post('http://192.168.001.171/set_configuration.fcgi?session='+trim(edit1.text),lRequest); 

Habilita a identificação Local: 
lJSO := SO('{ general: {"local_identification": "1"} })}'); 

lResponse := IdHTTP1.Post('http://192.168.001.171/set_configuration.fcgi?session='+trim(edit1.text),lRequest); 

todos os campos são executados sem problema, segue mais explicações do fabricante : 

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 


SERVER -> CLIENT 

HTTP/1.1 200 OK 

Content-Type: application/json; charset=utf-8 

Transfer-Encoding: chunked 

Date: Thu, 18 Feb 2016 16:20:45 GMT 

Server: lighttpd/1.4.35 


{"result":{"event":6,"user_id":1,"user_name":"João","user_image":false,"portal_id":5,"actions":[]}} 



Usuário não 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: 99 


event=3&device_id=468507&identifier_id=1651076864&portal_id=0&user_id=0&user_name=&user_has_image=0 


SERVER -> CLIENT 

HTTP/1.1 200 OK 

Content-Type: application/json; charset=utf-8 

Transfer-Encoding: chunked 

Date: Thu, 18 Feb 2016 16:22:57 GMT 

Server: lighttpd/1.4.35 


{"result":{"event":3}} 


no webser que criei configurei da seguinte forma : 

IdHTTPServer1.Active := false; 
IdHTTPServer1.defaultport:=8080; 
IdHTTPServer1.Active := True; 

no oncommandget coloquei o seguinte : 

if (ARequestInfo.URI = '/api/notification/dao') or (ARequestInfo.URI = '/api/notification/dao') then begin 
showmessage('eu to aqui'); 
end else begin 
showmessage('chequei aqui 2'); 
end; 


não coloquei nenhuma rotina de envio do retorno ainda pois estou tentando ver se esta chegando algo no ip/porta vindo da catraca e nao esta e se tento pela rede chega sem problema. 

desde ja agradeço a quem puder me ajudar

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 RobertoSilva007
      Olá, bom dia à todos!
       
      Estou desenvolvendo uma aplicação em PHP onde necessito que meus clientes possam gerar boletos por meio da mesma.
      O banco escolhido é o SICOOB e ele oferece uma API  própria para integração.
       
      Gostaria de saber se alguém aqui já usou essa API e sabe como trabalhar com ela, pois a documentação que eles disponibilizam é muito vaga.
       
      Não sei se essa pergunta está no tópico correto, caso não, peço desculpas.
      Agradeço desde já.
    • By DinhoPHP
      Olá! Peguei um feela, onde o cliente possui um campo de busca de reservas do Booking. A solicitação era de um menu moderno em tecnologias de estilo, seguindo o layout já desenvolvido por ele, até aí tudo bem. O problema é como fazer com que esses dados do formulários passados via GET, sejam recebidos corretamente pela página de resultados do Booking.com
      Tentei, utilizando mesmo names e ids da busca original, porém, o resultado desejado é satisfatório apenas onde digita o que desejamos buscar.
      <script type="text/javascript"> (function(d, sc, u) { var s = d.createElement(sc), p = d.getElementsByTagName(sc)[0]; s.type = 'text/javascript'; s.async = true; s.src = u + '?v=' + (+new Date()); p.parentNode.insertBefore(s,p); })(document, 'script', '//aff.bstatic.com/static/affiliate_base/js/flexiproduct.js'); </script> <body> <div class="container"> <div class="row bg-primary justify-content-center my-3 text-white"> <form id="b_frm" method="get" action="https://www.booking.com/searchresults.html" enctype="multipart/form-data" class="form-inline my-3" target="_blank"> <div class="col-12 col-sm-12 col-md-6" data-test="true"> <label for="txt-search" class="justify-content-start"><i class="fas fa-search mr-1"></i>Pesquisar</label> <input type="search" id="b_destination" class="form-control w-100" name="ss" id="b_destination" value="Guarujá" title="Ex.: cidade, região, bairro ou hotel específico" placeholder="Ex.: cidade, região, bairro ou hotel, casa, apartamento" role="textbox" aria-haspopup="true"> <input type="hidden" name="dest_id" value="-645946"> <input type="hidden" name="dest_type" value="city"> </div> <div id="checkin_target" class="col-12 col-sm-12 col-md-3"> <label for="txt-date-in" class="justify-content-start">Data de entrada</label> <select class="form-control w-100" name="checkin_monthday" id="b_checkin_day"></select> <select class="form-control w-100" name="checkin_year_month" id="b_checkin_month"></select> </div> <div id="checkout_target" class="col-12 col-sm-12 col-md-3"> <label for="txt-date-out" class="justify-content-start">Data de saí­da</label> <select class="form-control w-100" name="checkout_monthday" id="b_checkout_day"></select> <select class="form-control w-100" name="checkin_year_month" id="b_checkout_month"></select> </div> <div class="col-12 d-inline-flex justify-content-end mt-3"> <label for="checkReserv"> <input type="checkbox" class="form-check-inline" name="checkReserv" id="checkReserve"> Reserve agora, pague depois </label> </div> <div class="col-12 d-inline-flex justify-content-end mt-3"> <button type="submit" tabindex="0" class="btn btn-danger form-control" value="search">Pesquisar</button> </div> <input type="hidden" name="error_url" value="/?aid=1704408;"> <input type="hidden" name="si" value="ai,co,ci,re,di"> <input type="hidden" name="label" value=""> <input type="hidden" name="lang" value="pt-br"> <input type="hidden" name="aid" value="1704408"> <input type="hidden" name="sp_plprd" value="UmFuZG9tSVYkc2RlIyh9YVXcKaaJl1Cl8VOf4QzoGuIOLLs5aG2FZ2ZavnPQr-nKVGXKwhi-SxV27wZ5e4ad8ZB_vNL0FpUBWR1nsdbY6J6ZBGBM6rnqKJd1-J9bY_Ur"> <input type="hidden" name="utm_campaign" value="nsb"> <input type="hidden" name="utm_medium" value="sp"> <input type="hidden" name="utm_source" value="FP_Searchbox"> <input type="hidden" name="utm_term" value="1704408"> </form> </div> </div> <!-- Optional JavaScript --> <!-- jQuery first, then Popper.js, then Bootstrap JS --> <script src="https://code.jquery.com/jquery-3.3.1.slim.min.js" integrity="sha384-q8i/X+965DzO0rT7abK41JStQIAqVgRVzpbzo5smXKp4YfRvH+8abtTE1Pi6jizo" crossorigin="anonymous"></script> <script src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.14.7/umd/popper.min.js" integrity="sha384-UO2eT0CpHqdSJQ6hJty5KVphtPhzWj9WO1clHTMGa3JDZwrnQq4sF86dIHNDz0W1" crossorigin="anonymous"></script> <script src="https://stackpath.bootstrapcdn.com/bootstrap/4.3.1/js/bootstrap.min.js" integrity="sha384-JjSmVgyd0p3pXB1rRibZUAYoIIy6OrQ6VrjIEaFf/nJGzIxFDsf4x0xIM+B07jRM" crossorigin="anonymous"></script> <script src="https://s.bookcdn.com/js/translations/translation_31.26.js"></script> <script src="https://s.bookcdn.com/build/booked/booked_bundle.74f2565a43a50d618c66d31c0adba095.js"></script> <!-- <ins class="bookingaff" data-aid="1704408" data-target_aid="1704408" data-prod="nsb" data-width="100%" data-height="auto" data-lang="xb" data-currency="BRL" data-dest_id="-645946" data-dest_type="city"> Anything inside will go away once widget is loaded. <a href="//www.booking.com?aid=1704408">Booking.com</a> </ins>--> </body>  
       
       
    • By MateusG
      Bom dia,
       
      Tenho um problema, quando quero colocar o foco para uma coluna especifica pelo nome do campo no banco, nao da certo
      porem se eu fizer colocando o numero da ordem da coluna, exemplo coluna 4, ai da certo, mas queria pelo nome do campo
       
      Eu desejava dessa forma, porem assim ele nao da o foco.
      if condicao then grdAjuste.SetFocus('id_codigo'); Agora se eu fizer assim...
      if condicao then grdAjuste.SetFocus(4); assim da, porem dessa forma eu acho errado...
       
      se alguem puder me ajudar...
      Obrigado.
    • By luannsr12
      Olá pessoas, estou   utilizando o Google Charts, e me venho a necessidade de usar imagem nos gráficos.
      Alguém já usou, e sabe como fazer?
    • By leo.silvagomes
      Boa noite!
      Tenho um programa que importa determinado arquivo CSV para um banco SQL afim de depois comparar os dados entre versões diferentes do mesmo arquivo, por exemplo uma versão do arquivo é do dia 01/09 e outra do dia 15/09, a finalidade do arquivo é comparar o que mudou
      Uso uma procedure para importar os dados do arquivo para um objeto JvMemoryData e outra para alimentar uma ADOProc que faz o insert no SQL com os dados desse JvMD
       
      Ocorre que o arquivo tem um padrão de 38 colunas e algo prox de 1 milhão de linhas! Como o cliente não usa toda a informação na planilha fiz uma opção de importação rápida que faz o input somente das colunas utilizadas, mas mesmo assim o processo de leitura e importação do arquivo demora até 50 min
       
      Como posso deixar isso mais rápido? 
×

Important Information

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