Python 杂记: http request (以管理 Vultr 主机为例)

laohyx 2020-03-01

简介

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

文档链接:

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 值):

  1. 查看当前你已经创建的云主机:

    curl -H 'API-Key: YOURKEY' https://api.vultr.com/v1/server/list
  2. 创建一台云主机:

    curl -H 'API-Key: YOURKEY' https://api.vultr.com/v1/server/create --data 'DCID=2' --data 'VPSPLANID=201' --data 'OSID=167'

    其中:

    执行后会返回一个 SUBID,用于唯一标识刚刚创建的主机。

  3. 销毁一台主机

    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:\n" + 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:\n" + 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

完。

相关推荐