2012-08-02 14 views
8

c'è un possibillity per ottenere il nome del filepython httplib/urllib get filename

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

se si lavora con urllib o httplib?

in modo da poter salvare il file con il nome file sul server?

Se vai a siti come

xyz.com/blafoo/ 

non puoi vedere il nome del file.

Grazie

+0

possibile duplicato del [nome del file urllib2] (http: //stackoverflow.com/questions/163009/urllib2-file-name) – KevinDTimm

risposta

22

Per ottenere il nome del file dalla risposta intestazioni HTTP:

import cgi 

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

Per ottenere il nome del file dall'URL:

import posixpath 
import urlparse 

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

Ottima risposta, una piccola soluzione. L'utilizzo di os.path.basename (percorso) è un modo multipiattaforma per fare ciò. –

+1

@JorgeVargas: no. 'posixpath' è il modulo corretto qui. Inoltre sarebbe un errore usare 'os.path' qui. Se non riesci a capire "perché", chiedi, elaborerò. – jfs

+0

Mi chiederò: perché si dovrebbe usare posixpath? –

1

Non ha molto senso quello che stai chiedendo. L'unica cosa che hai è l'URL. O estrarre l'ultima parte della URL oppure si può controllare la risposta HTTP per qualcosa come

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

Questa intestazione può essere impostato dal server per indicare che il nome del file è foo.bar. Questo di solito è usato per scaricare file o qualcosa di simile.

0

ho cercato si mette in discussione su Google e ho visto che è stato risposto in StackOverflow prima Credo.

Prova a guardare questo post:

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

Il nome del file è di solito incluso dal server tramite l'intestazione Content-Disposition:

content-disposition: attachment; filename=foo.pdf 

si ha accesso alle intestazioni tramite

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 ',' Via: 1.1 www.zopyx.com \ r \ n ', ' Cache-Control: max-age = 3600 \ r \ n ',' Scade: lun, 04 apr 2011 03:08:28 GMT \ r \ n', 'Connection: close \ r \ n']

Vedere

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

Problemi correlati