[pyar] Mostrar request post

Alejandro Santos listas en alejolp.com
Mar Oct 18 21:21:06 ART 2011


2011/10/18 Gustavo Campanelli <gedece en gmail.com>:
> 2011/10/18 Alejandro Santos <listas en alejolp.com>
>>
>> 2011/10/18 Gustavo Campanelli <gedece en gmail.com>:
>> >
>> > Dentro del método do_POST veo que hay acceso a los headers y a las
>> > variables
>> > del request a través de la variable query.
>> > La pregunta que tengo para la lista es la siguiente: ¿Hay alguna forma
>> > para
>> > recibir desde Python el request mediante POST y en lugar de procesarlo
>> > tomarlo como un todo y  mostrarlo o bajarlo a archivo?
>> >
>>
>> Para mostrar los headers del pedido POST tal cual llegaron podés usar,
>> dentro de do_POST, "self.headers.headers" [1] para obtener la lista
>> completa de headers, y "self.rfile" [2] si hubo algun dato enviado en
>> el cuerpo del POST.
>>
>> [1] http://docs.python.org/library/rfc822.html#message-objects
>> [2]
>> http://docs.python.org/library/basehttpserver.html#BaseHTTPServer.BaseHTTPRequestHandler.rfile
>>
>> --
>> Alejandro Santos
>
> Gracias, eso sirve en parte, aunque ya lo había hecho.
> Lo que necesito es en realidad el texto completo sin adulterar del request
> HTTP para ver si está respetando o no los requerimientos del servicio.
> Tal vez esté necesitando algún otro tipo de servidor para capturar eso.
> Gedece
>

A simple vista no veo nada en la doc ni en el codigo. No hay ningun
lugar donde quede todo el RAW del request.

Lo que podés hacer es redefinir setup() de StreamRequestHandler [1] y
reemplazar rfile por algun wrapper que se quede con una copia de los
datos de las llamadas a read().

Es medio feito, pero no se me ocurre otra forma de conseguir lo que buscás.

def setup(self):
    StreamRequestHandler.setup(self)
    self.rfile = FileWrapper(self.rfile)

class FileWrapper:
    def __init__(self, other):
        self._other = other
        self._rawdata = ""

    def read(self, *args, **kwargs)
        data = self._other(*args, **kwargs)
        self._rawdata += data
        return data

[1] http://hg.python.org/cpython/file/2.7/Lib/SocketServer.py

-- 
Alejandro Santos



More information about the pyar mailing list