python restful api 编程
【1】微博开放平台的RESTful API:open.weibo.com -> 文档 -> 调用样例及调试工具
通过Linux命令行查看API返回结果:curl ip?参数
json数据格式化工具:pro.jsonlint.com
【2】RESTful的起源及设计理念
Representational State Transfer
一种软件架构风格,设计风格而不是标准,只是提供了一组设计原则和约束条件。
它主要用于客户端和服务器交互类的软件。基于这个风格设计的软件可以更简洁,更有层次,更易于实现缓存等机制。
【3】Python包管理工具:easy_instal和pip
为一个应用创建一套“隔离”的Python运行环境:virtualenv
wget https://bootstrap.pypa.io/get-pip.py
python get-pip.py
pip install XXX
virtualenv安装使用方法:
easy_install virtualenv
mkdir myproject
cd myproject
virtualenv venv
source /root/myproject/venv/bin/activate 激活virtualenv
deactivate 关闭virtualenv
【4】Chrome开发者工具介绍
Chrome浏览器中的各个选项卡:
Network: 分析网站请求的网络情况、查看某一请求的请求头和响应头还有响应内容
Elements:左侧就是对页面HTML结构的查看与编辑,右侧可以对元素的CSS进行查看与编辑修改
Console: 在这个面板可以查看错误信息、打印调试信息(console.log())、写一些测试脚本,还可以当作Javascript API查看用
【5】Python HTTP库Requests介绍
Requests文档: http://docs.python-requests.org/zh_CN/latest/user/quickstart.html
介绍并演示Requests的get,post,put,delete方法
介绍并演示Requests如何添加浏览器头
介绍并演示Requests如何处理相应
pip install requests
import requests
发送请求
r = requests.get('https://github.com/timeline.json')
响应内容
r.text
r.encoding
r.json()
使用 r.content 来找到编码,然后设置 r.encoding 为相应的编码。这样就能使用正确的编码解析 r.text
from PIL import Image
from io import BytesIO
i = Image.open(BytesIO(r.content))以请求返回的二进制数据创建一张图片
r = requests.get('https://github.com/timeline.json', stream=True)
r.raw获取来自服务器的原始套接字响应
传递 URL 参数
payload = {'key1': 'value1', 'key2': 'value2'}
r = requests.get("http://httpbin.org/get", params=payload)
print(r.url)
定制请求头
url = 'https://api.github.com/some/endpoint'
headers = {'user-agent': 'my-app/0.0.1'}
r = requests.get(url, headers=headers)
r.status_code
r.raise_for_status()抛出异常
HTTP 状态码
200 ok - 成功返回状态,对应,GET,PUT,PATCH,DELETE.
201 created - 成功创建。
304 not modified - HTTP缓存有效。
400 bad request - 请求格式错误。
401 unauthorized - 未授权。
403 forbidden - 鉴权成功,但是该用户没有权限。
404 not found - 请求的资源不存在
405 method not allowed - 该http方法不被允许。
410 gone - 这个url对应的资源现在不可用。
415 unsupported media type - 请求类型错误。
422 unprocessable entity - 校验错误时用。
429 too many request - 请求过多。
追踪重定向(错误码为3开头)
r.history
超时时间
requests.get('http://github.com', timeout=0.001)