Sto scrivendo un'app Web che utilizza diverse API Web di terze parti e desidero tenere traccia della richiesta e delle risposte di basso livello per l'analisi ad hoc. Quindi sto cercando una ricetta che permetta a urllib2 di Python di registrare tutti i byte trasferiti via HTTP. Forse un Handler sottoclassato?Come ottenere urllib2 per registrare TUTTI i byte trasferiti
risposta
Beh, ho trovato come impostare il meccanismo incorporato debug della biblioteca:
import logging, urllib2, sys
hh = urllib2.HTTPHandler()
hsh = urllib2.HTTPSHandler()
hh.set_http_debuglevel(1)
hsh.set_http_debuglevel(1)
opener = urllib2.build_opener(hh, hsh)
logger = logging.getLogger()
logger.addHandler(logging.StreamHandler(sys.stdout))
logger.setLevel(logging.NOTSET)
Ma sto ancora cercando un modo per scaricare tutte le informazioni trasferite.
Questo sembra piuttosto difficile da fare. Non ci sono hook in urllib2, urllib o httplib (su cui questo si basa) per intercettare i dati di input o di output.
L'unica cosa che mi viene in mente, oltre a cambiare tattica per usare uno strumento esterno (di cui ci sono molti e molte persone usano queste cose), sarebbe scrivere una sottoclasse di socket.socket nel proprio modulo (ad esempio, "capture_socket") e quindi inserirlo in httplib utilizzando "import capture_socket; import httplib; httplib.socket = capture_socket". Dovresti copiare tutti i riferimenti necessari (qualcosa del formato "socket.foo" che è usato in httplib) nel tuo modulo, ma poi potresti scavalcare cose come recv() e sendall() nella sottoclasse da fare cosa ti piace con i dati.
Probabilmente si verificherebbero complicazioni se si stesse utilizzando SSL, e non sono sicuro se questo sarebbe sufficiente o se si debba anche creare il proprio socket._fileobject. Sembra fattibile, tuttavia, e esaminare la fonte in httplib.py e socket.py nella libreria standard potrebbe dirti di più.
- 1. NSURLSessione, attività di caricamento - Trasferisci i byte effettivi trasferiti
- 2. permutando byte all'interno SSE __m128i registrare
- 3. Come si collegano i tasti trasferiti a LaTeX-math-mode?
- 4. Come vengono trasferiti i cookie nel protocollo HTTP?
- 5. Come ottenere tutti i commenti da Disqus?
- 6. Come ottenere tutti i CSS dell'elemento
- 7. Come ottenere tutti i rami con JGit
- 8. Come ottenere tutti i corsi su moodle?
- 9. Come ottenere IMEI per J2ME supportato tutti i dispositivi?
- 10. Come posso registrare i dati post RESTful?
- 11. UIWebView non libera tutti i byte attivi utilizzando ARC
- 12. Come posso ottenere i byte di un GetObjectResponse da S3?
- 13. Come ottenere tutti i lavori in sospeso in coda laravel su redis?
- 14. per ottenere IL dall'array di byte
- 15. Come ottenere un singolo byte da BitArray (senza byte [])?
- 16. API Web ASP.Net non legge tutti i byte da StreamContent
- 17. Come ottenere EventLog per registrare il nome utente nel registro eventi di Windows?
- 18. perché i buffer trasferiti sono sterilizzati in javascript?
- 19. boost :: asio async_read garantisce che tutti i byte siano letti
- 20. Notepad ++ Collegamento per Trova tutti in tutti i documenti aperti
- 21. Impossibile ottenere jQuery su() per registrare contenuto aggiunto dinamicamente
- 22. Istruzione SQL per ottenere tutti i clienti senza ordini
- 23. Come ottenere tutti i collegamenti dal sito Web utilizzando Beautiful Soup (python) in modo ricorsivo
- 24. Come ottenere byte (byte []) da un file caricato in Grails
- 25. Golang: da [] byte per ottenere esadecimale
- 26. Sitecore DMS - ottenere tutti i profili per il visitatore
- 27. Utilizzo dell'API di Instagram per ottenere TUTTI i follower
- 28. Redis: il modo migliore per ottenere tutti i valori hash
- 29. HBase ottenere tutti i valori timestamp per una cella
- 30. C# ottenere tutti i colori da colori
+1 Una domanda pitone molto carina è stata richiesta quasi 2 anni fa senza alcun upvotes. È davvero strano Sto cercando una risposta da solo. Nel mio caso, tuttavia, sono interessato solo alle intestazioni HTTP. –