(十八)HTML、JSON 与浏览器显示的页面
# 项目文件:demos/http_html_json.py
# 两个路径返回不同媒体类型;请求成功后要按内容选择解释方式。
import json
from urllib.request import urlopen
from labserver import running_server
if __name__ == "__main__":
with running_server() as server:
for path in ["/", "/api/books"]:
with urlopen(server.base_url + path, timeout=1) as response:
text = response.read().decode("utf-8")
kind = response.headers.get_content_type()
if kind == "application/json":
print(kind, len(json.loads(text)["books"]))
else:
print(kind, "<h1>阅读目录</h1>" in text)输出 text/html True 与 application/json 3。HTML 里的 <h1>...</h1> 标出页面标题,浏览器解释标签并绘制页面;JSON 则交回数据结构,程序可以直接取得 books。
浏览器还可能继续请求样式、图片和脚本,脚本再请求另一个 JSON 接口,然后更新屏幕。普通 HTTP 客户端取得的那一份响应,不会自动执行页面脚本。看网页时可以打开开发者工具的 Network,分别查看文档请求、接口请求、状态、头部和 Response,不把屏幕最终显示的所有内容都当成第一次 HTML 响应。