2011-06-23 16 views
12

Estoy tratando de aprender cómo funciona el urllib2 y cómo encapsula sus diversos componentes antes de enviar una solicitud o respuesta real.Qué hace urllib2.Request (<url>) y cómo lo imprimo/lo veo

hasta ahora tengo:

theurl = "www.example.com" 

Eso, obviamente, especifica la dirección URL a la vista.

req = urllib2.Request(theurl) 

No sé lo que hace esto, de ahí la pregunta.

handle = urllib2.urlopen(req) 

Éste obtiene la página y hace todas las solicitudes y respuestas requeridas.

Así que mi pregunta es, ¿qué hace realmente urllib2.Request?

Para tratar de mirarlo para tener una idea Probé

print req 

y acaba de conseguir

<urllib2.Request instance at 0x123456789> 

También probé

print req.read() 

y tengo:

Traceback (most recent call last): 
    File "<stdin>", line 1, in ? 
    File "/usr/lib64/python2.4/urllib2.py, line 207, in `__`getattr`__` 
     raise AttributeError, attr 
AttributeError: read 

Así que obviamente estoy haciendo algo mal. Si alguien puede ayudar en una de mis dos preguntas, sería genial.

+2

http://docs.python.org/library/urllib2.html – Blair

+2

@Blair, última he comprobado los documentos 'urllib2' de python no fueron tan buenos ... Michael Foord tiene un docset bastante bueno aquí: http://www.voidspace.org.uk/python/articles/urllib2.shtml –

+0

-3? Hombre, eso es duro. ¿Qué hay de votar unas pocas preguntas en su lugar? – MatthewD

Respuesta

14

La clase "Solicitud" que estás preguntando acerca de: http://docs.python.org/library/urllib2.html#urllib2.Request

clase urllib2.Request (url [, datos] [, encabezados] [, origin_req_host] [, no verificable])

Esta clase es una abstracción de una solicitud de URL .

La función que realmente desea hacer una solicitud (que puede aceptar un objeto Request o envuelva una alrededor de una cadena URL que Provice) construir un objeto Request): http://docs.python.org/library/urllib2.html#urllib2.urlopen

urllib2.urlopen (url [, data] [, timeout]) Abra la url URL, que puede ser una cadena o un objeto Request.

Ejemplo:

theurl = "www.example.com" 
try: 
    resp = urllib2.urlopen(theurl) 
    print resp.read() 
except IOError as e: 
    print "Error: ", e 

Ejemplo 2 (con Request):

theurl = "www.example.com" 
try: 
    req = urllib2.Request(theurl) 
    print req.get_full_url() 
    print req.get_method() 
    print dir(req) # list lots of other stuff in Request 
    resp = urllib2.urlopen(req) 
    print resp.read() 
except IOError as e: 
    print "Error: ", e 
3

urllib2.Request() parece una llamada a función, pero no lo es - es un constructor de objetos. Crea un objeto de tipo Solicitud desde el módulo urllib2, documentado here.

Como tal, probablemente no haga nada excepto iniciarse. Puede verificar esto mirando el código fuente, que debe estar en el directorio lib de su instalación de Python (urllib2.py, al menos en Python 2.x).

+0

Gracias por las respuestas. @ S.Lott - Estaba más interesado en el propósito de la Solicitud. Leer el mango está más abajo de la cadena de lo que quería ver. @Bliar - Gracias por la dirección, había mirado allí pero como Mike dijo que era una descripción muy pobre. @Maike - Gracias por el enlace, esa es la explicación que estaba buscando. Tiene sentido ahora. Todavía no estoy seguro de por qué no puedo imprimir/ver el contenido del objeto Request. – user788462

+0

gracias por la sugerencia pero, al igual que S.Lott, no me proporciona la información que deseo ver. Imprimir "manejar" simplemente imprime la página web recopilada. Deseo ver "req" y cómo utiliza "theurl" y cualquier otra entrada que se le dé, antes de que se ponga en urlopen. @ Sentinel- teniendo un buen día somos nosotros :). Parece que eres el que falta la investigación básica. – user788462

+0

Bien, he editado mi respuesta. Espero que sea más útil. – MatthewD