python调用api接口有几种方式

Python (203) 2023-06-12 02:35:46

python调用api的几种方式:

1、urllib2

defrun(self):
username,password=getword()
try:
print"-"*12
print"User:",username,"Password:",password
req=urllib2.Request(sys.argv[1])
passman=urllib2.HTTPPasswordMgrWithDefaultRealm()
passman.add_password(None,sys.argv[1],username,password)
authhandler=urllib2.HTTPBasicAuthHandler(passman)
opener=urllib2.build_opener(authhandler)
fd=opener.open(req)
print"\t\n\nUsername:",username,"Password:",password,"-----Loginsuccessful!!!\n\n"
print"Retrieved",fd.geturl()
info=fd.info()
forkey,valueininfo.items():
print"%s=%s"%(key,value)
sys.exit(2)
except(urllib2.HTTPError,httplib.BadStatusLine,socket.error),msg:
print"Anerroroccurred:",msg
pass

相关推荐:《Python教程》

2、urllib

defdorequest(url,data="",method='GET'):
try:
ifmethod=='GET':
response=urllib.request.urlopen(url,timeout=10).read()
else:
#usePUT/DELETE/POST,datashouldbeencodedinascii/bytes
request=urllib.request.Request(url,data=data.encode('ascii'),method=method)
response=urllib.request.urlopen(request,timeout=10).read()
#etcdmayreturnjsonresultwithresponsehttperrorcode
#httperrorcodewillraiseexceptioninurlopen
#catchtheHTTPErrorandgetthejsonresult
excepturllib.error.HTTPErrorase:
#e.fpmustberead()inthisexceptblock.
#theewillbedeletedande.fpwillbeclosedafterthisblock
response=e.fp.read()
#responseisencodedinbytes.
#recodedinutf-8andloadedinjson
result=json.loads(str(response,encoding='utf-8'))
returnresult
#clienttouseetcd
#notallAPIsareimplementedbelow.justimplementwhatwewant

3、pycurl

defput(url,data,headers={}):
"""MakeaPUTrequesttotheurl,usingdatainthemessagebody,
withtheadditionalheaders,ifany"""
reply=-1#default,non-httpresponse
curl=pycurl.Curl()
curl.setopt(pycurl.URL,url)
iflen(headers)>0:
curl.setopt(pycurl.HTTPHEADER,[k+':'+vfork,vinheaders.items()])
curl.setopt(pycurl.PUT,1)
curl.setopt(pycurl.INFILESIZE,len(data))
databuffer=StringIO(data)
curl.setopt(pycurl.READFUNCTION,databuffer.read)
try:
curl.perform()
reply=curl.getinfo(pycurl.HTTP_CODE)
exceptException:
pass
curl.close()
returnreply

4、requests

importrequests
>>>r=requests.get('https://api.github.com/user',auth=('user','pass'))
>>>r.status_code
200
>>>r.headers['content-type']
'application/json;charset=utf8'
>>>r.encoding
'utf-8'
>>>r.text
u'{"type":"User"...'
>>>r.json()
{u'private_gists':419,u'total_private_repos':77,...}
THE END

发表回复