Retornando o status HTTP 204 para GET / generate_204 usando uhttpd?

2

Para lidar com a detecção do portal cativo do Android para minha configuração específica, preciso retornar um código de status HTTP 204 sempre que obtiver uma solicitação GET para /generate_204 . Eu atualmente uso o uhttpd como meu servidor, então estou pensando se isso é possível fazer com este servidor.

Meu entendimento atual: Eu preciso escrever um script CGI (ou PHP ou Lua) que retorne algo como Status: 204 No Result

A questão que tenho é como eu posso configurar o uhttpd para encaminhar pedidos para /generate_204 para CGI ou PHP ou Lua, já que nenhum deles possui um prefixo nem uma extensão de arquivo que eu possa corresponder para esse propósito.

    
por Markus A. 21.08.2016 / 09:21

1 resposta

2

Infelizmente, a idéia bastante inteligente do HBruijn de simplesmente tornar /generate_204 um diretório em vez de um arquivo e usá-lo como cgi_prefix com um arquivo index.cgi dentro dele como index_page , funciona apenas parcialmente. Quando abro /generate_204 do navegador, ele faz exatamente o que eu queria, mas somente depois de retornar um redirecionamento para /generate_204/ , que a detecção do portal cativo do Android explicitamente ignora. Então, infelizmente essa solução não resolve meu problema.

Aqui está o trabalho de hack que eu criei que parece funcionar:

Simplesmente não use um arquivo /generate_204 e crie um script CGI em cgi-bin que lida com todas as solicitações incorretas assim:

#!/bin/sh
if [ "$REQUEST_URI" == "/generate_204" ]; then
    echo "Status: 204 No Content"
    echo ""
    exit
fi

echo "Status: 404 Not Found"
echo "Content-Type: text/html"
echo ""
cat /path/to/my/error404.html

Em seguida, basta adicionar o seguinte a /etc/config/uhttpd :

option error_page  /cgi-bin/error.cgi
option cgi_prefix  /cgi-bin
list   interpreter ".cgi=/bin/ash"

(ajustando os nomes dos arquivos e pastas conforme necessário)

Esta definitivamente não é a solução mais limpa, e caso haja uma maneira de evitar o redirecionamento e fazer a ideia do @ HBruijn funcionar, deixarei a questão em aberto por enquanto, já que eu preferiria muito mais isso.

    
por 22.08.2016 / 03:46