python调用api接口有几种方式

python

python调用api的几种方式:

1、urllib2

def run(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 "

Username:",username,"Password:",password,"----- Login successful!!!

"           

        print "Retrieved", fd.geturl()

        info = fd.info()

        for key, value in info.items():

            print "%s = %s" % (key, value)

        sys.exit(2)

     except (urllib2.HTTPError, httplib.BadStatusLine,socket.error), msg: 

        print "An error occurred:", msg

        pass

相关推荐:《Python教程》

2、urllib

def dorequest(url, data = "", method = 'GET'):

    try: 

        if method == 'GET':

            response = urllib.request.urlopen(url, timeout=10).read()

        else:

            # use PUT/DELETE/POST, data should be encoded in ascii/bytes 

            request = urllib.request.Request(url, data = data.encode('ascii'), method = method)

            response = urllib.request.urlopen(request, timeout=10).read()

    # etcd may return json result with response http error code

    # http error code will raise exception in urlopen

    # catch the HTTPError and get the json result

    except urllib.error.HTTPError as e:

        # e.fp must be read() in this except block.

        # the e will be deleted and e.fp will be closed after this block

        response = e.fp.read()

    # response is encoded in bytes. 

    # recoded in utf-8 and loaded in json

    result = json.loads(str(response, encoding='utf-8'))

    return result

# client to use etcd

# not all APIs are implemented below. just implement what we want

3、pycurl

def put (url, data, headers={}):

    """Make a PUT request to the url, using data in the message body,

    with the additional headers, if any"""

    reply = -1 # default, non-http response

    curl = pycurl.Curl()

    curl.setopt(pycurl.URL, url)

    if len(headers) > 0:

        curl.setopt(pycurl.HTTPHEADER, [k+': '+v for k,v in headers.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)

    except Exception:

        pass

    curl.close()

    return reply

4、requests

import requests

>>> 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, ...}

以上是 python调用api接口有几种方式 的全部内容, 来源链接: utcz.com/z/524603.html

回到顶部