1. 程式人生 > >Python requests jira登入302重定向

Python requests jira登入302重定向

總結一下自己在用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

以上親測有效,只是簡單寫了個線性指令碼,後面需要重新封裝