NCLua HTTP 0.9.9

Liberada nova versão do NCLua HTTP. Os novos recursos são listados a seguir. Para baixar o módulo acesse http://github.com/manoelcampos/NCLuaHTTP

Veja exemplo de uso da nova versão do módulo. As aplicações utilizando versões anteriores devem ser adaptadas para este novo modelo.

package.path = package.path .. ';lib/?.lua'
require "http"

function callback(header, body)
  if body then
     print("\n\n\n", body, "\n\n\n")
  end
end

http.request("http://manoelcampos.com/arquivos/pagina.html", callback)

Observe que, como os arquivos do módulo não estão mais no diretório juntamente com as aplicações, tendo sido movidos para o diretório lib, é necessário adicionar tal diretório no path do interpretador Lua, usando a instrução apresentada na linha 1.

Não é mais preciso usar o módulo util. O mesmo ainda está disponível e é usado internamente pelo NCLua HTTP.

As funções do módulo, como a função request, têm um novo parâmetro chamado callback. Este parâmetro deve receber o nome de uma função, definida na sua aplicação. Tal função deve ter dois parâmetros: header e body, que representam o cabeçalho da resposta HTTP e o corpo da mesma, respectivamente. A função será chamada automaticamente pelo módulo quando a resposta da requisição for obtida. Os parâmetros header e body serão passados a ela automaticamente. A ordem dos outros parâmetros pode ter mudado. Assim, verifique a ordem dos seus parâmetros nos programas usando versões antigas do NCLua HTTP e a ordem atual dos parâmetros.

Read more...

Liberado #NCLuaSOAP 0.5.6.6

Liberada mais uma versão do NCLua SOAP, a 0.5.6.6. Esta versão inclui apenas um novo recurso que permite informar o número da porta do serviço web que deseja-se acessar (caso seja uma porta diferente da 80), diretamente na URL do serviço.

Nas versões anteriores, caso os usuários precisassem usar uma porta diferente da 80, era necessário especificar o número da mesma no parâmetro port do método call do módulo ncluasoap. Alguns usuários tiveram dificuldades em consumir serviços que não utilizam a porta 80 justamente por informarem o número da porta dentro da URL do serviço. Tal restrição ocorria devido à classe TCP do NCLua requerer que a porta seja informada em um parâmetro separado. Como o NCLua SOAP possui o módulo http (também desenvolvido por mim e que facilita bastante a realização de requisições usando o protocolo de mesmo nome), isto foi resolvido diretamente neste módulo e o NCLua SOAP passou a utilizar esta nova funcionalidade.

O parâmetro port do método call do módulo ncluasoap ainda existe, para que os programas antigos que o usam não precisem ser alterados, mas vou avaliar a possibilidade de excluir definitivamente tal parâmetro. Assim, recomendo que passem a utilizar o número da porta diretamente na URL do serviço.

Exemplo de chamada para um serviço na porta 8080, usando as versões anteriores do módulo:

local msgTable = {
  address = "http://myserver.com/MyWebService",
  namespace = "MyNamespace",
  operationName = "calc",
  params = {
    a = 10, b = 20
  }
}

--A porta 8080 é passada como parâmetro para o método call
ncluasoap.call(msgTable, getResponse, "1.1", 8080)

Mesmo exemplo usando a nova versão do módulo:

local msgTable = {
  --A porta 8080 é passada diretamente na URL do Web Service
  address = "http://myserver.com:8080/MyWebService",
  namespace = "MyNamespace",
  operationName = "calc",
  params = {
    a = 10, b = 20
  }
}

ncluasoap.call(msgTable, getResponse, "1.1")

Para baixar esta nova versão, acesse http://github.com/manoelcampos/NCLuaSOAP

Read more...

Liberado #NCLuaSOAP 0.5.6.5: Suporte a Autenticação HTTP

Mais uma versão do NCLua SOAP liberada. Nela foi incluído suporte ao consumo de Web Services que requerem autenticação HTTP (Basic Authentication), solicitando um usuário e senha para acessar o serviço. Tal recurso já estava implementado no módulo HTTP (implementado por mim, utilizando o módulo TCP disponível em http://www.lua.inf.puc-rio.br/~francisco/nclua/tutorial/exemplo_06.html) e foi apenas utilizado pelo NCLua SOAP. O exemplo9httpauth foi incluído, que acessa o Web Service disponível em http://manoelcampos.com/apps/httpauth/server.php, retornando a lista de estados de uma determinada região do país.

Para realizar a autenticação HTTP foram incluídos os parâmetros httpUser e httpPasswd (opcionais) no método call do módulo ncluasoap.

Mais detalhes podem ser vistos na documentação do módulo, no diretório doc. Ao acessar o Web Service citado (como pode ser visto fazendo o acesso via Web Browser, em http://manoelcampos.com/apps/httpauth/server.php) será solicitado usuário e senha. Utilize o usuário visitante e a senha visitante. A aplicação de exemplo exemplo9httpauth já passa estes dados para logar no servidor e consumir o serviço web.

Para realizar a autenticação HTTP, foram incluídos os parâmetros (opcionais) httpUser e httpPasswd no método call do módulo ncluasoap. Para mais detalhes, veja a documentação no diretório doc.

Baixe a nova versão em http://github.com/manoelcampos/NCLuaSOAP

Read more...

Executando aplicações gráficas remotamente, por meio de conexão SSH: X11 Forwarding

Profissionais de TI usuários de distribuições Linux, provavelmente utilizam bastante o comando ssh para realizar conexões remotas a outras máquinas Linux.

Convencionalmente utiliza-se o comando da seguinte forma:

ssh usuario-remoto@ip-ou-nome-dns-servidor-remoto

Tal comando abre um shell para o servidor remoto, permitindo a execução de comandos no servidor, via terminal. A partir de uma sessão ssh, pode ser possível a realização de qualquer tarefa que o usuário faria a partir da interface gráfica do servidor (dependendo obviamente das permissões e conhecimento do usuário). Pode-se executar editores de texto como pico e nano, e assim alterar configurações de programas, editando os famosos arquivos .conf. Pode-se navegar na internet usando browsers textuais como o links, baixar arquivos com wget, instalar e remover programas com apt-get, dentre outras possibilidades.

No entanto, algumas vezes podemos precisar acessar uma aplicação gráfica existente no servidor e poder operá-la remotamente, semelhante ao que ocorre no uso de programas como o VNC (para Windows e Linux) ou o Terminal Server Client (para acessar máquinas Windows a partir do Linux).

Como exemplo, você poderia desejar conectar via SSH em um servidor Linux, e abrir o Firefox para navegar na internet e encontrar algum arquivo para baixar, o que é bem mais fácil de ser feito do que usando um browser textual como  o links. Se o arquivo fosse baixado na máquina local, depois o mesmo ainda precisaria ser transferido para o servidor, o que, dependendo do tamanho do arquivo e da conexão entre sua máquina e o servidor, pode levar ainda bastante tempo.

Pois bem, o aplicativo SSH para Linux (OpenSSH SSH client) permite isso, apenas utilizando-se o parâmetro -X (maiúsculo). Logo, o comando anteriormente mostrado ficaria como abaixo:

ssh -X usuario-remoto@ip-ou-nome-dns-servidor-remoto

Com isto, é aberto um shell textual para a máquina remota. No entanto, se você executar alguma aplicação gráfica, como o Firefox (apenas digitando firefox), a mesma abrirá na interface gráfica da sua máquina local. Tal recurso é denominado X11 Forwarding. Isto permite que você opere a aplicação gráfica remota, como se fosse uma aplicação local.

Como estamos em um shell textual, por padrão, não conseguimos trabalhar com várias aplicações simultaneamente, não tendo o recurso de multi-tarefa (a menos que abramos várias sessões de shell). Assim, se executarmos um aplicativo qualquer (gráfico ou não), não conseguiremos digitar outros comandos no terminal enquanto não fecharmos o aplicativo. Como desejamos abrir um aplicativo gráfico, que não operaremos por meio do terminal, podemos utilizar um & após o nome do aplicativo, para que o terminal seja liberado para digitação de outros comandos. Assim, para executar o Firefox, digite o comando abaixo:

firefox &

Isto fará com que a aplicação seja executada, liberando o terminal para que outros comandos possam ser digitados.

Bem, mas o mérito disso não é meu, é do professor Cláudio de Castro Monteiro, colega do IFTO, que descobriu tal fantástico parâmetro -X, no manual do comando ssh.

man ssh

Veja o artigo "Bê-á-bá do SSH, parte 6: X remoto" no site da IBM.

That's all folks!

Read more...

Acessando #WebServices #PHP com #NCLuaSOAP

Desde a versão 0.5.5 do NCLua SOAP, foi incluído suporte para que os parâmetros sejam gerados, no XML, na mesma ordem em que foram definidos na tabela Lua, resolvendo problema encontrado com Web Services PHP desenvolvidos com a biblioteca nuSOAP.

Neste artigo mostrarei como fazer acesso a tais Web Services, a partir de aplicações de TV Digital, desenvolvidas em NCL/Lua, utilizando o módulo NCLua SOAP.

Iniciando

O acesso a WebServices em PHP com NCLua SOAP pode ter uma pequena particularidade. Tais WS, desenvolvidos com a biblioteca nuSOAP, desconsideram o nome dos parâmetros de entrada (isto pode depender da versão da biblioteca), considerando apenas a ordem em que foram passados.

Como a requisição XML a ser enviada ao Web Service é gerada a partir de uma tabela Lua, que é percorrida com o comando pairs de Lua, tal comando acessa os elementos em ordem arbitrária (Programming in Lua, 2nd ed). Isto pode fazer com que os parâmetros sejam passados em ordem incorreta ao Web Service. Assim, para resolver esse problema com WS PHP, pode-se incluir cada parâmetro de entrada na tabela Lua, dentro de uma sub-tabela anônima, como no exemplo abaixo:

params = {
  {ordem = "estado"},
  {regiao = "sudeste"}
}

Observe que o parâmetro ordem está definido dentro de uma sub-tabela sem nome, assim como o parâmetro regiao. Desta forma, a tabela params funciona como um vetor (array). Isto garante que os parâmetros sejam acessados, para geração do XML, na mesma ordem em que foram definidos, resolvendo o problema dos WS em PHP com nuSOAP. O uso das sub-tabelas anônimas resolve o problema pois, quando tais sub-tabelas não possuem um nome (string), um índice (numérico) é automaticamente atribuído a cada uma delas, seguindo a ordem em que foram definidas. Isto faz com que, quando acessadas, seja seguida a ordem dos índices numéricos.

O exemplo 6, disponível no arquivo para download do NCLua SOAP, contém os fontes completos de uma aplicação que acessa um WS em PHP feito com nuSOAP, que retorna a lista de estados de uma determinada região do país, separados por \n, exibindo isto no terminal. Se os parâmetros não forem declarados como mostrado aqui, eles podem ser passados na ordem errada para o WS.

Como o primeiro parâmetro (de nome ordem) deve conter o nome da coluna da tabela no banco de dados, pela qual deseja-se ordenar o resultado, se os parâmetros forem invertidos, isto vai causar erro na execução da instrução SQL no WS, retornando uma mensagem de erro. Assim, para garantir, deve-se usar a abordagem apresentada no código anterior.

Outra abordagem para acesso a um WS PHP, feito com nuSOAP, é definir os próprios parâmetros anonimamente, como abaixo. Somente a ordem é que importa, os nomes dos parâmetros não.

params = {"estado", "sudeste"}

Esta forma é mais simples e a ordem dos parâmetros é obedecida ao gerar o XML, no entanto, perde-se a identificação do nome dos parâmetros, tornando menos legível o código fonte.

Tutoriais

Criando um Web Service PHP com NuSoap e acessando-o com NCLua Soap - por Johnny Moreira Gomes

Se você tiver exemplos, compartilhe conosco. Entre em contato aqui.

Download

Para download do NCLua SOAP, acesse http://github.com/manoelcampos/NCLuaSOAP.

Read more...