Página 1 de 2

PelisALaCarta : Una ayudita con los proxies...

Publicado: 07 Sep 2014, 12:41
por tazvader
Alguien puede darme una explicación de porque esto :

html,cookies = scrapertools.read_body_and_headers('http://www.google.com/ABCD')

genera esto en los logs :

12:50:18 T:4276 NOTICE: send:
12:50:18 T:4276 NOTICE: 'GET /ABCD HTTP/1.1\r\nAccept-Language: es-ES,es;q=0.8,en-US;q=0.5,en;q=0.3\r\nAccept-Encoding: gzip, deflate\r\nHost: www.google.com\r\nAccept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8\r\nUser-Agent: Mozilla/5.0 (Windows NT 6.1; rv:28.0) Gecko/20100101 Firefox/28.0\r\nConnection: close\r\n'

Y si delante delante de esa llamada ponemos :
os.environ["HTTP_PROXY"]=Proxy

El log pone :
12:50:18 T:4276 NOTICE: send:
12:50:18 T:4276 NOTICE: 'GET http://www.google.com/ABCD HTTP/1.1\r\nAccept-Language: es-ES,es;q=0.8,en-US;q=0.5,en;q=0.3\r\nAccept-Encoding: gzip, deflate\r\nHost: www.google.com\r\nAccept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8\r\nUser-Agent: Mozilla/5.0 (Windows NT 6.1; rv:28.0) Gecko/20100101 Firefox/28.0\r\nConnection: close\r\n'


Es decir añade protocolo y host a la peticion al host :?: :?: :?:

Gracias por adelantado...

SalU2

Re: PelisALaCarta : Una ayudita con los proxies...

Publicado: 07 Sep 2014, 20:08
por jesus
Entiendo que es porque está intentando hacer esa misma llamada a través de un proxy, así que necesita enviarle la URL completa.

No conocía esa forma de decirle en Python que debe usar un proxy... interesante :)

Re: PelisALaCarta : Una ayudita con los proxies...

Publicado: 07 Sep 2014, 21:35
por tazvader
Gracias Jesus por tu respuesta...

Estaria de acuerdo contigo si el Host de esa peticion fuera el proxy, pero no... es el mismo host destino original...
Claro que otra opción es que lo que hace no tenga nada que ver con la informacion del Log...

Esa linea quien la pinta? PelisALaCarta? Libreria de XBMC? de Python? No he logrado ver si lo que intenta ejecutar es realmente lo que pinta en el log...

Lo dicho, Gracias...

Un Saludo

Re: PelisALaCarta : Una ayudita con los proxies...

Publicado: 08 Sep 2014, 08:21
por jesus
Depende del tipo de proxy...

Si es un proxy http, lo que se hace es enviar un mensaje http al proxy poniéndole en la primera línea el GET (o POST) del sitio que quieres descargar. El proxy a su vez hace esa llamada al sitio definitivo.

Si es un proxy SOCKS es a más bajo nivel, con sockets, así que probablemente no lo hará así porque ya no es necesario.

Esa línea la añade Python (la librería urllib), y sale porque en el scrapertools tienes habilitado el log de depuración para HTTP.

Lo que te muestra es lo que se envía realmente, suele resultar muy útil:

Código: Seleccionar todo

30 # True - Muestra las cabeceras HTTP en el log
31 # False - No las muestra
32 DEBUG_LEVEL = True

Re: PelisALaCarta : Una ayudita con los proxies...

Publicado: 08 Sep 2014, 09:53
por tazvader
Como siempre, gracias por la información y la ayuda...
jesus escribió:Depende del tipo de proxy...
Si es un proxy http, lo que se hace es enviar un mensaje http al proxy poniéndole en la primera línea el GET (o POST) del sitio que quieres descargar. El proxy a su vez hace esa llamada al sitio definitivo.
Es un proxy http.
Pero segun el log la peticion de GET http://www.google.com/ABCD se deberia hacer al host "proxy" y no al host www.google.com como indica el log, no?

Revisare la urllib a ver que veo...

Lo dicho Gracias!!

SalU2

Re: PelisALaCarta : Una ayudita con los proxies...

Publicado: 08 Sep 2014, 10:27
por robalo
No se muy bien que intentas hacer, pero creo que se está confundiendo la petición de una pagina web con la ruta que debe tomar esa petición y quién la debe gestionar.

La cabecera de solicitud es correcta en el log. Lo que se debería loguear es si proxy es el que gestiona la petición

Re: PelisALaCarta : Una ayudita con los proxies...

Publicado: 08 Sep 2014, 20:09
por tazvader
No quiero hacer nada complicado, o eso pensaba, simplemente hacer una de las llamadas pasando por un proxy, y al ver los logs me ha extrañado que hiciera un get http://www.google.com/ZXCZXC al host http://www.google.com, me esperaba que hiciera esa peticion al proxy.
El problema es que la peticion la hace el proxy, pero la pagina original no contesta lo que esperaba...

Re: PelisALaCarta : Una ayudita con los proxies...

Publicado: 09 Sep 2014, 17:19
por jesus
Ten en cuenta que igual la página no contesta bien si está recibiendo algo de un proxy.

La cosa va mas a bajo nivel...

Si no me equivoco el proceso completo es que Python abre un socket con el proxy y le manda un mensaje HTTP, que es el que sale en el log. El proxy recibe ese mensaje HTTP, y saca de ahí el destinatario real al que tiene que enviar la información. Normalmente los proxies aprovechan para hacer algo con la información (cachearla, filtrarla, comprimirla, etc.) antes de responder.

Buscando un poco en Google me he topado con esto, tiene un pequeño ejemplo que parece coincidir con lo que te sale en el log

http://www.cs.princeton.edu/courses/arc ... proxy.html

Seguro que en Python se puede loguear también la capa de sockets, pero nunca lo he mirado. De hecho ya me costó un rato averiguar como loguear las cabeceras HTTP :(

Re: PelisALaCarta : Una ayudita con los proxies...

Publicado: 09 Sep 2014, 21:07
por tazvader
Metere un sniffer para ver que esta enviando y asi salgo de dudas...
Ya os contaré...

Re: PelisALaCarta : Una ayudita con los proxies...

Publicado: 10 Sep 2014, 08:03
por robalo
tazvader escribió:No quiero hacer nada complicado, o eso pensaba, simplemente hacer una de las llamadas pasando por un proxy, y al ver los logs me ha extrañado que hiciera un get http://www.google.com/ZXCZXC al host http://www.google.com, me esperaba que hiciera esa peticion al proxy.
El problema es que la peticion la hace el proxy, pero la pagina original no contesta lo que esperaba...
La diferencia en el log etre
12:50:18 T:4276 NOTICE: 'GET /ABCD HTTP/1.1\r\nAccept.....
y
12:50:18 T:4276 NOTICE: 'GET http://www.google.com/ABCD HTTP/1.1\r\nAccept.....
es por que la primera, la conexión con el host la realiza el cliente y la segunda, la conexión con el host la realiza supuestamente el proxy, por eso lo de enviarle el host en la petición