本文主要介紹python中調用REST API的幾種方式,下面是python中會用到的庫。python
- urllib2git
- httplib2github
- pycurljson
- requests bootstrap
urllib2api
- Sample1bash
1
2
3
4
5
6
7
8
9
10
|
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
()
|
- Sample2app
1
2
3
4
5
6
7
8
9
10
11
|
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
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
|
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. httplib2ide
1
2
3
4
5
6
7
|
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
1
2
3
4
5
6
7
8
9
10
|
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
1
2
3
4
5
|
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這種方式代碼最簡潔,最清晰,建議採用。
轉自: https://blog.51cto.com/haohaozhang/1668761