相信作過自動化運維的同窗都用過REST API接口來完成某些動做。API是一套成熟系統所必需的接口,能夠被其餘系統或腳原本調用,這也是自動化運維的必修課。python
本文主要介紹python中調用REST API的幾種方式,下面是python中會用到的庫。git
- urllib2github
- httplib2json
- pycurlbootstrap
- requests api
urllib2bash
- Sample1app
import urllib2, urllib github_url = 'https://api.github.com/user/repos' password_manager = urllib2.HTTPPasswordMgrWithDefaultRealm() password_manager.add_password(None, github_url, 'user', '***') auth = urllib2.HTTPBasicAuthHandler(password_manager) # create an authentication handler opener = urllib2.build_opener(auth) # create an opener with the authentication handler urllib2.install_opener(opener) # install the opener... request = urllib2.Request(github_url, urllib.urlencode({'name':'Test repo', 'description': 'Some test repository'})) # Manual encoding required handler = urllib2.urlopen(request) print handler.read()
- Sample2運維
import urllib2 url = 'http://ems.vip.ebay.com/removeSIforcloud.cgi?ip=' + ip req = urllib2.Request(url) req.add_header('IAF',abc.token_authiaas) try: resp = urllib2.urlopen(req) except urllib2.HTTPError, error: print "Cannot remove service instance!", error sys.exit(1) response = resp.read() print response
- Sample3curl
import urllib2, urllib, base64 url = "https://reparo.stratus.ebay.com/reparo/bootstrap/registerasset/" + rackid + "/" + asset data = urllib.urlencode({ 'reservedResource':'RR-Hadoop', 'resourceCapability':'Production', 'movetoironic':'False', 'output':'json' }) print "Bootstrap Asset jobs starting .............." base64string = base64.encodestring('%s:%s' % (user, passwd)).replace('\n', '') request = urllib2.Request(url, data, headers={"Authorization" : "Basic %s" % base64string}) response = urllib2.urlopen(request).read() response_json = json.loads(response) response_status = response_json['status'] status_code = response_status['statusCode'] status = response_status['status'] message = response_status['message'] print status_code , status, message
2. httplib2
import urllib, httplib2 github_url = ' h = httplib2.Http(".cache") h.add_credentials("user", "******", " data = urllib.urlencode({"name":"test"}) resp, content = h.request(github_url, "POST", data) print content
3. pycurl
import pycurl, json github_url = " user_pwd = "user:*****" data = json.dumps({"name": "test_repo", "description": "Some test repo"}) c = pycurl.Curl() c.setopt(pycurl.URL, github_url) c.setopt(pycurl.USERPWD, user_pwd) c.setopt(pycurl.POST, 1) c.setopt(pycurl.POSTFIELDS, data) c.perform()
4. requests
import requests, json github_url = " data = json.dumps({'name':'test', 'description':'some test repo'}) r = requests.post(github_url, data, auth=('user', '*****')) print r.json
以上幾種方式均可以調用API來執行動做,但requests這種方式代碼最簡潔,最清晰,建議採用。
推薦一個很是好的關於容器技術的公衆號,有興趣的能夠關注!