urllib2与cookielib实现获取接口数据

#1.用户名/密码登陆,并返回opener与 cookies

#输入:登陆接口url,登陆用户名/密码(字典格式)

#输出:urllib2.build_opener,cookielib.CookieJa

def get_cookies(url,data):

    #创建cookieJar实例对象

    cookieJar = cookielib.CookieJar()

    #创建管理器

    cookie_handler = urllib2.HTTPCookieProcessor(cookieJar)

    http_handler = urllib2.HTTPHandler()

    https_hander = urllib2.HTTPSHandler()

    #创建请求管理器

    opener = urllib2.build_opener(cookie_handler,http_handler,https_hander)

    #发起请求

    post_data = urllib.urlencode(data)

    req = urllib2.Request(url,post_data)

    try:

        response = opener.open(req)

        #判断是否请求成功,返回cookies

        if(response.code==200 or onse.msg=='ok'):

            print u'登录成功!'

        else:

            print u'登录失败!'

        return opener,cookieJar

    except Exception,e:

        print e


#2.从cookies中获取特定值

#原因:cookiesJar手工维护比较麻烦。cookiesJar内存储的是cookies类型的数据。不能用维护字典的方式进行维护。

#手动维护cookiesJar 参考https://www.jianshu.com/p/78cf26ab07e1

#可以输出cookies查看里面的结构。

def get_cookies_value(cookies,item_name):

    item_value = ''

    for item in cookies:

        if item.name == item_name:

            item_value = item.value

    if item_value != '':

        return item_value

    else:

        print item_name + ' 不存在!'


#3.通过urllib.urlencode拼接url

#主要用于URL编码转换,从而被服务器接受

def get_api_url(base_url,api_url,data):

    post_data = urllib.urlencode(data)

    url = base_url + api_url +'?'+post_data

    return url


#4.主程序

#4.1.通过用户名密码获取opener与cookies

login_url = u'http://127.0.0.1:5432/v2/user/login'

login_data ={

    'user_slug' : '000001',

    'password' : u'adada'

}

opener,cookies = get_cookies(login_url,login_data)

#2.输入API参数,获取完整api_url地址

api_get_log_data={

    'category':'0',

    'offset':'0',

    'limit':'50',

    #'_':'1559550060965',

    'account_id':'1',

    'uid':'124',

    'S':''

}

#api_url中有需要从cookies中动态获取的内容,进行动态拼接

api_get_log_data['S'] = get_cookies_value(cookies,'S')

base_url = u'http://127.0.0。1.150:5432'

api_get_log = u'/v2/log/get'

api_url = get_api_url(base_url,api_get_log,api_get_log_data)

#示例API URL

#url2 = u'http://127.0.0.1:5432/v2/log/get?&category=0&offset=0&limit=50&_=1559550060965&account_id=1&uid=124&S=ECF0D54B'

print api_url

#3.获取数据

result = opener.open(api_url)

print result.read()

你可能感兴趣的:(urllib2与cookielib实现获取接口数据)