Processamento fragmentada solicitações HTTP POST codificados em python (ou CGI genérica sob Apache)

votos
5

Eu tenho um cliente J2ME que iria publicar alguns dados codificados fragmentada para um servidor web. Eu gostaria de processar os dados em python. O script está sendo executado como um CGI um, mas, aparentemente, o Apache irá recusar um pedido de pós codificado em partes para um script CGI. Tanto quanto eu podia ver mod_python, WSGI e FastCGI não são ir também.

Eu gostaria de saber se existe uma maneira de ter um processo de script python este tipo de entrada. Estou aberto a qualquer sugestão (por exemplo, um confoguration pondo em apache2 que reunir os pedaços, um servidor de python autônomo que faria o mesmo, etc.) Eu fiz um pouco de googling e não encontrou nada utilizável, que é muito estranho.

Eu sei que o recurso ao Java no lado do servidor seria uma solução, mas eu simplesmente não posso imaginar que isso não pode ser resolvido com apache + python.

Publicado 12/11/2008 em 18:50
fonte usuário
Em outras línguas...                            


5 respostas

votos
6

Eu tinha exatamente o mesmo problema há um ano com um cliente J2ME conversando com um backend Python / Ruby. A única solução que eu encontrei que não requerem mudanças de aplicação ou nível de infra-estrutura era usar um recurso relativamente desconhecido de mod_proxy.

Mod_proxy tem a capacidade de tampão de entrada (em partes) as solicitações, e, em seguida, reescrever-los como uma única solicitação com um cabeçalho de comprimento de conteúdo antes de os transferir para uma infra-estrutura de proxy. O truque é que você pode criar uma configuração de proxy minúscula que passa o pedido de volta para o mesmo servidor Apache. ou seja, tomar um pedido em partes de entrada na porta 80, "dechunk", e então passá-lo para o seu HTTP não-servidor compatível com 1.1 na porta 81.

Eu usei essa configuração na produção para um pouco mais de um ano sem problemas. Parece um pouco algo como isto:

ProxyRequests Off

<Proxy http://example.com:81>
  Order deny,allow
  Allow from all
</Proxy>

<VirtualHost *:80>
  SetEnv proxy-sendcl 1
  ProxyPass / http://example.com:81/
  ProxyPassReverse / http://example.com:81/
  ProxyPreserveHost On
  ProxyVia Full

  <Directory proxy:*>
    Order deny,allow
    Allow from all
  </Directory>

</VirtualHost>

Listen 81

<VirtualHost *:81>
  ServerName example.com
  # Your Python application configuration goes here
</VirtualHost>

Eu também tenho um writeup completa do problema e minha solução detalhada no meu blog .

Respondeu 27/07/2009 em 12:51
fonte usuário

votos
2

Você não pode fazer o que quiser com mod_python. Você pode fazê-lo com mod_wsgi se você estiver usando a versão 3.0. É, contudo, tem que pisar fora da especificação WSGI 1.0 como WSGI efetivamente proíbe conteúdo pedido em partes.

Procurar WSGIChunkedRequest em http://code.google.com/p/modwsgi/wiki/ChangesInVersion0300 para o que é necessário.

Respondeu 29/07/2009 em 01:13
fonte usuário

votos
2

Apache 2.2 mod_cgi funciona bem para mim, Apache transparente unchunks o pedido, uma vez que é passado para a aplicação CGI.

WSGI atualmente não permite solicitações fragmentada, e mod_wsgi, de fato, bloqueá-los com uma resposta 411. É na prancheta para WSGI 2.0. Mas parabéns por encontrar algo que faz pedidos do pedaço, eu nunca vi antes!

Respondeu 12/11/2008 em 19:32
fonte usuário

votos
2

Eu diria que usar a estrutura de torcida para a construção de seu ouvinte http. suportes torcidos fragmentada codificação.

http://python.net/crew/mwh/apidocs/twisted.web.http._ChunkedTransferEncoding.html

Espero que isto ajude.

Respondeu 12/11/2008 em 18:56
fonte usuário

votos
1

Talvez seja um problema de configuração? Django pode ser fachada com Apache por mod_python, WSGI e FastCGI e pode aceitar o upload de arquivos.

Respondeu 12/11/2008 em 19:29
fonte usuário

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more