python httplib / urllib получить имя файла

есть ли возможность узнать имя

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

Если вы работаете с urllib или httplib?

чтобы я мог сохранить файл под именем файла на сервере?

Если вы идете на сайтах, как

xyz.com/blafoo/ 

вы не можете видеть имя файла.

спасибо

3 ответов


чтобы получить имя файла из заголовков http ответа:

import cgi

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

чтобы получить имя файла из URL:

import posixpath
import urlparse 

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

не имеет большого смысла то, что вы просите. Единственное, что у вас есть URL-адрес. Либо извлеките последнюю часть из URL-адреса, либо вы можете проверить HTTP-ответ на что-то вроде

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

этот заголовок может быть установлен сервером, чтобы указать, что имя файла фу.бар. Обычно это используется для загрузки файлов или что-то подобное.


Я искал вас вопрос в google, и я видел, что на него ответили в stackoverflow, прежде чем я поверил.

попробуйте посмотреть на этот пост:

использование urllib2 в Python. Как получить имя файла, который я загружаю?

имя файла обычно включается сервером через заголовок Content-disposition:

content-disposition: attachment; filename=foo.pdf

у вас есть доступ к заголовкам через

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', ' истекает: Пн, 04 апр 2011 03: 08:28 GMT\r\n', 'соединение: закрыть\r\n']

посмотреть

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