Estoy escribiendo una aplicación web que usa varias API web de terceros, y deseo hacer un seguimiento de la solicitud de bajo nivel y las respuestas para el análisis de ad-hock. Así que estoy buscando una receta que logre que el urllib2 de Python registre todos los bytes transferidos a través de HTTP. Tal vez un Handler sub-clasificado?Cómo obtengo que urllib2 registre TODOS los bytes transferidos
Respuesta
Bueno, he encontrado la manera de configurar el mecanismo integrado de depuración de la 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)
Pero todavía estoy buscando una manera de volcar toda la información transferida.
Esto parece bastante complicado de hacer. No hay ganchos en urllib2, urllib o httplib (que se basa en esto) para interceptar datos de entrada o salida.
Lo único que se me ocurre, aparte de cambiar de táctica para usar una herramienta externa (de la que hay muchas, y la mayoría de las personas usa tales cosas), sería escribir una subclase de socket.socket en su propia nueva módulo (por ejemplo, "captura_conjunto") y luego inserte eso en httplib con "importación captura_consejo; importación httplib; httplib.socket = captura_conjunto". Tendría que copiar todas las referencias necesarias (cualquier cosa de la forma "socket.foo" que se utiliza en httplib) en su propio módulo, pero luego podría anular cosas como recv() y sendall() en su subclase para hacer lo que te gusta con los datos.
Probablemente surgirían complicaciones si usabas SSL, y no estoy seguro de si esto sería suficiente o si también tendrías que hacer tu propio socket._fileobject también. Sin embargo, parece factible, y leer detenidamente la fuente en httplib.py y socket.py en la biblioteca estándar le dirá más.
- 1. Rack :: Solicitud: ¿cómo obtengo todos los encabezados?
- 2. boost :: asio async_read garantizan que se leen todos los bytes
- 3. ¿Cómo decirle a NLog que registre excepciones?
- 4. ¿Cómo obtengo todos los artículos sobre personas de Wikipedia?
- 5. Java: ¿cómo obtengo todos los valores seleccionados de una JList?
- 6. ¿Cómo obtengo todos los parámetros GET en Silex?
- 7. ¿Cómo obtengo una lista de todos los ensamblajes cargados actualmente?
- 8. ¿Por qué obtengo urllib2.HTTPError con urllib2 y no hay errores con urllib?
- 9. GZipStream y DeflateStream no descomprimirán todos los bytes
- 10. C# - ¿Cómo obtengo el usuario "Todos"?
- 11. ¿Cómo obtengo una lista de todos los caracteres Unicode que tienen una propiedad determinada?
- 12. ¿Cómo obtengo todas las instancias de todos los tipos cargados que implementan una interfaz determinada?
- 13. Cómo que registre automáticamente entidades con JPA/Hibernate: entidad desconocida
- 14. ¿Cómo hacer que hbm2ddl schemaExport registre esquema en stdout?
- 15. ¿Cómo lograr que todos los usuarios desempeñen un papel específico?
- 16. Datos principales: observe los cambios y registre las notificaciones locales
- 17. ¿Cómo obtengo los datos de UIImagePickerControllerReferenceURL?
- 18. urllib2 leído a Unicode
- 19. ¿Son seguros los subprocesos urllib2 y httplib?
- 20. ¿Cómo hacer que WebLogic registre todo el mensaje de "consola" en un archivo?
- 21. Python URLLib/URLLib2 POST
- 22. Python: Urllib2 y OpenCV
- 23. impedir que Rails registre archivos adjuntos de correo electrónico
- 24. Para ver el contenido datos POST transferidos por jQuery
- 25. ¿Cómo iterar sobre todos los bytes en un inputStream usando Groovy, dado que carece de una declaración do-while?
- 26. WMI Obtener todos los monitores que no devuelven todos los monitores
- 27. cómo se tiene en cuenta cuando TCP no obtiene todos los bytes en uno leído
- 28. ¿Cómo se leen todos los bytes juntos a través de Bluetooth?
- 29. ¿Cómo se obtienen los encabezados predeterminados en una solicitud de urllib2?
- 30. ¿Previene (detiene) Apache para que no registre AJAX/XmlHttpRequests?
+1 Muy buena pregunta de python hace casi 2 años sin votos ascendentes. Es realmente extraño. Estoy buscando una respuesta yo mismo. En mi caso, me preocupan solo los encabezados HTTP, sin embargo. –