C#中HttpWebResponse获取不到cookies

最近有机会接触到了一点C#功能的开发,自然就有新东西要学,呵呵,我喜欢。

下面就是遇到的一个小问题,客户端需要做登录,然后保存好cookies,以便接下来的业务使用,但是登录成功后cookies获取不到。

下面是部分示例代码:


string Url= "http://www.some-domain.com/";
HttpWebRequest req = (HttpWebRequest)WebRequest.Create(Url);
req.CookieContainer = new CookieContainer();
HttpWebResponse response = (HttpWebResponse)req.GetResponse();

此时直接通过response.Cookies获取,发现count为0,而在调试窗口可以查看到response对象的Headers中是包含Set-Cookie的。

原因是req对象的CookieContainer属性没有进行初始化,也就是没有准备好盒子来接收服务端返回的cookies。

解决也很简单,在获取返回之前进行初始化:

req.CookieContainer = new CookieContainer();

这时response.Cookies就会有你想要的东西了。

Win7下修改输入法默认切换快捷键

先说明一下为什么要修改:

起因是由于经常使用eclipse做开发,而个人又不太喜欢默认的代码补全快捷键(alt+/),于是自己定义为了(shift+space)。这也没有什么影响,但是由于开发过程中总会遇到一些需要输入中文的情况,必然会使用中文输入法。中文输入法一般自身都会提供中/英文状态的切换,此处以QQ输入法为例,按shift键即可,这样在coding的时候切换也还算方便。不过由于飞尘自己修改了eclipse的快捷键,用(shift+space)做代码补全,这样在中文输入法打开的情况下,就会产生快捷键冲突。因为默认情况下这个组合键被定义为了半角/全角的切换键。

这是系统输入法中的设置,于是去修改,不料通过“文本服务和输入语言”的修改是无效的,确定保存再打开来看还是原来的快捷键。

于是google发现,通过修改注册表可以实现目标。

找到HKEY_CURRENT_USER\Control
Panel\InputMethod\Hot Keys\00000011下,
备份HKEY_CURRENT_USER\Control
Panel\InputMethod\Hot Keys\00000011分支,防止出错
备份后,设置Key Modifiers为05 40
00 00,Virtual Key为79 00 00 00

修改好注册表后,再通过“文本服务和输入语言”修改半角/全角的切换快捷键(随便设置即可),此时应用之后就会发现,快捷键已经变成alt+shift+f10了,这个快捷键被冲突的几率应该小很多了。

使用vbs脚本解决axure生成chm乱码

最近做原型设计,用到了axure。做好后需要发布给其他人查看,弄一堆html页面总归感觉有些凌乱,好在axure提供了打包成chm文件的功能:在生成原型的时候,发布设置中勾选“创建HTML帮助文件(.chm)”即可。记得要安装Microsoft的HTML Help Workshop。

原来“没那么简单”,如果设计中页面名称使用了中文(这很正常),直接发布出来的chm文件打开后页面索引会显示乱码的。虽然页面中的内容是正常的,但是这也是影响使用的。

于是问google,原来是因为微软的hhc.exe工具进行编译时默认的是ascii编码,而axure生成的Table of Contents.hhc工程文件是使用utf-8编码,两者不统一自然会乱码了。

找到原因当然也就有解决办法了,使用文本编辑工具打开Table of Contents.hhc的工程文件(类似maven的pom文件),另存为ascii编码格式。

打开一个hhp扩展名的文件,双击[OPTIONS]中的Language=那一行,修改为中文简体,确定后菜单File->complie重新编译工程即可。

以上为手工的处理方式,偶尔发布一两次还能接受。但是原型一般会改来改去,这样子岂不太郁闷了。于是看到了另外一种半自动的方式——使用vbs脚本来做,在哪里看到的忘记了,谢谢这位朋友,不好意思啊。

这里飞尘根据自己的需要做了些调整,将转码后的文件做了一次拷贝,放到和脚本一起的目录,个人感觉这样比较方便,不用去一大堆文件里去找。

使用的时候需要稍作修改:
strHHCEXE – hhc工具的路径
strWorkPath – axure原型的输出目录
strFileName – axure工程名

这里补充一点,为了避免生成的chm文件名乱码,axure工程名还是用英文的吧。

完整的vbs脚本如下:

博客乔迁之喜

今年事情一直很多,都快几个月没有打理博客了,真是对不住大家了。

最近一段时期,服务器不知道怎么搞的,一直不稳定,经常出问题,很是让人郁闷。其实使用burst的vps已经有两年多了,总体情况还算可以,不知道最近为何这般表现,可能是超售的后遗症吧。本来打算这一期到期了再续费呢,看来是不能再继续沉默下去了。

于是在这个难得的周末,选了个新家,经过一天的不懈努力,终于顺利搬家成功,这里要感谢LP大人的理解和支持,哈哈。

搬家的过程中遇到了些小问题,不过都一一解决了。这里有一点需要提及的是:搬家后,发现博客无法正常显示了,页面空白,登录后台还是可以的。经查发现,主题相关的功能出现了问题,无法显示已经安装的主题列表,登录到服务器删除外部主题,只保留wordpress默认主题,后台主题管理页面提示:“主题目录是个空目录或主题目录不存在。请价差主题是否安装妥当。”

更换到默认主题后,前台页面可以正常显示了。折腾了半天,排查了数据库和文件没有任何问题,搜索之后发现原来是环境的问题。由于更新了新的LNMP相关软件,与之前的配置有所不同。其中php的默认配置就导致了这个问题的出现,当然一个巴掌拍不响,wordpress版本升级之后主题列表功能使用到了scandir()函数,而在php.ini的默认设置中是被禁用了的。

找到了原因,解法就比较简单了。打开php.ini文件,搜索disable_functions后仔细查看就可以看到scandir的身影了,对了干掉它就可以了。

荣威350升级inkanet之短信签名

很久没有更新博客了,从学车开始到现在差不多有两个多月的时间了。发现自己真的很会给自己找理由——这个忙、那个累……

唉,其实就是一个“懒”,呵呵,废话不多说了,转入今天的正题。

升级了荣威350的inkanet系统之后,拥有了ivoka功能,感觉很不错,重新校准了一下屏幕,定位也比较精确了,原来4s店的JJ没有定位好,整体偏下,发短信时效果很不理想。

升级过程还是比较简单的,车载系统有升级提示,按步骤来就可以了,升级包大约80多M,开着车出去转个一两圈就会下载完了,升级安装也很顺利,更新完成后就是类似游戏那种新手入门指导,几步学习之后就可以体验ivoka了。具体的步骤网上应该有的,这里就不啰嗦了。

话说晚上回家想查一查话费和流量,可是登录联通网上营业厅愣是失败,说是密码不对,升级系统之前我是在车上发短信给10010修改过密码的,咋就登不上去了呢,真是郁闷。联通网厅不能直接重置密码,要发验证码到手机的,总不能跑到车库去看个验证码吧,再说地下似乎没有联通信号。无奈只能等第二天了。

第二天下班后,上车准备好后就按照原来的短信方法修改密码,个人猜测升级系后密码被重置为默认密码了(1234或者手机号末6位)。但是发了几次都不成功,10010回信都说失败,密码只能为数字。尝试重置密码短信也是不行。

查看发件箱,我的乖乖——每条短信后面都有了一个个性签名:—发自inkanet,难怪联通会说些莫名其妙的话。这个性签名还真的挺个性的,好像ipad之类的发邮件会有个发自什么ipad的签名,这个好,短信也来个签名,而且个性还不止这一点哦,且看下文继续分解。

按照一个软件开发人员的思路,飞尘自然想到去找找这个签名是在哪里设置的,关掉就ok了啊。比较杯具的是翻了个遍也没有找到相关的设置。inkanet就是基于android系统的个性化定制,这个签名还真个性。

自己搞不定,那就问问客服吧,不是有个一键服务吗,每个月100分钟不利用岂不可惜了。第一次拨打是忙音,没有接通,又拨了一次,通了,是类似ivoka那种的电脑语音,说了个“转人工”,识别超时不过还是转到了人工,七七八八把问题描述了一遍,客服说稍等不要挂机,去咨询一下,刚说完通话就结束了,不知是信号不好断掉还是客服不小心挂掉。心想可能是为了节约用户的话费(分钟数),问好后会回拨来吧,于是很天真的等了几分钟还是没有任何反应。莫非客服不晓得偶的电话号码吗?这一点看来还真是要和银行学习下了,之前打银行客服信号不好断掉了,银行那边马上回拨过来,赞一个,嘿嘿。

靠人不如靠己,于是又一键服务->转人工,这次的客服MM倒是比较专业,可能是有人曾经咨询过类似的问题吧,直接告诉我说那个签名是没法去掉的,如果想修改联通密码可以打上海的某个电话,好吧那我再想想其它办法吧。

上海本地的车主可以直接拨打联通10010重置修改密码,外地要加上海区号拨打,而且会收取通话费,次方式使用有一定局限性。

使用车载系统发短信的方法目前是行不通了(不知道以后的升级会不会修改),但是收短信还是可以的,这就可能需要两个人做个配合了,一个在网上重置密码,另一个在车上等待收取手机验证码,然后在网上进行修改。一个人可能要跑的快点,一般验证码都有时效性的。还有一个方法就是用手机登录联通的手机营业厅(飞尘用的是移动的号码),在登录页面有个“忘记密码”的链接,可以直接在车上收取验证码改密了。

多啰嗦一句,会有越来越的用户用上新的inkanet系统的,关于短信签名的问题应该会有越来越多的用户会遇到,希望大家的热心反馈能够敦促inkanet的更上一层楼。

extjs表格展开更多内容

事情是从官方的一个表格的例子开始的。

就是其中第一个名为“Expander Rows in a Collapsible Grid”的表格吸引了飞尘。

通过这个可以展开和折叠的小功能,我们就可以直接在表格中展现更多的内容,而不需要新窗口或者额外的页面。

这么好的方法自然要用到项目中了,找来先有的表格做测试,对比了一下,与官方例子主要的差别就在于这个plugins属性了。

于是直接copy来,修改为自己的数据字段,并加入到原有的grid创建代码中。

意料之中的页面出现错误,直接就不显示表格了,看来这个plugins并不简单啊,呵呵。

又去观察了一下官方例子,发现引用了另外的js:

examples/ux/RowExpander.js?_dc=1323855646488

原来这个不在extjs中,而是extjs的扩展插件。

在自己的extjs文件夹找了下,的确是有这个文件的,那就引用一下好了。

但是问题并没有彻底解决,这次报脚本错误了:

this.view is undefined

官方查到了这个bug,已经在新版本中进行了修正。

http://www.sencha.com/forum/showthread.php?141590-New-bug-in-RowExpander-plugin

http://www.sencha.com/forum/showthread.php?139187-rowexpander-does-not-work

项目启动时使用的extjs是4.0.2a版本,于是去看了下最新的版本,升级到了4.0.7。小版本的升级应该不会有太多变化,于是下载最新版本,替换现有的4.0.2a。把已有的功能过了一遍,没有问题,平滑升级。

关于之前发现的中文本地化一个问题,依然存在,于是手工修改了一下,详细内容就不多说了。

RowExpander的终于正常工作了。

赶快体验一下展开表格的酷炫感受吧。不幸的是又出现了新问题,当表格设置了高度,且加载的数据条目较少,表格不会有滚动条,当有多个记录被展开后,表格中内容的高度就超过了表格设定的高度,但是表格并未出现意料中的滚动条,如图所示:

而对于开始数据就比较多,表格已经有滚动条的情况,展开是没有问题的。

查看了RowExpander.js的源码,其中toggleRow就是展开、折叠时做的一些处理,方法的最后一行

this.view.up(‘gridpanel’).invalidateScroller();

似乎已经对滚动条进行了考虑,没有再继续追查,通过表格对象的getHeight()方法对比了折叠前后的表格高度,发现一样都是创建表格时设置的高度。

借鉴之前的经验,在这个时候再对表格执行一下doLayout(),使其重新渲染,但是没有效果,滚动条依旧没有出现。

经过查阅,refresh可以搞定,增加下面一句:

this.view.up(‘gridpanel’).view.refresh();

再来查看表格,展开时久违的滚动条终于露脸了。

提醒一下,最好保留原始的extjs所有文件,自己修改过的文件,复制一份到项目路径,修改最好添加简单的注释说明。这样以后升级版本时会方便很多。