configurar webserver para escutar requisições http
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
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
Marcio Batista
Curtidas 0