今天有个需求需要通过cookie访问内部cmdb,获取机器等信息。上网搜罗了一下用法。记录一下
带密码直接访问的
# -*- coding: utf-8 -*- # !/usr/bin/python import urllib2 import urllib import cookielib import re auth_url = ‘http://a.test.com/user/login‘ home_url = ‘http://a.test.com/cmdb/hosts/‘; # 登陆用户名和密码 data={ "username":"aaa", "password":"bbb" } # urllib进行编码 post_data=urllib.urlencode(data) # 发送头信息 headers ={ "Host":"a.test.com", "Referer": "http://a.test.com" } # 初始化一个CookieJar来处理Cookie cookieJar=cookielib.CookieJar() # 实例化一个全局opener opener=urllib2.build_opener(urllib2.HTTPCookieProcessor(cookieJar)) # 获取cookie req=urllib2.Request(auth_url,post_data,headers) result = opener.open(req) # 访问主页 自动带着cookie信息 iresult = opener.open(home_url) # 显示结果 print iresult.read()
由于没有特定的账号来读取,只能使用自己的个人账号。所以不想一直把密码写在文件里。就准备生产一个cookie文件,后面全用这个cookie文件进行访问
先生产cookie文件
# -*- coding: utf-8 -*- # !/usr/bin/python import urllib2 import urllib import cookielib import re auth_url = ‘http://a.test.com/user/login‘ # 登陆用户名和密码 data={ "username":"aaa", "password":"bbb" } # urllib进行编码 post_data=urllib.urlencode(data) # 发送头信息 headers ={ "Host":"a.test.com", "Referer": "http://a.test.com" } # 初始化一个CookieJar来处理Cookie cookieJar=cookielib.CookieJar() # 实例化一个全局opener opener=urllib2.build_opener(urllib2.HTTPCookieProcessor(cookieJar)) req = urllib2.Request(auth_url, post_data, headers) req.add_header(‘User-Agent‘, ‘Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)‘) filename = ‘cookie.txt‘ ckjar = cookielib.MozillaCookieJar(filename) ckproc = urllib2.HTTPCookieProcessor(ckjar) opener = urllib2.build_opener(ckproc) f = opener.open(req) htm = f.read() f.close() ckjar.save(ignore_discard=True, ignore_expires=True)
第二步,通过这个cookie文件访问,第一步生产完cookie文件后,脚本就可以清理掉了
# -*- coding: utf-8 -*- # !/usr/bin/python import cookielib import urllib2 import sys reload(sys) sys.setdefaultencoding(‘utf-8‘) cookie=cookielib.MozillaCookieJar() cookie.load(‘cookie.txt‘,ignore_expires=True,ignore_discard=True) req=urllib2.Request(‘http://a.test.com/cmdb/hosts/ ‘) opener=urllib2.build_opener(urllib2.HTTPCookieProcessor(cookie)) urllib2.install_opener(opener) response=urllib2.urlopen(req) print response.read()
时间: 2024-10-10 11:56:09