1. 由来
那天我例行随手抓了一个开发版程序的数据包,在查看请求数据的时候,看到了熟悉的Authorization。
Authorization: Bearer eyJhbGciOiJIUzUxMiJ9.eyJsb2dpbl9hcHBfdXNlc
l9rZXkiOiJmNmUxMWExNS00YzdlLTQyZmItYjViYy1jNGJkZGE1YmY2MzkifQ.u0
td-yH1n04gUnNfbtdFklf4VhLKawm6hb1_f4Aco9h0vsuVevHTq2M8V7N5mkLLWb
o064918HHLPmQh2hYcFA
已知这是一个Java的后端程序生成的JWT Token。以前用Cookies用的比较多,看到这里我突然有点好奇,你说这Java生成的JWT ...
木魚
1周前 (11-11) 416℃ 0评论
0喜欢
# 0x01 由来
今天下午六点左右的时候,群里面突然有一个人艾特了我,问我解压跟内存关系大不大。
问了下,他说的压缩是GZIPStream压缩。
通常来说,解压缩更关心的是CPU速度,而并非首先关心内存大小。内存大小通常和压缩所使用的字典大小等有关系,相对来说CPU的速度会更加敏感。
然后他说……
嗯……这就有点好玩了。Talking is cheap, show me the code。
然后他贴出来了这样的代码:
/// <summary>
/// 多文件压缩解压
/// </summary>
/// <param name="zipPath">压缩文件路径</param>
/// <param name="target...
木魚
1年前 (2023-10-26) 1672℃ 2评论
2喜欢
你要是问我为啥这样做,我也不知道,毕竟 crypto.createCipher() 这方法都已经过期了啊。
#01 缘起
事情的来源,要源于项目中的一部分数据,为了“安全”需要,存入数据库之前,是需要加密的。这个加密方式呢,就是AES-192。而对应的数据,不好说,谁知道有啥不可描述的数据呢。
而项目,是基于 Node.js 的。于是,在项目中,有如下的代码(历史遗留原因):
const crypto = require('crypto');
const encryptor = crypto.createCipher('aes192', 'hello_world');
encryptor.update('hello!', 'utf-8');
console.info(encr...
木魚
4年前 (2020-03-30) 5031℃ 1评论
11喜欢
什么是 FSLIB.EXTENSION?
FSLIB.EXTENSION 是一个开源的、主要基于扩展方法形成的辅助函数库。这个库的意义在于为一些在.NET开发过程中常见的函数、操作方法等提供便捷的操作。
1.4.1.0 的更改
项目使用 .NET CORE 的项目体系(project.json)进行打包编译
增加 .net core 目标
SearchStringTag以及部分函数签名变更
IOUtility 增加 GetDirectoryContainsByRelativePath、RemoveInvalidPathChars、RemoveInvalidFileNameChars函数
数组扩展增加 FindSequence 方法
使用方法
使用 NUGET 包管理器,搜索 ifish ...
木魚
8年前 (2016-08-14) 8591℃ 0评论
6喜欢
FSLIB.NETWORK 是什么?它是一个为HTTP协议设计的高度简便易用且极具功能性的类库。它的由来要追溯到12306订票助手.NET的诞生。在12306订票助手.NET诞生之初,我就有这么一个需求,需要一个用起来十分简单易用且灵活性和强健于一身的网络请求库。
为什么有这些要求呢?因为我懒,所以需要这个类库十分灵活简便易用,最好只要告诉它我有什么然后要什么,它就能给我弄回来。然而12306的种种掉链子谁都知道,所以我也希望这个库足够强健,至少不会因为库本身的因素导致程序崩掉。
所以这个库的存在是十分重要的。然而幸运的是,这个库完善到现在后,基本上符合我的要求。
提示:如果您在此网络库的使用过程中遇到任何问题,请在 问答社区(http://ask.fishlee.net/category...
木魚
8年前 (2016-05-05) 10967℃ 5评论
27喜欢
最近琐事缠身,烦得不行,拖了很久……
概述
2.0版本之所以放弃了1.x版本的序列,是因为变更比较大,存在不少破坏性变更。
详细变更列表
警告:列表中为红色的变更记录为破坏性变更,您可能需要调整现有的代码以匹配当前的库。
HttpClient增加新的Clear()函数,用于重置状态。此操作会清空所有Cookies以及上下文跟踪
请求流封装逻辑细节调整,对极个别情况下出现的流异常增加捕捉
请求数据封装类逻辑修正,现在支持直接将 HttpPostFile 类型作为表单数据上传
HttpContext请求发送流程微调,异步模式下所有代码都以异步模式启动
增加对图片的上传支持(默认保存为JPG)
增加UrlTokenIdentitier功能(默认启用),允许将请求数据标记在URL中
提交数据在GE...
木魚
8年前 (2016-04-05) 7881℃ 6评论
8喜欢
SimpleUpdater.net 是一个适用于.NET的快速自动更新类库,用于快速地为现有的.NET应用程序添加上自动更新功能。
更新详情
客户端更新内容
详细更新内容参见GITHUB上的问题列表:4.3.0.0中修复的问题和功能。
修复问题#2 命令行打开的项目可能无法保存
修复问题#5 命令行模式无法继续更新
修复问题#6 特定情况下如果需要回滚,则只有显式被删除的文件被还原
修复问题#7 多服务器模式下,如果不传递AppDirectory以及AppVersion参数将会导致抛出异常
修复问题#8 多服务器模式下,如果服务器地址无法连接,则无法继续切换服务器
增强功能#9 在VS中调试时,如果启用了VS宿主进程,则版本号会识别错误
打包工具更新内容
界面微调
安装&下载...
木魚
8年前 (2016-03-19) 9344℃ 10评论
12喜欢
0x1. 起因
话说,今天下午群里面有个同学求助一段代码。
他想问的是,这个 tempimei[j * 2] - 0x30 是啥子意思?
0x2. 其实这是很常见的一种写法
我们留意到 tempimei 这个变量其实是一个字符串。在.NET中,对一个字符串取索引,则是取出对应的字符。
字符可以隐式转换为int,所以tempimei[j*2]-0x30的意思是,将j*2索引位置的字符转换成int后减去0x30。为什么要这么减呢,我们参考一下ASCII表:
二进制
十进制
十六进制
字符
101111
47
2F
/
110000
48
30
0
110001
49
31
1
110010
50
32
2
110011
51
33
3
110100
52
34
4...
木魚
8年前 (2016-03-15) 34718℃ 18评论
46喜欢
0.概述
FSLib.Network 是订票助手.NET的一个副产物。开始在设计订票助手.NET的时候,我就在策划写一个比较易用的HTTP客户端库来完成底层的操作。由于.NET原生的HttpWebRequest比较复杂难用,而内置的WebClient先天不足。在这种种背景之下,我花了很长的时间来打磨这个网络库。虽然起名叫Network,但是目前专注于HTTP库。这个网络库在订票助手.NET中得到了广泛全面的使用,几乎所有对12306发出的请求都是由它发出的。在订票助手.NET中,最近四个月中,由它发出的请求过亿,其稳定性也是蛮有保证的嘛。
更多介绍和演示,参见 原创FSLib.Network库(目前专注于HTTP的高性能高易用性网络库)。
1.1.6.0变更详情(与1.5.6相比)
修正错...
木魚
9年前 (2015-12-13) 12807℃ 15评论
8喜欢
每天我都在烂尾和不烂尾间徘徊。每次我都想着累死累死累死,我这么彷徨这么无助这么凄凉,连路灯都用昏黄的灯光为我默泪,为什么我还要在这边继续着有人看或没人看的事,写能怎么样,断更又能怎么样。只是强迫症的独特天赋在鞭策着我,于是每次都会极不情愿地拿起键盘,强大的羞耻心在时刻地提醒着我,如果真的断更了,下一次上厕所你一定会忘记带纸,你就只能凄凉着等着有人路过大方地施舍给你一张草纸,因为你连人民币都没有,你从来不会在大号的时候带着钱包。说到这里,下次记得放一卷手纸在卫生间的角落里。。。
上一章写到已经成功获得了验证码并且输入。那么输入后能干嘛?当然先登录了
7.1 先完成一些辅助函数和登录界面
创建登录界面应该是极为简单的事情,就不多说了。我们这里设计个登录界面如下。
然后写上了俩调用函数。
...
木魚
9年前 (2015-08-18) 18338℃ 15评论
23喜欢
前言:这段时间太忙,这个系列几乎没抽出时间来写。现在来慢慢继续挤牙膏。关于FSLIB.NETWORK网络库或这个演示项目有任何问题的,请在问答社区(http://ask.fishlee.net/category-21)中反馈提问
6.1 验证码流程分析
我们照例打开Fiddler抓包,在跟踪登录和提交流程后,我们可以很容易看到相关的请求。我们先到登录12306的页面上看看样子。
看到了让人抓狂的图片验证码。其实我对这验证码还是好评的。让我们先来试一下验证码错误是什么情况。两行四列图片,我们先点击第一行第一张的左上角,和第二行第一张的左下角,也就是截图中标记的两个区域。这么做的原因是为了待会儿的提交测试做坐标映射(因为提交出去的信息不一定就是相对于图片本身的原点的)。也就是这样。
...
木魚
9年前 (2015-08-12) 9757℃ 3评论
17喜欢
SimpleUpdater for .NET 是一个适用于.NET的快速自动更新类库,用于快速地为现有的.NET应用程序添加上自动更新功能。
更新详情
客户端更新内容
修正在.NET2.0情况下使用DLL会有加载异常的BUG
多服务器模式增加遍历模式:除发生错误外,没更新时也可以遍历所有服务器直到没有更新
修正个别情况下多次检查更新时,重新下载的更新内容不会被使用的BUG
更新操作跟踪日志内容更新,更全面,同时增加控制台日志模式
打包工具更新内容
RTF文件增加取消绑定功能
安装&下载方式
详情请参见主页 http://www.fishlee.net/soft/simple_autoupdater/
...
木魚
9年前 (2015-07-19) 3423℃ 1评论
1喜欢
类库概述
SimpleUpdater for .NET 是一个适用于.NET的快速自动更新类库,用于快速地为现有的.NET应用程序添加上自动更新功能。
功能特点:
简单易用
支持增量更新等大量更新选项
更新详情
【客户端】修正在根目录下更新会导致出错的BUG
【客户端】修正当更新信息设置为显示网页时有时可能会报ActiveX初始化异常的BUG
【包工具】修正当输入最小版本号不正确时没做检查导致客户端出错的BUG
安装方式
以下安装方式任选其一即可:
(推荐) 使用Nuget包管理器,搜索“iFish” 后找到 “iFish's Simple Application Updater Library”(fishlee.net.simpleupdater) 并安装即可。包中不包含...
木魚
9年前 (2015-04-28) 4690℃ 1评论
2喜欢
这个工具是受一个朋友所托写的,简单来说就是在多个信息网站上抓取列表内容,取到最新的内容后,符合要求的给予提示(比如桌面右下角弹窗)。
这是一个比较简单的工具,所以把源码放出来,也算是基于FSLIB.NETWORK的一个实例DEMO。
1.项目简单信息
开发工具:VisualStudio 2015 CTP6
开发语言:C#
目标Framework:4.0
项目类型:WinForm
运行平台:AnyCPU
2.部分技术细节信息
基本结构为主窗口+后台长轮询任务+基于接口的插件式开发
契约管理导入:MEF
后台长轮询任务:Task模式
HTML解析:HtmlAgilityPack+XPath
网络层:FSLib.Network
3.源码下载
4.交流讨论
...
木魚
9年前 (2015-04-27) 16097℃ 7评论
13喜欢
之前介绍过网络库的基本信息和基本使用情况。后面准备来写一点实例教程。
本来想着先写QQ空间到WordPress导出工具的(毕竟这个博客之前的文章也都是这么导过来的),可是突然觉得不是很吸引人,毕竟有这种需求的人太少了……上次有人发了一个代码片段抓美女图的,我不禁眼前一亮……嗯哼,还是得从本质出发啊,凡事抓住最根本的需求,方能引人入胜。所以我决定抓住 书生本~色 这个关键因素……写个抓美女图的工具吧。
1.起因
事情的起因如上所述,其实还有个引子,就是之前有同学在群里发了一个Code Snippet,在OSCHINA上,是一个C#的一段代码,用来抓妹子图的。当然很容易看明白,不过我还是好奇地去看了一下这个网站……矮油我去,这个地址的图片质量还都蛮高的嘞。好了来个爬虫吧。
捎带借妹子来作为自己...
木魚
9年前 (2015-01-30) 19312℃ 49评论
39喜欢
上一篇对FSLib.Network库进行了简单的介绍和演示。从本篇开始介绍相关的使用。
1.基本运行机制介绍
FSLib.Network.Http 命名空间下的类是本网络库中用于HTTP处理的相关类型集中存放的地方。由于类库是基于HttpWebRequest以及HttpWebResponse的,所以很多行为表现和逻辑和它们几乎保持一致。
在此基础之上,本类库进行了抽象和总结,并提炼出一整套流程和运行框架。以下分别介绍。
2.相关模型介绍
2.1 HttpClient
HttpClient是开始HTTP处理请求的工厂。它是用来维护、创建、跟踪HTTP请求的一个基本类。可以理解为它是一个容器,维护了所有的Cookies以及全局设置,然后通过它可以创建出不同的HTTP请求实例。
HttpClie...
木魚
9年前 (2015-01-19) 68678℃ 24评论
7喜欢
0.背景
开始在设计订票助手.NET的时候,我就在策划写一个比较易用的HTTP客户端库来完成底层的操作。由于.NET原生的HttpWebRequest比较复杂难用,而内置的WebClient先天不足。
.NET 4.5中新增了HttpClient,但可惜.NET4.0不支持XP,所以暂时只能放弃HttpClient了。在这种种背景之下,我花了很长的时间来打磨这个网络库。虽然起名叫Network,但是目前专注于HTTP库。
这个网络库在订票助手.NET中得到了广泛全面的使用,几乎所有对12306发出的请求都是由它发出的。在订票助手.NET中,最近四个月中,由它发出的请求过亿,其稳定性也是蛮有保证的嘛。
1.功能特点&运行需求
其实它是对HttpWebRequest/HttpWebRe...
木魚
9年前 (2015-01-18) 38504℃ 69评论
26喜欢
其实这个扩展方法库已经发布有段时间了,没有正式发布过。今天整理了一下文档,顺便搞个文档,正式发布吧。
简介
.NET在3.5开始引入的编译器支持扩展方法,允许为现有的对象类型在不改变其原本定义的情况下添加额外的方法。
因此便有了本扩展方法库。本扩展方法库基本上扩展的都是.NET原有的对象,尤其是String对象。
添加本扩展方法库的引用库后,一般不需要特定声明即可使用,大多为现有对象的快捷操作。
安装方法
你有三种方式可以使用本库:
直接使用包管理器(Nuget Package Manager)安装(推荐)
直接下载已编译的二进制包,并根据需要引用
使用源码自行编译
1.直接使用包管理器(Nuget Package Manager)安装
在Visual Studio中,打开Nuget包管...
木魚
9年前 (2015-01-15) 5687℃ 13评论
1喜欢
今天被LINQ的Cast函数坑了一次,不过细究之下其实还是学到了新东西的。其实强制类型转换大部分人都会天天接触,可是谁会知道这里面还有点小秘密呢?
1.强制类型转换?
我想能看到这里的同学应该都不需要我去解释,所谓强制类型转换就是指将一个变量由一个数据类型强制转换为另一个类型,当然前提是对象和目标类型是兼容的。
下面这两行便执行了一个强制类型转换:
double a = 23.0;
int b = (int)a;
由于过于简单,这里说太多就有失水准鸟。
不过呢,这里要求俩类型具有兼容性;所谓的兼容性就是说要么它们是派生类的关系,要么系统知道如何去转换他们。
因此,对于自定义类型,我们往往会通过实现隐式转换或显示运算...
木魚
13年前 (2011-10-17) 5206℃ 2评论
1喜欢
RT, 昨天刚刚升级到RC2, 今天就遇到比较郁闷的问题。 之前看到阿不提到过一些关于MVC3 RC2的BUG,感觉不会太大影响使用。
不过今天下午就遇到问题了。
本来很简单的路由注册,带有Area的路由, 突然发现用 Html.ActionLink 生成的链接是空地址,觉得很奇怪,用Url.Action测试也是空地址。但是如果调用默认路由的话,链接就完全正常,非常费解。
默认的路由注册如下:
public static void RegisterRoutes(RouteCollection routes)
{
routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
routes.MapRoute(
"...
木魚
14年前 (2010-12-14) 3657℃
0喜欢
因为种种种种关系,开发用的数据库是Sql Server2008但是产品服务器是SQL Server2000,所以导致了问题的发生。
问题一:存取包含“DateTime”数据类型的列时会引发异常
异常信息:the version of SQL Server in use does not support datatype 'datetime2'
出现这个异常是因为SQL2008中加入了一个新的类型“DateTime2”,但是在SQL2005以及SQL2000中都不存在这个数据类型。这是一个已知的缺陷,可以手动解决。
用记事本或其它文本工具打开 *.edmx 文件,搜索 ProviderManifestToken=...
木魚
14年前 (2010-04-15) 2985℃ 0评论
0喜欢
(暂放首页,觉得不合适请撤下!)
Visual Studio 2010 and .NET Framework 4 Beta 2 相信不用我多做什么介绍了吧,想看看新闻的话请点击 Visual Studio 2010 and .NET Framework 4 Beta 2 来阅读相关信息,直接放出下载:
文件名 en_visual_studio_2010_ultimate_beta_2_x86_dvd_444661.iso 邮寄日期 (UTC): 10/19/2009 7:57:47 AM ISO/CRC: 2C3975FB SHA1: 7098953C9B73DB7F0245D613143D15F85BA52264&nbs...
木魚
15年前 (2009-10-20) 3378℃ 0评论
1喜欢
调用WebBrowser控件中的JS脚本使用这个函数来调用:
WebBrowser.Document.InvokeScript("函数名",参数列表);
但是下午遇到一个很棘手的问题,就是调用的时候会抛出这样一个莫名其妙的异常:
未处理 System.InvalidCastException Message="指定的转换无效。" Source="System.Windows.Forms" StackTrace: 在 System.W...
木魚
15年前 (2009-07-18) 6070℃ 0评论
2喜欢
.Net中自带的ListView,在显示复选框的情况下,默认设置当你双击行时会改变复选框的选中状态。一般情况下这个动作没有任何问题,但是有些情况下我们不需要,例如,我们定义了双击行显示编辑对话框,那这种情况下改变复选框的选中状态是很意外的。
那如何来禁止它呢?
首先查看MSDN类库,ListView的属性、函数,似乎没有可以设置这个操作的属性(至少我没找到)。
掏出Reflactor,反编译了System.Windows.Forms.dll,能看到这部分的核心代码如下:(位于 System.Windows.Forms.ListView 下)
1: private void WmNmDblClick(ref Message m)
2: {
3: ...
木魚
15年前 (2009-06-06) 2754℃ 0评论
0喜欢
目前在做一个编辑器,编辑过程中有个保存编辑内容的实体类。因为内容比较复杂,为了防止意外的问题在保存的时候使用二进制序列化,但是这时就遇到一个问题,因为编辑需要这个实体类里面是有事件的,并且在编辑过程中这个事件已经被绑定到了用户控件。由于二进制序列化是精确还原对象的,所以尝试对这个实体类进行序列化的时候发生了问题:绑定了事件的用户控件是不可序列化的。
实体类部分代码如下:
1: [Serializable]
2: public class LabelItem
3: {
4: public event EventHandler TitleChanged;
5: public event EventHandler TextChanged;...
木魚
15年前 (2009-04-04) 6130℃ 0评论
0喜欢