Python 杂记: http request (以管理 Vultr 主机为例)
Posted itwhite
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Python 杂记: http request (以管理 Vultr 主机为例)相关的知识,希望对你有一定的参考价值。
简介
Python 标准库中提供了诸如 urllib.request、http.client 等模块用于发送 HTTP 请求,它们功能强大,但是使用起来并不简洁明了。
requests 是一个第三方模块,比 Python 标准库中提供的简单优雅多了,正如其介绍所说的是为人类而造的(讽刺标准库中的实现不够简单好用):
Requests is an elegant and simple HTTP library for Python, built for human beings.
本文主要介绍 requests 的常用方法,使用它之前需要安装该模块:
pip install requests
文档链接:
- Requests: HTTP for Humans
- urllib.request — Extensible library for opening URLs
- http.client — HTTP protocol client
Hello world!
最简单示例:
import requests
resp = requests.get('http://www.example.com/user')
resp = requests.post('http://www.example.com/user')
resp = requests.put('http://www.example.com/user/put')
resp = requests.delete('http://www.example.com/user/delete')
后面会以管理 Vultr 主机为例详细介绍 get()、post() 等方法。
Vultr API 简介
本文将通过使用 vultr.com 提供的 REST API 来管理 Vultr 云服务器为例来介绍 requests 的用法。
注:对本人来讲,购买 vultr.com 云主机器最划算的地方在于:它是按小时扣费的,所以可以同时创建多台主机用于测试,完了就把他们销毁,一台一小时只需要一美分,不到一毛钱人民币。
Vultr API 官方文档链接:https://www.vultr.com/api/。
使用 Vultr API 前需要到个人账户的 API 设置中去开启 API 功能,然后会生成一个 API Key 值会在后面用到,同时指定允许使用的 IP 地址(或者直接点击 Allow all IPv4)。
常用操作(请自行替换 YOURKEY 为你的 API Key 值):
查看当前你已经创建的云主机:
curl -H 'API-Key: YOURKEY' https://api.vultr.com/v1/server/list
创建一台云主机:
curl -H 'API-Key: YOURKEY' https://api.vultr.com/v1/server/create --data 'DCID=2' --data 'VPSPLANID=201' --data 'OSID=167'
其中:
- DCID=2 表示选择主机地址位于 Chicago (芝加哥),更多可用地址可通过“https://api.vultr.com/v1/regions/list”查询;
- OSID=167 表示选择 CentOS 7 x86_64 系统,更多系统可通过“https://api.vultr.com/v1/os/list”查询;
- VPSPLANID=201 表示选择“25GB硬盘、1核CPU、1GB内存”的那个套餐(5美元一个月,不到一美分一个小时,用多久扣多久,用完销毁主机停止扣费),更多套餐可通过“https://api.vultr.com/v1/plans/list_vc2”查询。
执行后会返回一个 SUBID,用于唯一标识刚刚创建的主机。
销毁一台主机
curl -H 'API-Key: YOURKEY' https://api.vultr.com/v1/server/destroy --data 'SUBID=xxxxxx'
请自行将 xxxxxx 替换为已创建主机的 SUBID 值。
GET
示例:
import requests, json
def list_vps(subid=None):
url = "https://api.vultr.com/v1/server/list"
headers = {
"API-Key": "YOURKEY"
}
data = {}
if subid:
data["SUBID"] = subid
resp = requests.get(url, headers=headers, data=data)
if resp.status_code != requests.codes.ok:
resp.raise_for_status()
vps = resp.json()
print_log("Found %d VPS" % len(vps))
print_log(resp.text)
return vps
POST
示例:
import requests, json
def create_vps():
url = "https://api.vultr.com/v1/server/create"
headers = {
"API-Key": "YOURKEY"
}
data = {
"DCID": 2,
"VPSPLANID": 201,
"OSID": 167,
"SCRIPTID": 711079 # 这个指定主机启动时自动执行的脚本,没有可以不指定
}
print_log("Creating a new VPS: " + json.dumps(data, indent=4))
resp = requests.post(url, headers=headers, data=data)
if resp.status_code != requests.codes.ok:
print_log(json.dumps(resp.__dict__, indent=4))
resp.raise_for_status()
print_log("Created VPS:
" + json.dumps(resp.json(), indent=4))
return resp.json()["SUBID"]
其中用到的 SCRIPTID 前面没有将结果,Vultr 允许用户自己创建启动脚本(Startup script),这样主机第一次启动时会自动执行,下面给个示例:
def create_startup_script():
url = "https://api.vultr.com/v1/startupscript/create"
headers = {
"API-Key": "YOURKEY"
}
data = {
"name": "my startup script",
"script": r"""#!/bin/bash
# do something here
echo "Done!"
"""
}
print_log("Creating a startup script:
" + data["script"])
resp = requests.post(url, headers=headers, data=data)
if resp.status_code != requests.codes.ok:
print_log(json.dumps(resp.__dict__, indent=4))
resp.raise_for_status()
scriptid = resp.json()["SCRIPTID"]
print_log("Created SCRIPTID: %d" % scriptid)
return scriptid
完。
以上是关于Python 杂记: http request (以管理 Vultr 主机为例)的主要内容,如果未能解决你的问题,请参考以下文章