manoelcampos / nclua-http

Módulo NCLua que implementa o protocolo HTTP 1.0/1.1 para uso em aplicações interativas do Sistema Brasileiro de TV Digital (SBTVD/ISDB-TB) 📺🔗
https://manoelcampos.com/nclua-http
Other
8 stars 4 forks source link

Problema em requisições #2

Open keitarobr opened 7 years ago

keitarobr commented 7 years ago

Olá,

estou tentar executar um script que ua o NCLuaHTTP, porém ao fazer uma requisição, ele trava após receber a última parte da requisição. A rotina de callback nunca é chamada.

Usei seu exemplo de teste e o resultado é o mesmo.

Estou usando o NCLua e o Ginga, compilados de suas últimas versões, em um Ubuntu.

Alguma idéia do que possa estar acontecendo?

manoelcampos commented 6 years ago

Olá, crie uma função main() e coloque todo o seu código lua dentro de tal função (inclusive os require). Em seguida, no final do arquivo lua inclua o código abaixo:

--Chama a função main em modo protegido, permitindo tratar erros gerados
local ok, res = pcall(main)

if not ok then
   print("\n\nError: "..res, "\n\n")
   return -1
end

Veja se é mostrada alguma mensagem de erro e informe aqui. Mais detalhes sobre uso da função pcall podem ser obtidos aqui.

keitarobr commented 6 years ago

Olá Manoel,

fiz conforme sugerido:

... function main() http.request(host, callbackFirst, 'POST', params) end

--Chama a função main em modo protegido, permitindo tratar erros gerados local ok, res = pcall(main)

if not ok then print("\n\nError: "..res, "\n\n") return -1 end ....

Porém ele nunca "termina" (nclua main.lua), ficando a saída parada até que eu force a finalização (CTRL+C).

Depurando (mensagens), ele fica aguardando o fim da requisição porém não detecta que o servidor já parou de mandar dados.

Alguma idéia?

manoelcampos commented 6 years ago

Você precisa colocar todo o código dentro do main, inclusive os require. Como você está rodando o script? Embutido em um documento NCL e executando o comando abaixo no terminal?

ginga --ncl documento.ncl

Já se certificou que a VM está tendo acesso à Internet? Qual a URL da página que está tentando acessar? Pode usar o comando curl no terminal para fazer uma requisição a tal página de dentro da VM e ver se está tudo OK.

Pode disponibilizar o código para eu verificar?

JulienLeal commented 6 years ago

Eu estou tendo o mesmo problema com o load balancer. Quando é load balance, ele não envia a requisição, por isso nunca chega o callback. Quando é uma máquina normal, ele envia corretamente pro IP.

manoelcampos commented 6 years ago

@JulienLeal o módulo não suporta redirect. Se realmente precisar disso, descreva melhor seu cenário, o que está tentando fazer e verei a possibilidade de implementar esta feature.

LeonardoSanBenitez commented 4 years ago

Olá, Eu estava tendo o mesmo problema, então alterei a linha 170 de: local response = tcp.receive("*a") para local response = tcp.receive() e me parece que resolveu. Dependendo do tamanho do response isso não vai dar certo, mas no meu caso não tive problemas