<div dir="ltr"><br><br><div class="gmail_quote"><div dir="ltr">El mié., 14 sept. 2016 a las 19:07, Juan M. Puertas (<<a href="mailto:soft.sirius@gmail.com">soft.sirius@gmail.com</a>>) escribió:<br></div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir="ltr"><div style="font-family:verdana,sans-serif" class="gmail_default">Hola amigos.<br></div><div style="font-family:verdana,sans-serif" class="gmail_default">Ya que ahora no se pueden hacer CGIs en Python como vimos en temas anteriores. Por lo que he leído aquí: <a href="http://unaaldia.hispasec.com/2016/07/colega-donde-esta-mi-proxy.html" target="_blank">http://unaaldia.hispasec.com/2016/07/colega-donde-esta-mi-proxy.html</a> esto no afecta a fastcgi.<br></div><div style="font-family:verdana,sans-serif" class="gmail_default">Pero no encuentro documentación sobre cómo hacer las cosas con fastcgi, por ejemplo me gustaría saber cual es el equivalente para recibir argumentos enviados desde HTML. En CGI es así:<br><pre><span>form</span> <span>=</span> <span>cgi</span><span>.</span><span>FieldStorage</span><span>()<br></span></pre><pre><span>¿Cómo se hace con fastcgi?<br>Gracias :-)<br></span></pre></div></div></blockquote><div><br></div><div>Lo recomendable sería usar WSGI para desacoplar la aplicación web de la infraestructura que vaya a dar el servicio. Con WSGI puedes usar fastcgi entre otras alternativas. El interface WSGI se implementa como un "callable" con dos argumentos: un diccionario similar al usado en CGI y un callback (reponse) para las cabeceras de respuesta. Como retorno, se devuelve un iterable que genera el "body" de la página.<br><br></div><div>Así de corrido, podría ser similar a ésto:<br></div><div><pre class="inbox-inbox-lang-py inbox-inbox-prettyprint inbox-inbox-prettyprinted"><code><span class="inbox-inbox-kwd">import</span><span class="inbox-inbox-pln"> cgi</span><span class="inbox-inbox-pln">
</span><span class="inbox-inbox-kwd">def</span><span class="inbox-inbox-pln"> app</span><span class="inbox-inbox-pun">(</span><span class="inbox-inbox-pln">environ</span><span class="inbox-inbox-pun">,</span><span class="inbox-inbox-pln"> start_response</span><span class="inbox-inbox-pun">):</span><span class="inbox-inbox-pln">
</span><span class="inbox-inbox-pln"></span><span class="inbox-inbox-pln"> form </span><span class="inbox-inbox-pun">=</span><span class="inbox-inbox-pln"> cgi</span><span class="inbox-inbox-pun">.</span><span class="inbox-inbox-typ">FieldStorage</span><span class="inbox-inbox-pun">(</span><span class="inbox-inbox-pln">fp</span><span class="inbox-inbox-pun">=</span><span class="inbox-inbox-pln">environ</span><span class="inbox-inbox-pun">[</span><span class="inbox-inbox-str">'wsgi.input'</span><span class="inbox-inbox-pun">], </span><span class="inbox-inbox-pln">environ</span><span class="inbox-inbox-pun">=</span><span class="inbox-inbox-pln">environ</span><span class="inbox-inbox-pun">)<br></span></code></pre><pre class="inbox-inbox-lang-py inbox-inbox-prettyprint inbox-inbox-prettyprinted"><code><span class="inbox-inbox-pun"> response_body = [' ... ']<br> ....<br><code><span class="inbox-inbox-inbox-inbox-pln"> <br><span class="inbox-inbox-n"> response_headers</span> <span class="inbox-inbox-o">=</span> <span class="inbox-inbox-p">[</span>
<span class="inbox-inbox-p">(</span><span class="inbox-inbox-s">'Content-Type'</span><span class="inbox-inbox-p">,</span> <span class="inbox-inbox-s">'text/plain'</span><span class="inbox-inbox-p">),</span>
<span class="inbox-inbox-p">(</span><span class="inbox-inbox-s">'Content-Length'</span><span class="inbox-inbox-p">,</span> <span class="inbox-inbox-nb">str</span><span class="inbox-inbox-p">(</span><span class="inbox-inbox-nb">len</span><span class="inbox-inbox-p">(</span><span class="inbox-inbox-n">response_body</span><span class="inbox-inbox-p">)))</span>
<span class="inbox-inbox-p">]</span>
start_response</span><span class="inbox-inbox-inbox-inbox-pun">(</span><span class="inbox-inbox-inbox-inbox-str">'200 OK'</span><span class="inbox-inbox-inbox-inbox-pun">, response_headers</span><span class="inbox-inbox-inbox-inbox-pun">)<br> for line in response_body:<br></span></code></span></code></pre><pre class="inbox-inbox-lang-py inbox-inbox-prettyprint inbox-inbox-prettyprinted"><code><span class="inbox-inbox-pun"><code><span class="inbox-inbox-inbox-inbox-pun"> yield line<br></span></code></span></code></pre><code><span class="inbox-inbox-pun"><code><span class="inbox-inbox-inbox-inbox-pun"></span></code></span><span style="color:rgb(136,19,80)">if</span> __name__ == <span style="color:rgb(118,15,21)">'__main__'</span>:<br>
<span style="color:rgb(136,19,80)">from</span> flup.server.fcgi <span style="color:rgb(136,19,80)">import</span> WSGIServer<br>
WSGIServer(app).run()
</code></div><div><br></div><div>En la documentación oficial tienes un howto con un apartado que te explica cómo ejecutar una aplicación wsgi con fastcgi: <br><a href="https://docs.python.org/3.5/howto/webservers.html#fastcgi-and-scgi">https://docs.python.org/3.5/howto/webservers.html#fastcgi-and-scgi</a><br></div><div><br><br></div></div></div><div dir="ltr">-- <br></div><div data-smartmail="gmail_signature"><div dir="ltr"><span>Hyperreals *R "Quarks, bits y otras criaturas infinitesimales": </span><a href="http://ch3m4.org/blog">http://ch3m4.org/blog</a><br></div></div>