資料採集之登入那些事

2022-01-16 06:52:55 字數 2388 閱讀 8415

資料採集之登入那些事

一、前言

最近筆者正在研究資料採集,大家知道部分**是不對外公開的,需要你登入之後才能正常瀏覽,也就是所謂的[憑證]。

簡單粗暴的想法就是,在該**註冊個賬號,登入後記錄cookie資訊,並將已登入的

cookie

資訊持久化到檔案、資料庫,以便在採集資料時可以將

cookie

資訊還原成**登入的狀態;

採集的流程大約是:1.獲取

cookie;2.

將cookie

轉化為cookiecontainer;3.

將cookiecontainer

序列化並持久化;

4.將持久化的

cookiecontainer

反序列化;

5、模擬登入資訊去採集資料;

二、string與

byte

互轉出錯

在反序列化將memorystream轉化為

cookiecontainer

時出錯:

system.outofmemoryexception」的異常。

**大約如下:

memorystream memorystream = new memorystream();

binaryformatter formatter = new binaryformatter();

formatter.serialize(memorystream, mycookiecontainer);

byte bytes = memorystream.toarray();

string serializecookie = encoding.default.getstring(bytes);

//...儲存到資料庫或檔案

memorystream deserializems = new memorystream(encoding.default.getbytes(serializecookie));

cookiecontainer decookie = (cookiecontainer)formatter.deserialize(deserializems);

在反序列化時就報了「outofmemoryexception

」異常了。

三、什麼會出現outofmemoryexception?

經過一番的研究,發現在string型別與

byte

型別轉換之間出現問題,主要體現在原

byte

資料的長度與轉成

string

再生成byte

的不一致,即以下轉換存在問題:

byte bytes = memorystream.toarray();

string serializecookie = encoding.default.getstring(bytes);

encoding.default.getbytes(serializecookie);

為什麼會出現轉換後不一致的情況?

答:這主要是資料、檔案資料或序列化後的二進位制資料,這些是不遵循任何語言的編碼規則,在轉換過程中會丟棄一些不符合編碼的資料,所以無論是用gb2312、

uft8

或其它編碼轉換後都會出現問題。

四、解決方案

綜上所述,如果有將、檔案等二進位制資料儲存到資料庫,建議使用byte型別進行儲存,對應的資料庫型別為

varbinary(max)

;但,你要是想將其儲存為string型別則需要將

byte

以base64

進行轉換,具體**如下:

//將byte

轉為string

string str = convert.tobase64string(bytes);

//將string

轉為byte

byte transferbytes = convert.frombase64string(str);

五、延展話題-哪些場景還會用到

base64

base64

字串;2、在h5

或開發中,需要上傳、拍照等並上傳到伺服器中,一般也是將其轉換成

base64

;3、模板登入,使用

cookie

轉換成base64

字串;

餐館那些事之 Mediator Pattern

1.概述 mediator pattern 封裝了 一組物件之間的互動,使得物件之間保持松耦合的關係,避免物件維護複雜的關係互動。簡單的說,mediator封裝的是互動。類圖 object例項之間的互動,統一由mediator維護。2.例項 餐館有cook和waiter,cook之間需要彼此交流配合...

前端那些事之 jQuery

1.jquery是什麼 乙個js的框架,可以方便的使用js 2 什麼是jquery物件 是由jquery封裝後的dom物件 注意 與dom物件的方法不同,不可以混用,但是可以相互轉換 3.基本語法 jquery物件.方法 4.得到jquery物件 1 選擇器 基本選擇器 id class eleme...

資料增強那些事雜談

進行資料增強的必要性 通過增強資料集,可以防止神經網路學習到不相關的模式,根本上提公升整體效能。某種程度上,深度學習的訓練過程,就是生成乙個從輸入到輸出的對映關係。而深度學習生成的這種對映,會含有大量的引數,當前主流的模型含有幾十萬到幾百萬個引數,而訓練過程,就是不斷修正這些引數的過程。在這個過程中...