Python入門:模擬登入(二)或註冊之requests處理帶token請求
阿新 • • 發佈:2019-01-07
首先說一下使用python模擬登入或註冊時,對於帶token的頁面怎麼登入註冊模擬的思路:
1、對於帶token的頁面,需要先從最開始的頁面獲取合法token
2、然後使用獲取到的合法token進行後續操作
3、token一般儲存的地方有兩個:
【一種是攜帶在cookie中】、【一種是在respose(頁面返回)的隱藏表單中】,獲取思路類似
釋:header是針對服務端有各種限制或特定需求時使用的,一般伺服器會進行類似如:X-Requested-With、Content-Length、User-Agent等的驗證,所以需要將其以字典的形勢傳送給伺服器
#reg.py
'''
此程式碼只實現了註冊的第一步【手機發送驗證碼】,主要解決的獲取token
具體操作有:獲取頁面第一次請求時的重要資訊,如:cookie與token
'''
import requests
#拼接url
host = "http://10.70.18.33:8083/"
url1 = host + "shopxx-mobile/register.jhtml"
#初始化url請求物件
r = requests.get(url1)
#獲取url請求物件中的有用資訊,如token、cookies
token = r.cookies.items()[0][1]
cookies = r.cookies
#以下為測試,所獲取的token及cookie的格式
print(type(token))
print(token)
print(cookies)
print(r.headers)
print(r.url)
#手機號碼傳送驗證碼的url拼接
url2 = host + "shopxx-mobile/register/send.jhtml"
#拼接header中的重要資料,如:token、cookie、User-Agent、Content-Length、X-Requested-With等,其中除token及cookie是通過上面的程式碼獲取到的之外,其它的均可以通過firefox瀏覽器進行獲取
headers = {
"token": token,
"Host": "10.70.18.33:8083",
"User-Agent":" Mozilla/5.0 (Macintosh; Intel Mac OS X 10.11; rv:46.0) Gecko/20100101 Firefox/46.0" ,
"Accept": "application/json, text/javascript, */*; q=0.01",
"Accept-Language":"zh-CN,zh;q=0.8,en-US;q=0.5,en;q=0.3",
"Accept-Encoding": "gzip, deflate",
"Content-Type":"application/x-www-form-urlencoded; charset=UTF-8",
"X-Requested-With": "XMLHttpRequest",
"Connection":"keep-alive",
"Content-Length": "18",
"charset":"UTF-8",
"cookie":"token=" + token
}
#一般登入註冊頁面均是post方式進行提交的,需要將post需要提交的資料(此處為需要傳送驗證碼的手機號碼)進行組裝
data = {'mobile':'1851174****'}
#初始化post請求物件(需要傳入url、提交的資料、header)
s = requests.post(url2,data,headers=headers)
#列印返回結果
print(s)
print(s.status_code,s.text)
執行結果
/Users/frankslg/PycharmProjects/cjb/mobile/regist.py
<class 'str'>
7c74a4cce353aec3133005feb40a9f39
<RequestsCookieJar[<Cookie token=7c74a4cce353aec3133005feb40a9f39 for 10.70.18.33/>]>
{'Date': 'Mon, 04 Jul 2016 08:53:30 GMT', 'Set-Cookie': 'token=7c74a4cce353aec3133005feb40a9f39; Path=/', 'Server': 'Apache-Coyote/1.1', 'Content-Type': 'text/html;charset=UTF-8', 'Content-Language': 'zh-CN', 'Transfer-Encoding': 'chunked'}
http://10.70.18.33:8083/shopxx-mobile/register.jhtml
<Response [200]>
200 {"type":"success","content":"恭喜您,賬號註冊成功!"}
函式封裝
import requests
def reg():
host = "http://10.70.18.33:8083/"
url1 = host + "shopxx-mobile/register.jhtml"
r = requests.get(url1)
token = r.cookies.items()[0][1]
url2 = host + "shopxx-mobile/register/send.jhtml"
headers = {
"token": token,
"Host": "10.70.18.33:8083",
"User-Agent":" Mozilla/5.0 (Macintosh; Intel Mac OS X 10.11; rv:46.0) Gecko/20100101 Firefox/46.0",
"Accept": "application/json, text/javascript, */*; q=0.01",
"Accept-Language":"zh-CN,zh;q=0.8,en-US;q=0.5,en;q=0.3",
"Accept-Encoding": "gzip, deflate",
"Content-Type":"application/x-www-form-urlencoded; charset=UTF-8",
"X-Requested-With": "XMLHttpRequest",
"Connection":"keep-alive",
"Content-Length": "18",
"charset":"UTF-8",
"cookie":"token=" + token
}
data = {'mobile':'1851174****'}
s = requests.post(url2,data,headers=headers)
print(s.status_code,s.text)
if __name__ == '__main__':
reg()