有朋友报名东方时尚,理论课选的网上教学,需要看完所有的视频才能算科目一培训完成,在很早之前就有朋友因为这个找过我。当时东方时尚的授课系统还很简单。。每次看完一个视频都会发起一个固定的请求,表示当前视频看完了。所以之前的做法很简单,把那个url在新标签页打开,每开一个视频,刷一下页面,就算看完一段视频了。。所以不用什么复杂操作,很容易就能完成。 不过现在,东方时尚的系统明显升级了,已经不是那么简单的逻辑了,每次请求一个新视频,都会有一个/start的请求,把视频id返回,后边每次心跳和看完视频的请求,都是以该id为参数。不能再像以前那么简单的玩耍了。。本来是想写个chrome的扩展来拦截请求做处理的,突然想到Fiddler的script就可以做这些,而且语法是.NET的,会比较熟:)。 做法也很简单,就是在OnBeforeResponse阶段,获取到body,正则匹配到需要的id,然后再发起一个请求:),多说无益,直接show code. regex正则匹配内容。使用 utilIssueRequest 发起请求。 当然这里的做法简单了些,因为东方时尚的请求header里还使用了authToken认证,每次登录的token都不一样,这里直接写死了。 到这里就简单多了,每次打开视频就相当于播放完了,直接刷新就可以看下一集了。 下边图片就是效果,每次视频一start,就产生一个end的请求:) 当然也没这么简单。。它会把token放在localSotrage里,每次开始播放的时候会清掉,应该是等快结束的时候才放进去。。所以导致每次刷新页面都会需要重新登录,所以又要麻烦点,在浏览器的开发者工具里,每次刷新页面前,都set一下localStorage,就可以拉。。 视频是可以快速跳过了,但是每一章视频看完后都会有一个测验,要把三十道题目都回答正确才行。一看请求,每次请求问题的时候,答案也放在返回结果里了。。所以,很容易想到,答题完成其实也就是一个固定的请求而已。。硬着头皮答完了一次题,抓到了完成题目的请求,是一个 Practice/Finish?lessonId=1 这样的请求,每次只要改lessionId的值就好了, 很简单吧。。:)

阅读全文

最近搞了个海外的阿里云主机后,就把自己的个人站迁移了。然后就想办法做优化,用上了openresty + php7 + http2。 因为历史原因,自己搞了几个不同的域名,一个是fukun.org,还有一个之前一直用的digdeeply.org,现在想统一起来,可是却发现wordpress里有很多上传附件的时候,链接已经是写死的,使用的当时的域名digdeeply.org,如果去一个一个的把他们替换过来,就不太现实了。 因为自己用过openresty中的lua,所以首先想到的就是使用一个content_by_lua来实现替换,在这个阶段把内容中字符串替换掉,不过有个细节问题就是这里lua拿到的都是nginx的一个一个的chunk,如果想要替换的字符串正好在两个chunk的分界处,那么这个就会被漏掉而不能替换。 然后在查一些资料的时候,突然发现,其实,nginx自己就有支持字符串替换的模块的: sub_filter, 这样就不用自己在lua写了,会更方便一些,那么先来看看sub_filter怎么用吧。 用法很简单,只要使用 sub_filter ‘search’ ‘replacement’ ,把被替换和替换内容给出来就可以了,可以写多条规则,替换多次。 其它的几个参数稍微看下文档也能明白了: 语法: sub_filter_once on | off; 默认值: sub_filter_once on; 配置段: http, server, location 字符串替换一次还是多次替换,默认替换一次。如果全文中有多个查找到的字符串,希望全部替换的话,就开启这个选项。 语法: sub_filter_types mime-type …; 默认值: sub_filter_types text/html; 配置段: http, server, location 指定需要被替换的MIME类型,默认为“text/html”,如果制定为*,那么所有类型的内容都会被替换,我们其实一般来说,只希望替换text/html中的就可以了,因为如果是图片啥的,你想替换啥呢? 如何安装sub_filter功能模块http_sub_module 以上是sub_filter的用法,但是如果你已经安装好nginx服务了,而且之前没有安装sub_filter模块,那怎么办呢,总不能把nginx全部重新编译重装吧,那样会覆盖之前的nginx配置,还得再来配置一遍。 可以用另外一种方法来更新nginx,那就是只从新编译,而不安装。就是只执行 ./configure 和 make 方法,而不执行make install,这样就不会有问题了。然后把make编译好的nginx二进制文件拷贝到已安装的nginx sbin目录下覆盖之前的,覆盖之前请做好备份,并停止当前运行的nginx。 我是用的openresty,所以很多configure的参数不用自己加,第一次我编译的时候,因为需要http2和status模块, 只执行了: 现在需要sub_filter功能,所以只要添加–with-http_sub_module就可以了。那么就是这么编译: 然后把build/nginx-xxx/objs目录下的nginx二进制文件复制走去用就可以了。

阅读全文

深入理解计算机系统P36 练习题2.15 只使用位级和逻辑运算,编写一个C表达式,他等价于x==y。换句话说,当x和y相等时他将返回1,否则就返回0. 题目考察的是位级运算符和逻辑运算符的用法,以下是两种实现方式,供参考:

阅读全文

/var/tools/php-5.6.17/ext/iconv/iconv.c:2512: undefined reference to `libiconv_open’ ext/xmlrpc/libxmlrpc/encodings.o: In function `convert’: /var/tools/php-5.6.17/ext/xmlrpc/libxmlrpc/encodings.c:73: undefined reference to `libiconv_open’ /var/tools/php-5.6.17/ext/xmlrpc/libxmlrpc/encodings.c:81: undefined reference to `libiconv’ /var/tools/php-5.6.17/ext/xmlrpc/libxmlrpc/encodings.c:101: undefined reference to `libiconv_close’ collect2: ld returned 1 exit status make: *** [sapi/cli/php] Error 1 在阿里云安装php时,make的时候,发生了libiconv错误,通过安装libiconv,指定with-iconv-dir也没解决。最终是在make时加了一个参数,然后顺利编译通过的。 make ZEND_EXTRA_LIBS='-liconv'

阅读全文

使用oh-my-zsh时,同时使用了screen插件,oh-my-zsh对screen有个优化,会自动的变更当前window的title,这个功能虽然看起来很好用,但对我个人来说,很是不习惯,因为我自己有对每个window命名的习惯,每个window干什么自己都记得很清楚,他一来了就给我重命名,搞的我很不习惯,所以,我需要把这个oh-my-zsh自动更改screen的title的情况关闭掉。 查找了相关资料后,找到了一个方法,其实很简单。在 .zshrc 的配置文件里,添加一行: 就可以了。

阅读全文

作者的图片

DigDeeply

Technology Stack: Golang/PHP/Openresty, and so on…

Web Development Engineer

Beijing China