總結一下自己在用Python requests庫對jira進行的一個bug統計時,在登錄遇到的問題,以前也遇到過登錄302重定向的問題,那個時候用requests同樣的方法沒有獲取到cookie,但是jira可以用requests獲取到cookie,我也不知道怎么回事
網上百度了很多資料,好多都是用jira這個庫來來統計的,但是我想自己用Python來寫一下,以下做個記錄,
1,首先了解一下接口登錄大概的信息,看看jira登錄時抓包的情況,我用的是谷歌F12
login.jsp接口詳情如下,經試驗,登錄時不需要header,我們需要從響應回來的數據中取得Set-Cookie這個值,只需要JSESSIONID值,這個值與重定向后的cookie組合成一個新的cookie,后面做的操作就要使用這個新的cookie,因為登錄后是重定向,需要加allow_redirects=False,禁止重定向,這樣返回回來的就是302,否則就是200:
代碼如下:
url = "http://XXXXXXXXXX/jira/login.jsp"
payload = {"os_username": "*******",
"os_password": "**********",
"os_cookie": True,
"os_destination": "",
"user_role": "",
"atl_token": "",
"login": "登錄"}
re = requests.post(url, data=payload, allow_redirects=False)
cookieJsessionId = re.headers["Set-Cookie"].split(";")[0]
2.
重定向后的頁面繼續發請求,從響應的頭獲取Set-Cookie,只需要atlassian.xsrf.token值
代碼如下:
url1 = "http://solution.xxxxxx.mobi/jira/"
re1 = requests.get(url1)
cookie1 = re1.headers["Set-Cookie"].split(";")
cookieToken = cookie1[0].replace("lout", "lin")
3. 如下是查詢的接口:
可以看出這個查詢接口的cookie的JSESSIONID是由login.jsp這個接口返回,atlassian.xsrf.token是由jira/這個接口返回
構造查詢接口的的cookie:
cookieSearch = "jira.editor.user.mode=wysiwyg;" +cookieJsessionId + ";" + cookieToken
構造header,header里面這兩個是必填項,否則會400 和404錯誤
header1 = {"Cookie": cookieSearch,
"X-Atlassian-Token": "no-check"
}
發送請求
url2 = "http://solution.xxxxx.mobi/jira/rest/issueNav/1/issueTable"
data1 = {
"startIndex": 0,
"jql": "project = SMPT AND resolution = Unresolved AND creator in (currentUser()) ORDER BY priority DESC, updated DESC",
"layoutKey": "list-view"
}
re = requests.post(url2, data=data1, headers=header1)
print re.text
print re.status_code
以上親測有效,只是簡單寫了個線性腳本,后面需要重新封裝