資料採集之登入那些事
一、前言
最近筆者正在研究資料採集,大家知道部分**是不對外公開的,需要你登入之後才能正常瀏覽,也就是所謂的[憑證]。
簡單粗暴的想法就是,在該**註冊個賬號,登入後記錄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...
資料增強那些事雜談
進行資料增強的必要性 通過增強資料集,可以防止神經網路學習到不相關的模式,根本上提公升整體效能。某種程度上,深度學習的訓練過程,就是生成乙個從輸入到輸出的對映關係。而深度學習生成的這種對映,會含有大量的引數,當前主流的模型含有幾十萬到幾百萬個引數,而訓練過程,就是不斷修正這些引數的過程。在這個過程中...