Ir para conteúdo

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

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

Compartilhar este post


Link para o post
Compartilhar em outros sites

  • Conteúdo Similar

    • Por Daniel Jose Sobrinho
      Olá, eu tenho um memo em Delphi com as seguintes linhas
       
      CALDO DE GALINHA
      LEMON PEPPER
       
      Preciso que fique com 10 ponto e virgula, já contando os que vão estar no espaço em branco assim:
       
      CALDO;DE;GALINHA;;;;;;;;
      LEMON;PEPPER;;;;;;;;;
       
      Pra substituir os espaços em branco já usei o stringreplace e funcionou corretamente:
       
      memo1.text := StringReplace(memo1.text,',',';',[rfReplaceAll]);
    • Por Giovanird
      Olá a todos!
      Tenho uma api  Sala de Aula e dentro dela o id de cada aluno. Em outra api, API ALUNO,  tenho os dados de cada aluno:  nome, foto, endereço.
      Estou fazendo o foreach da api Sala de Aula e preciso também retornar os dados de cada aluno.
      Segue o código que não estou conseguindo desenvolver
      $sala = file_get_contents("https://api/sala?id=987"); $sala = json_decode($sala, true); $sala = $sala['data']; foreach ($sala as $resulsala){ $codigoaluno = $resulsala['idaluno']; $alunos = file_get_contents("https://api/alunos?id=$codigoaluno"); $alunos = json_decode($alunos, true); $alunos = $alunos['data']; foreach ($alunos as $resulalunos){ echo $resulalunos['nome']; echo $resulalunos['foto']; echo $resulalunos['rua']; } }  
    • Por Orico Chain
      Oi pessoal,
       
      Preciso de ajuda, estou tentando gerar um TXT com dados de uma API mas não estou conseguindo:
       
      <?php $curl = curl_init(); curl_setopt_array($curl, array( CURLOPT_URL => "https://api.bololex.com/api/prices/TRX-USDT", CURLOPT_RETURNTRANSFER => true, CURLOPT_TIMEOUT => 30, CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1, CURLOPT_CUSTOMREQUEST => "GET", CURLOPT_HTTPHEADER => array( "cache-control: no-cache" ), )); $response = curl_exec($curl); $err = curl_error($curl); curl_close($curl); $response = json_decode($response, true); $value1 = $response['result'] [0] ['ask'] ['priceChange']; if (empty($value1)) { $value1 = is_file('/var/www/html/24tstar.txt') ? file_get_c> } else { $value1 = round($value1, 6); file_put_contents('/var/www/html/24tstar.txt', $value1); Preciso que o TXT grave duas informações: ASK e PRICECHANGE uma em baixo da outra
       
      estou errando alguem lugar, alguém poderia me ajudar?
    • Por Kelven
      Bom dia pessoal tudo bem?
      Então, estou trabalhando em um site em php e preciso usar a api do facebook para obter o feed do instagram, porém a chave token é um conteúdo muito sensível, então decidi fazer em php para ela não ficar disponível do lado do cliente. Alguém sabe me dizer se é possível fazer isso? Porque eu pesquisando no google só achei maneiras de fazer em javascript.
    • Por jjunior100
      Preciso armazenar o total das páginas de um determinado documento em uma variável no delphi. Sei como inserir a informação no modelo MSWord.Selection.Fields.Add( Range:=MSWord.Selection.Range, Type:=wdFieldEmpty, Text:= 'NUMPAGES * Arabic ', PreserveFormatting:=True);
      mas como armazenar essa informação em uma variável tipo integer? Obrigado
×

Informação importante

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