緣起 這陣子利用 Rust 開發了一個爬蟲程式,上網抓取一些網路資料,無意間發現對方的系統竟然會記錄且驗證 Session ID。在架構微服務化、API 無狀態化的風潮下,這樣的實作方式已經很少看到了(至少在我寫爬蟲、撈資料的這近十年間)。為了解決這個問題,我重啟了我對 Cookies 塵封已久的記憶,尋找處理 Session ID 對應的解決方案。 在Rust語言裡有許多 HTTP/HTTPS Client 的 Crate, reqwest [1][ 2 ] 應該是比較常見的一個套件。它是一個基於 hyper [3][ 4 ] Crate 的高階封裝實作,簡化了 Rust 在 HTTP/HTTPS 上的操作。同時,它支援了各種常見的 HTTP 方法(GET、POST、PUT、DELETE等)、使用者定義的標頭、Query String、POST Form 及 JSON Body 等操作,以及對應的 Response 處理。 看似功能完整、內容豐富的 reqwest Crate,在原生的功能實作中,竟然沒有 Cookies 操作的對應模組及功能?!這當下可讓我吃驚了,怎麼會這樣?提供 Cookies 的操作,這不是一個 HTTP/HTTPS Client 所應該具備的標配功能嗎?難道說真的是太少人使用,所以乾脆就不提供了? 面對這樣的狀況,那可真是令人苦惱啊!我可不想為了這件事,還要自已刻一個 Cookies 的操作處理器。 本文開始 關於這個問題,我在網路上花了不少的時間做了研究。其實要處理 Cookies 不外乎有兩個途徑,第一是使用者自己客製化、以手動的方式處理;顯然這個對我們來說,並不是一個最好的選項(尤其對於一個「站在巨人的肩膀上 [ 5 ][6] 」哲學信仰者的我來說…);第二種方法則是尋找是否有現成的套件可以使用,以有效縮短我們的開發時間。我相信這個應該會是大部分開發者所傾向使用的一種開發方式。 雖然在 reqwest 的套件裡,並沒有直接支援 Cookies 的操作功能,但是它還是為這個部分保留了一些彈性的空間。在 reqwest 裡頭宣告了幾個與 Cookie 操作相關的 Trait,例如 C...