#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()