今天有個需求需要通過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文件後,腳本就可以清理掉了
get方法
# -*- 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()
post方法
# -*- coding: utf-8 -*- # !/usr/bin/python import cookielib import urllib2 import urllib 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) formdata={"user":"test"} #post數據 data_encoded = urllib.urlencode(formdata) response=urllib2.urlopen(req,data_encoded) print response.read()