這里為什么會想到這個問題呢?
1.我們在對一個商品下訂單之前需要2個步驟,1---登錄,2---加入購物車
2.那么我們到底是用哪一個cookie呢?實際測試的時候,
a.發現只用了登錄cookie,提示沒有找到商品
b.只用了加入購物車的cookie,提示沒有登錄(登錄超時或其他)
所以這就需要加入2個cookie了。怎么才能同時加2個cookie,這里就考慮到了cookie的合並
我們以動物園為例:
url = 'https://www.shwzoo.com/tools/submit_ajax.ashx'
登錄參數: params = {"action":"user_login"}
加入購物車參數:params_buy = {"action":"cart_goods_buy"}
下訂單參數:params_order = {"action":"order_save"}
默認headers:headers = { 'content-type': "multipart/form-data; boundary=----WebKitFormBoundary7MA4YWxkTrZu0gW" }
登錄需要data:payload = "------WebKitFormBoundary7MA4YWxkTrZu0gW\r\nContent-Disposition: form-data; name=\"txtUserName\"\r\n\r\n賬號\r\n------WebKitFormBoundary7MA4YWxkTrZu0gW\r\nContent-Disposition: form-data; name=\"txtPassword\"\r\n\r\n密碼\r\n------WebKitFormBoundary7MA4YWxkTrZu0gW--"
首先我們獲取登錄cookies:
#登錄 res = requests.post(url,headers=accept,data=payload,params=params) cookies = dict(res.cookies) #登錄cookies
然后我們獲取加入購物車cookies:
#加入購物車 res_buy = requests.post(url=url,params=params_buy,data=data_buy,cookies=cookies) cookies_buy = dict(res_buy.cookies) #購買cookies
合並cookie:
cookies_all = dict(cookies,**cookies_buy) #下訂單時,需要所有的cookie,不然你怎么知道有沒有登錄,有沒有加入購物車 #這里發現cookie的用法和dict很類似所有用了這種辦法
然后我們下訂單就可以成功了:
#下訂單 res_order = requests.post(url=url,params=params_order,data=data_order,cookies=cookies_all) print(res_order.text)
返回res.text: {"status":1, "url":"/payment.aspx?order_no=B19021818004848578304", "msg":"恭喜您,訂單已成功提交!"}