日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 前端技术 > HTML >内容正文

HTML

fetch 自动加cookie_如何在shell中动态获取chrome浏览器的cookie信息

發布時間:2025/3/20 HTML 18 豆豆
生活随笔 收集整理的這篇文章主要介紹了 fetch 自动加cookie_如何在shell中动态获取chrome浏览器的cookie信息 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

0. 背景

在工作的時候,經常要接觸一些辦公系統,在網頁上通過機械化的操作,來完成一個簡單的功能,比如某臺主機權限的申請,通過一套操作一下,大概7、8個步驟,花費30秒的時間,雖然不長,但是要脫離終端,到瀏覽器去操作,打斷了心流,就感覺很煩人了。
我們在網頁的操作,其實就是往這個網站的后臺發起一個API請求,這個動作,我們在終端里面,通過curl命令也能完成,比如我們打開百度的首頁,通過chrome的控制臺 -> Network -> 找到對應的請示,右鍵,Copy -> Copy as cURL,我們就能得到如下的一條命令:

curl 'https://www.baidu.com/' -H 'Connection: keep-alive' -H 'Cache-Control: max-age=0' -H 'Upgrade-Insecure-Requests: 1' -H 'User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/77.0.3865.90 Safari/537.36' -H 'Sec-Fetch-Mode: navigate' -H 'Sec-Fetch-User: ?1' -H 'Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3' -H 'Sec-Fetch-Site: none' -H 'Accept-Encoding: gzip, deflate, br' -H 'Accept-Language: zh-CN,zh;q=0.9,en;q=0.8' -H 'Cookie: BIDUPSID=A10629EBE8B29EBEE170B7E4E405; PSTM=1520729161; BDUSS=pMV2FGNlNaUUdB134asdfCOVU5cHFCR0p2SzBtY0Q2OWlNZlhORHdhN1ZjQVFBQUFBJCQAAAAAABBBBBGHAAaG9tZXdheQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPDejVzw3o1cck; ' --compressed

在終端執行這條命令,和你瀏覽器發起的這個請求,其實是等同的,但是這里面,有一個最重要的參數,就是你的Cookie信息,這個信息可以代表你當前在這個網站上的登錄用戶,如果我們要寫一些自動化的網站操作腳本,或者寫爬蟲什么的,第一步就是怎么拿到cookie信息。

1. 獲取chrome瀏覽器里的cookie

cookie信息,肯定是存儲在chrome中,具體的存儲位置未知,并且對于這么隱私的數據,應該也是會進行加密存儲的,因此,我并沒有去嘗試通過讀取cookie文件的方式。

想起之前用過一個模擬發請求的chrome插件,postman,通過安裝Postman Interceptor攔截器,可以讓我們在postman里模擬發請求的時候,自動帶上網站的cookie信息,但是查閱了postman的相關資料,也沒有開放接口讓我們在其它地方可以拿到cookie信息。

1.1 通過chrome插件獲取cookie數據

既然在瀏覽器插件里能拿到cookie,那么我們自己實現一個不就行了嗎,拿到數據之后,再想辦法把數據傳出來就可以了。參考chrome api文檔,我們可以通過添加一個cookies的監聽器,來拿到變化的cookie,以及拿到某個domain域下的所有cookie,但是chrome也是運行在瀏覽器環境之上,無法直接往本地存儲寫數據,只能通過對外發起ajax請求來把數據傳出去了。核心代碼如下:

function refreshDomain(domain) {chrome.cookies.getAll({domain: domain}, function (cookies) {// 這里就能拿到這個域下所有cookie了let all_cookies = cookies.filter(item => item.domain === domain).map(item => item.name + "=" + item.value).join("; ");console.log("Report Cookie:domain=" + domain + ",cookies=" + all_cookies);$.ajax({//這里需要一個http服務來接收數據url: "http://localhost:8888",method: "POST",data: {domain: domain,cookies: all_cookies},dataType: "json",success: function(data) { console.log("Report success:" + data) },failure: function (data) {console.log("Report failure:" + data)}})}); }chrome.cookies.onChanged.addListener(function (event) {const cookie = event.cookie;refreshDomain(cookie.domain); });

1.2 接收數據并存儲

這里還需要實現一個http服務來接收插件發出來的cookie數據,這里我用spring boot初始化出來一個spring mvc的工程,再添加兩個api,一個用于接收cookie并存儲,一個用于對外再接供獲取cookie信息的接口。代碼如下:

@SpringBootApplication @EnableWebMvc @Controller public class CookieManager {private static Map<String, String> domainCookies = new HashMap<>(1024);@RequestMapping(value = "/", method = RequestMethod.GET)@ResponseBodypublic String getCookie(@RequestParam("domain") String domain) {return domainCookies.entrySet().stream().filter(e -> domain.endsWith(e.getKey())).map(Entry::getValue).collect(Collectors.joining("; "));}@RequestMapping(value = "/", method = RequestMethod.POST)@ResponseBodypublic String setCookie(@RequestParam("domain") String domain,@RequestParam("cookies") String cookies) throws IOException {domainCookies.put(domain, cookies);return domain;}public static void main(String[] args) {SpringApplication.run(CookieManager.class, args);} }

這里在獲取cookie的時候做了一個處理,自動把父域的cookie帶上。比如獲取domain=http://www.baidu.com的cookie,會把domain=.http://baidu.com的數據也返回

1.3 在shell中的用法

COOKIE=$(wget localhost:8888/?domain=www.baidu.com -q -O -) echo $COOKIEcurl 'https://www.baidu.com/' -H "Cookie: $COOKIE"

注意這里"Cookie: $COOKIE"必須是雙引號,不能用單引號。

特別注意

cookie信息是一個非常隱私和重要的數據,雖然通過這個方法,能夠將瀏覽器里面這個數據導出來,但對于這個數據,是需要特別小心保存的,cookie信息如果被別人拿到,相當于別人可以用你的身份做任何事情,這是非常危險的。因此本文只是作為一個例子,沒有做任何加密,但在實際應用中,最好都做加密傳輸。

參考文檔

  • Postman: https://www.getpostman.com/
  • Chrome api:https://developer.chrome.com/apps/api_index
  • 本文代碼:https://github.com/homeway88/halo_blog/tree/master/2019-10-07-cookie-manager

總結

以上是生活随笔為你收集整理的fetch 自动加cookie_如何在shell中动态获取chrome浏览器的cookie信息的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。