确定 URL 的内容类型
在对网络服务器上的内容执行 GET 请求时,网络服务器会返回一些标头,其中一个标头从网络服务器的角度确定了内容的类型。在本示例中,我们将学习如何使用它来确定网络服务器认为的内容类型。
如何做
我们按如下方式进行:
-
执行示例的脚本。 它包含以下代码:
util = URLUtility(const.ApodEclipseImage()) print("The content type is: " + util.contenttype)
-
结果如下:
Reading URL: https://apod.nasa.gov/apod/image/1709/BT5643s.jpg Read 171014 bytes The content type is: image/jpeg
运行原理
content 类型属性的实现如下:
@property
def contenttype(self):
self.ensure_response()
return self._response.headers['content-type']
_response 对象的 .headers 属性是一个类似于字典的标头类。 内容类型键将检索服务器指定的内容类型。 对 Ensure_response() 方法的调用只是确保 .read() 函数已被执行。
还有更多
响应中的标头包含大量信息。 如果我们更仔细地查看响应的 headers 属性,我们可以看到返回了以下标头:
>>> response = urllib.request.urlopen(const.ApodEclipseImage())
>>> for header in response.headers: print(header)
Date
Server
Last-Modified
ETag
Accept-Ranges
Content-Length
Connection
Content-Type
Strict-Transport-Security
我们可以看到每个标头的值。
>>> for header in response.headers: print(header + " ==> " +
response.headers[header])
Date ==> Tue, 26 Sep 2017 19:31:41 GMT
Server ==> WebServer/1.0
Last-Modified ==> Thu, 31 Aug 2017 20:26:32 GMT
ETag ==> "547bb44-29c06-5581275ce2b86"
Accept-Ranges ==> bytes
Content-Length ==> 171014
Connection ==> close
Content-Type ==> image/jpeg
Strict-Transport-Security ==> max-age=31536000; includeSubDomains
其中许多内容我们不会在本书中讨论,但对于不熟悉的人来说,知道它们的存在是件好事。