Dump request/response from within django

9 views
Skip to first unread message

Alessandro Dentella

unread,
Mar 11, 2019, 7:53:45 AM3/11/19
to djan...@googlegroups.com
Ciao,

ho un problema "curioso" (forse "scocciante" è più corretto) di
autenticazione con google. La risposta di Django che di fatto è un
redirect, ha una dimensione esagerata che continua ad aumentere nel
tempo (gli headers sono passati da circa 500 Bytes a 2.5kB => 16kB).

Vorrei far fare il dump della request e response a uwsgi ma non trovo
come farlo.

Ho quindi pensato di farlo fare ad un middleware di Django ma vedo che
non esiste un metodo nella response che lo faccia.

Prima di tuffarmi nell'analisi del codice, qualcuno sa già come farlo?
vedo che neanche la request ha un metodo facile per fare il dump di
ciò che è arrivato... avrei immaginato ad esempio una property
'raw'...

sandro

Riccardo Magliocchetti

unread,
Mar 11, 2019, 8:01:10 AM3/11/19
to djan...@googlegroups.com
Ciao Alessandro,

Il 11/03/19 12:53, Alessandro Dentella ha scritto:
> Ciao,
>
> ho un problema "curioso" (forse "scocciante" è più corretto) di
> autenticazione con google. La risposta di Django che di fatto è un
> redirect, ha una dimensione esagerata che continua ad aumentere nel
> tempo (gli headers sono passati da circa 500 Bytes a 2.5kB => 16kB).

I sintomi sembrano quelli di usare come default di un parametro una struttura
mutabile che aggiorni nella vista. E in quel caso l'oggetto che aggiorni è lo
stesso e non uno nuovo per ogni chiamata della vista.

> Vorrei far fare il dump della request e response a uwsgi ma non trovo
> come farlo.

https://uwsgi-docs.readthedocs.io/en/latest/LogFormat.html

> Ho quindi pensato di farlo fare ad un middleware di Django ma vedo che
> non esiste un metodo nella response che lo faccia.
>
> Prima di tuffarmi nell'analisi del codice, qualcuno sa già come farlo?
> vedo che neanche la request ha un metodo facile per fare il dump di

request.META?
https://docs.djangoproject.com/en/2.1/ref/request-response/#django.http.HttpRequest.META


--
Riccardo Magliocchetti
@rmistaken

http://menodizero.it

Alessandro Dentella

unread,
Mar 11, 2019, 8:17:47 AM3/11/19
to djan...@googlegroups.com
Ciao Riccardo,

On Mon, Mar 11, 2019 at 01:01:02PM +0100, Riccardo Magliocchetti wrote:
> Ciao Alessandro,
>
> Il 11/03/19 12:53, Alessandro Dentella ha scritto:
> >Ciao,
> >
> >ho un problema "curioso" (forse "scocciante" è più corretto) di
> >autenticazione con google. La risposta di Django che di fatto è un
> >redirect, ha una dimensione esagerata che continua ad aumentere nel
> >tempo (gli headers sono passati da circa 500 Bytes a 2.5kB => 16kB).
>
> I sintomi sembrano quelli di usare come default di un parametro una
> struttura mutabile che aggiorni nella vista. E in quel caso l'oggetto che
> aggiorni è lo stesso e non uno nuovo per ogni chiamata della vista.
>

Ma in quel punto io sto solo cliccando il bottone "login con Google",
non ho ancora una sessione aperta -ancora più strano- se premi tante
volte F5 la dimensione della risposta varia da 2.5k a 16k in modo che
finora pare random.

Tra l'altro sarebbe ancora più semplice configurare nginx per
accettare una risposta fino a 16-321k ma anche qui ho un problema ed
ho aperto una domanada su serverfault:

https://serverfault.com/questions/957408/how-to-set-and-test-nginx-uwsgi-buffer-size

Se nginx non la tagliasse, vedrei da browser che cosa passa...

> >Vorrei far fare il dump della request e response a uwsgi ma non trovo
> >come farlo.
>
> https://uwsgi-docs.readthedocs.io/en/latest/LogFormat.html

Si, ci ero già passato da lì ma vedo che posso loggare il numero e la
dimensione degli headers, non il contenuto. Io vorrei il dump esatto
come quello che otterrei con tcpdump o simili... vedo ora che potrei
usare 'socat'... ci provo dopo pranzo.


> >Ho quindi pensato di farlo fare ad un middleware di Django ma vedo che
> >non esiste un metodo nella response che lo faccia.
> >
> >Prima di tuffarmi nell'analisi del codice, qualcuno sa già come farlo?
> >vedo che neanche la request ha un metodo facile per fare il dump di
>
> request.META?
> https://docs.djangoproject.com/en/2.1/ref/request-response/#django.http.HttpRequest.META

Si, ma a partire da questa response, django deve produrre la stringa
finale che invia ad nginx, quella non deve superare 4k per la
configurazione attuale di quella voglio avere il dump per capire cosa
c'è dentro.

L'analisi di META può avere delle informazioni, ma mi pare più logico
di sfruttare esattamente il metodo che usa django invece di rifermelo.

sandro
Reply all
Reply to author
Forward
0 new messages