python httplib / urllib获取文件名

时间:2012-08-02 18:05:52

标签: python urllib httplib

是否有可能获得文件名

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

如果您使用urllib或httplib?

这样我可以将文件保存在服务器上的文件名下吗?

如果你去

这样的网站
xyz.com/blafoo/ 

你看不到文件名。

谢谢

4 个答案:

答案 0 :(得分:24)

从响应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)

答案 1 :(得分:1)

你的要求没有多大意义。你唯一拥有的是URL。 从URL中提取最后一部分,或者您可以检查HTTP响应,例如

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

此标头可由服务器设置,以指示文件名为 foo.bar 。这通常用于文件下载或类似的东西。

答案 2 :(得分:0)

我在google上搜索了你的问题,我发现在我相信之前它已经在stackoverflow中得到了解答。

试着看看这篇文章:

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

  

服务器通常包含文件名   content-disposition header:

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','内容长度:15321 \ r \ n','内容类型:   为text / html; charset = utf-8 \ r \ n','Via:1.1 www.zopyx.com \ r \ n',   'Cache-Control:max-age = 3600 \ r \ n','Expires:Mon,04 Apr 2011 03:08:28   GMT \ r \ n','连接:关闭\ r \ n']

     

     

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

答案 3 :(得分:0)

使用urllib.request.Request

import urllib

req = urllib.request.Request(url, method='HEAD')
r = urllib.request.urlopen(req)
print(r.info().get_filename())

示例:

In[1]: urllib.request.urlopen(urllib.request.Request('https://httpbin.org/response-headers?content-disposition=%20attachment%3Bfilename%3D%22example.csv%22', method='HEAD')).info().get_filename()
Out[1]: 'example.csv'