2012-08-02 10 views
8

hay una possibillity para obtener el nombre del archivopitón httplib/urllib get nombre

e.g. xyz.com/blafoo/showall.html 

si se trabaja con urllib o httplib?

para que pueda guardar el archivo con el nombre de archivo en el servidor?

Si usted va a sitios como

xyz.com/blafoo/ 

no puede ver el nombre del archivo.

Gracias

+0

posible duplicado de [nombre del archivo urllib2] (http: //stackoverflow.com/questions/163009/urllib2-file-name) – KevinDTimm

Respuesta

22

Para obtener el nombre de archivo de cabeceras HTTP de respuesta:

import cgi 

response = urllib2.urlopen(URL) 
_, params = cgi.parse_header(response.headers.get('Content-Disposition', '')) 
filename = params['filename'] 

Para obtener el nombre de archivo de la URL:

import posixpath 
import urlparse 

path = urlparse.urlsplit(URL).path 
filename = posixpath.basename(path) 
+0

Gran respuesta, una pequeña solución. Usar os.path.basename (path) es una forma de hacerlo de forma cruzada. –

+1

@JorgeVargas: no. 'posixpath' es el módulo correcto aquí. Además, sería un error usar 'os.path' aquí. Si no puede entender "por qué", pregunte, lo elaboraré. – jfs

+0

Preguntaré: ¿por qué debería uno usar posixpath? –

1

No tiene mucho sentido lo que está preguntando. Lo único que tienes es la URL. sea extracto de la última parte de la URL o que comprueben la respuesta HTTP para algo así como

content-disposition: attachment;filename="foo.bar" 

Esta cabecera se puede configurar el servidor para indicar que el nombre del archivo es foo.bar. Esto se usa generalmente para descargar archivos o algo similar.

0

Busqué usted pregunta en Google y vi que fue respondida en stackoverflow antes Creo.

Trate de mirar este post:

Using urllib2 in Python. How do I get the name of the file I am downloading?

El nombre del archivo se incluye generalmente por el servidor a través de la cabecera content-disposition:

content-disposition: attachment; filename=foo.pdf 

se tiene acceso a las cabeceras a través de

result = urllib2.urlopen(...) 
result.info() <- contains the headers 


i>>> import urllib2 
ur>>> result = urllib2.urlopen('http://zopyx.com') 
>>> print result 
<addinfourl at 4302289808 whose fp = <socket._fileobject object at 0x1006dd5d0>> 
>>> result.info() 
<httplib.HTTPMessage instance at 0x1006fbab8> 
>>> result.info().headers 
['Date: Mon, 04 Apr 2011 02:08:28 GMT\r\n', 'Server: Zope/(unreleased version, python 2.4.6, linux2) ZServer/1.1 

Plone/3.3.4 \ r \ n ',' Content-Length: 15321 \ r \ n ',' Content-Type: text/html; charset = utf-8 \ r \ n ',' Vía: 1.1 www.zopyx.com \ r \ n ', ' Control de caché: max-age = 3600 \ r \ n ',' Caduca: lunes, 04 de abril 2011 03:08:28 GMT \ r \ n', 'Connection: close \ r \ n']

Ver

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