python httplib/urllib获取文件名

python httplib/urllib获取文件名,python,urllib,httplib,Python,Urllib,Httplib,是否有可能获取文件名 e.g. xyz.com/blafoo/showall.html 如果您使用urllib或httplib 这样我就可以将文件保存在服务器上的文件名下了 如果你去像这样的网站 xyz.com/blafoo/ 你看不到文件名 谢谢你你的要求没有多大意义。你唯一拥有的就是URL。 要么从URL中提取最后一部分,要么检查HTTP响应是否有以下内容 content-disposition: attachment;filename="foo.bar" 服务器可以设置此标题,以指

是否有可能获取文件名

e.g. xyz.com/blafoo/showall.html
如果您使用urllib或httplib

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

如果你去像这样的网站

xyz.com/blafoo/ 
你看不到文件名


谢谢你

你的要求没有多大意义。你唯一拥有的就是URL。 要么从URL中提取最后一部分,要么检查HTTP响应是否有以下内容

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

服务器可以设置此标题,以指示文件名为foo.bar。这通常用于文件下载或类似操作。

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

我在谷歌上搜索了你们的问题,在我相信之前,我在stackoverflow中看到了答案

试着看看这个帖子:

文件名通常由服务器通过 内容处置标头:

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
result=urllib2.urlopen(…)
result.info()>>导入urllib2
ur>>>结果=urllib2.urlopen('http://zopyx.com')
>>>打印结果


使用
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'

可能是伟大答案的复制品,一个小小的修正。使用os.path.basename(path)是一种跨平台的方法。@JorgeVargas:no.
posixpath
是正确的模块。此外,在这里使用
os.path
也是一个错误。如果你不明白“为什么”,我会详细说明。我会问:为什么要使用posixpath?@KarlM.Davis:URL在其路径段中使用
'/'
<代码>操作系统。Windows上的路径
可能使用不适合URL的
'\\'
作为路径名分隔符
posixpath
使用
“/”