惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

The Last Watchdog
The Last Watchdog
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
GbyAI
GbyAI
Y
Y Combinator Blog
CTFtime.org: upcoming CTF events
CTFtime.org: upcoming CTF events
The GitHub Blog
The GitHub Blog
博客园_首页
小众软件
小众软件
I
InfoQ
J
Java Code Geeks
月光博客
月光博客
S
Secure Thoughts
Microsoft Security Blog
Microsoft Security Blog
V
Visual Studio Blog
Hacker News - Newest:
Hacker News - Newest: "LLM"
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
Stack Overflow Blog
Stack Overflow Blog
cs.CV updates on arXiv.org
cs.CV updates on arXiv.org
N
News and Events Feed by Topic
Exploit-DB.com RSS Feed
Exploit-DB.com RSS Feed
Threat Intelligence Blog | Flashpoint
Threat Intelligence Blog | Flashpoint
The Cloudflare Blog
T
Threat Research - Cisco Blogs
A
About on SuperTechFans
H
Help Net Security
MongoDB | Blog
MongoDB | Blog
博客园 - 聂微东
人人都是产品经理
人人都是产品经理
H
Hackread – Cybersecurity News, Data Breaches, AI and More
Recent Commits to openclaw:main
Recent Commits to openclaw:main
Latest news
Latest news
G
GRAHAM CLULEY
IT之家
IT之家
C
Cisco Blogs
Last Week in AI
Last Week in AI
Engineering at Meta
Engineering at Meta
L
LangChain Blog
The Register - Security
The Register - Security
SecWiki News
SecWiki News
M
MIT News - Artificial intelligence
NISL@THU
NISL@THU
T
Tenable Blog
博客园 - Franky
美团技术团队
I
Intezer
U
Unit 42
雷峰网
雷峰网
cs.AI updates on arXiv.org
cs.AI updates on arXiv.org
S
SegmentFault 最新的问题
C
Cyber Attacks, Cyber Crime and Cyber Security

博客园 - Sam Lin

中控IFace302考勤机二开内存问题解决方案 SQL Server也能玩正则表达式?二开实现比MySQL更强大的文本处理能力 DeepSeek R1超强平替方案,再也不担心服务器繁忙了,建议收藏 将DeepSeek接入人类大脑会怎样?? 刚刚!百度搜索“换脑”引爆AI圈,正式接入DeepSeek R1满血版 DeepSeek本地化部署超简单,比装个office还简单 2022年工作总结,迟到比没到好 Scratch教程:第1课认识Scratch SQL技巧:查询某个表关联的所有存储过程 还堵在高速路上吗?带你进入Scratch世界带你飞 抗新型冠状病毒诗 我将要离开,广州! 您还差宝贝一张语文教学光盘!教你如何制作ISO文件 潮汕七样羹之情 劣湿为始《清明之冬》 福利预告,跳一跳助手即将发布,您不知道还有这些... 新网云服务导致八爪鱼招标网近一天宕机,提交工单竟谎报问题已修复 首次获得摩拜单车的红包 Win10家庭版中的SQL2005无法远程连接
数据采集之登录那些事
Sam Lin · 2018-05-02 · via 博客园 - Sam Lin

数据采集之登录那些事

一、前言

最近笔者正在研究数据采集,大家知道部分网站是不对外公开的,需要你登录之后才能正常浏览,也就是所谓的[凭证]简单粗暴的想法就是,在该网站注册个账号,登录后记录cookie信息,并将已登录的cookie信息持久化到文件、数据库,以便在采集数据时可以将cookie信息还原成网站登录的状态;

采集的流程大约是:1.获取cookie2.cookie转化为CookieContainer3.CookieContainer序列化并持久化;4.将持久化的CookieContainer反序列化;5、模拟登录信息去采集数据;

二、stringbyte[]互转出错

在反序列化将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);

为什么会出现转换后不一致的情况?

答:这主要是图片数据、文件数据或序列化后的二进制数据,这些是不遵循任何语言的编码规则,在转换过程中会丢弃一些不符合编码的数据,所以无论是用gb2312uft8或其它编码转换后都会出现问题。

四、解决方案

综上所述,如果有将图片、文件等二进制数据保存到数据库,建议使用byte[]类型进行保存,对应的数据库类型为varbinary(MAX)

但,你要是想将其保存为string类型则需要将byte[]Base64进行转换,具体代码如下:

//byte[]转为string

 string str = Convert.ToBase64String(bytes);

//string转为byte[]

 byte[] transferBytes = Convert.FromBase64String(str);

五、延展话题-哪些场景还会用到Base64

1、微信公众号开发中,调用带参数二维码接口可以得到二维码的Base64字符串;

2、在H5Native App开发中,需要上传图片、拍照等并上传到服务器中,一般也是将其转换成Base64

3、模板登录,使用Cookie转换成Base64字符串;

 -------------

欢迎关注[技术宅爸]公众号: