從這里我們也可以看出提交參數(shù)中的“authenticity_token”,而這個參數(shù)就是需要我們從登陸頁面先獲取到。
當(dāng)我們登錄成功后:
再次訪問github,這個時候cookie里就增加了兩個cookie信息,而這個信息是登錄后在增加的信息
所以如果我們想要通過程序登錄,我們就需要在登錄成功后再次獲取cookie信息
然后通過這個cookie去訪問我們github的其他信息例如我們的個人信息設(shè)置頁面:
https://github.com/settings/profile
代碼實現(xiàn)
下面代碼實現(xiàn)了登錄并訪問https://github.com/settings/repositories
import requests
from bs4 import BeautifulSoup
Base_URL = "https://github.com/login"
Login_URL = "https://github.com/session"
def get_github_html(url):
'''
這里用于獲取登錄頁的html,以及cookie
:param url: https://github.com/login
:return: 登錄頁面的HTML,以及第一次的cooke
'''
response = requests.get(url)
first_cookie = response.cookies.get_dict()
return response.text,first_cookie
def get_token(html):
'''
處理登錄后頁面的html
:param html:
:return: 獲取csrftoken
'''
soup = BeautifulSoup(html,'lxml')
res = soup.find("input",attrs={"name":"authenticity_token"})
token = res["value"]
return token
def gihub_login(url,token,cookie):
'''
這個是用于登錄
:param url: https://github.com/session
:param token: csrftoken
:param cookie: 第一次登錄時候的cookie
:return: 返回第一次和第二次合并后的cooke
'''
data= {
"commit": "Sign in",
"utf8":"?",
"authenticity_token":token,
"login":"你的github賬號",
"password":"*****"
}
response = requests.post(url,data=data,cookies=cookie)
print(response.status_code)
cookie = response.cookies.get_dict()
#這里注釋的解釋一下,是因為之前github是通過將兩次的cookie進(jìn)行合并的
#現(xiàn)在不用了可以直接獲取就行
# cookie.update(second_cookie)
return cookie
if __name__ == '__main__':
html,cookie = get_github_html(Base_URL)
token = get_token(html)
cookie = gihub_login(Login_URL,token,cookie)
response = requests.get("https://github.com/settings/repositories",cookies=cookie)
print(response.text)
第二種情況
這里通過伯樂在線為例子,這個相對于第一種就比較簡單了,沒有太多的分析過程直接發(fā)送post請求,然后獲取cookie,通過cookie去訪問其他頁面,下面直接是代碼實現(xiàn)例子:
http://www./bookmark/ 這個地址是只有登錄之后才能訪問的頁面,否則會直接返回登錄頁面
這里說一下:http://www./wp-admin/admin-ajax.php是登錄的請求地址這個可以在抓包里可以看到
import requests
def login():
url = "http://www./wp-admin/admin-ajax.php"
data = {
"action": "user_login",
"user_login":"zhaofan1015",
"user_pass": '******',
}
response = requests.post(url,data)
cookie = response.cookies.get_dict()
print(cookie)
url2 ="http://www./bookmark/"
response2 = requests.get(url2,cookies=cookie)
print(response2.text)
login()