curl -s -H 'Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8' -H 'Accept-encoding: gzip,deflate' "http://m.news.haosou.com/" -H "Via: curl"  | gunzip -

使用这条命令去抓取页面, 不传递Via的header时,是能正常执行的,当带上via时,返回内容不再gzip,直接是正常文本。

查询了下相关资料,原来via参数在RFC里是有规范的,不是随便指定的。

见:http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html#sec14.45

`

curl -s -H ‘Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,/;q=0.8’ -H ‘Accept-encoding: gzip,deflate’ “http://m.news.haosou.com/" -H “Via: curl”  | gunzip -

使用这条命令去抓取页面, 不传递Via的header时,是能正常执行的,当带上via时,返回内容不再gzip,直接是正常文本。

查询了下相关资料,原来via参数在RFC里是有规范的,不是随便指定的。

见:http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html#sec14.45

`


阅读全文

最近在看golang,看了《GO语言编程》,没看一段都会照葫芦画瓢搞个demo来玩玩。

在搞交叉编辑的时候,遇到了麻烦,按书上搞的,buildpkg 这个脚本里,需要在$GOROOT/src下执行go tool dist install -v pkg/runtime ,可是src下根本没有这个 pkg/runtime的目录啊,总是报错,怎么也编译不出来。

自己就不管那个脚本了,自己看错误提示琢磨。

自己直接 go build exe文件的时候,报错 go build runtime: windows/386 must be bootstrapped using make.bash

然后估摸着,需要先修改GOOS和GOARCH进行make.bash,试了下,果真可以。

所以,交叉编译,做一个windows下64位电脑可用的exe文件,这样搞:

cd $GOROOT/src
GOOS=windows GOARCH=amd64 ./make.bash #如果是32位,就GOARCH=386
cd word #回到自己想输出可执行文件的位置
GOOS=windows GOARCH=amd64 go build -o sorter.exe sorter #go build 依赖 $GOPATH,这个就不多说了。

效果图:

go-build-for-linux

linux下运行效果图

go-build-for-windows

windows下运行效果图


阅读全文

今天收到用户反馈,用户在举报谈谈的谈主时会显示提交失败。

这个反馈页面入口在反馈平台,调用谈谈项目的后端接口。 这个服务相关的接口都好久没有动了,为什么会失败呢?

在线上找了一台机器进行debug,发现接口返回内容是“正常”的,一段可读的json字符串。把字符串拷贝下,在js下发现是可以解析的。

但是该项目下用的json_decode,却怎么都decode不成功。调试了半天都觉得甚是古怪,一直都找不到头绪,怕自己脑子是思维定势了,跑去看了会golang,再回来继续解决。

再怎么看, 都还是觉得很正常,不应该出问题。

再一次拷贝接口返回的字符串的时候,发现头部多了个标签。

feff-utf8_bom_remove_linux_vim

feff-utf8_bom_remove_linux_vim

查了下,发现这个FEFF就是BOM。 参考:字节顺序标记

找到问题所在了,解决问题就好说了。

windows下有各式各样的编辑器,都可以解决bom头问题,可是linux下该怎么解决呢?

google了下,问题都解决了。

1.找到哪些文件包含BOM头。

grep -rl $'xEFxBBxBF' .

通过hexdump可以看到bom头的存在。

hexdump-BOM-utf8-file

hexdump-BOM-utf8-file

2.删除BOM头信息。

sed '1s/^xEFxBBxBF//'  filename.php -i

删除后就不会再看到BOM头拉。

hexdump-NO-BOM-utf8-file

hexdump-NO-BOM-utf8-file

可以用一条命令查找并删除文件的BOM头信息:

find . -type f -exec sed '1s/^xEFxBBxBF//' -i.bak {} ; -exec rm {}.bak ;

总结:

在多人维护的项目下,很可能会有其他人上传一些不合适的文件或代码,需要对一些常规情况进行监控,及时发现、解决,避免影响线上问题。


阅读全文

管理后台不知道为啥出了点小bug,以前管用的一个功能突然不能用了,看了下数据接口是调用成功了,大周末的,又不好麻烦FE,只好自己看看了。

通过查看源代码发现,使用了jquery里的ajax方法,通过get回来的结果并没有按预期的执行success回调。

$.ajax({
      url: '/antispammanage/filterSpecial/?kw='+encodeURIComponent(kw),
      type: 'get',
      dataType: 'json',
      success: function(data){
          var d = JSON.parse(data.trim());
          $('.producekw').val(d.kw);
      }

查看网络请求,接口是返回成功的。

然后对该方法添加了error回调,打印出返回信息,readystate=4,返回头是200,但是为啥就不success呢。

google了下后发现,原来问题出在返回信息的content-Type上,返回的不是json类型,但是ajax方法里指定了类型为json,所以ajax方法在解析json的时候出错了。解决办法有两个:

1.接口返回的header里指定content-Type为json,

2.ajax调用的时候,指定dataType为text,然后自己用JSON.parse进行解析。


阅读全文

大家应该都知道,开启php的coredump输出,修改ulimit -c就可以了,但是很多情况下,会提示权利受限,无法修改

[fukun@10.16.29.xxx]$ ulimit -a
core file size          (blocks, -c) 0
data seg size           (kbytes, -d) unlimited
scheduling priority             (-e) 0
file size               (blocks, -f) unlimited
pending signals                 (-i) 30678
max locked memory       (kbytes, -l) 64
max memory size         (kbytes, -m) unlimited
open files                      (-n) 32768
pipe size            (512 bytes, -p) 8
POSIX message queues     (bytes, -q) 819200
real-time priority              (-r) 0
stack size              (kbytes, -s) 10240
cpu time               (seconds, -t) unlimited
max user processes              (-u) 1024
virtual memory          (kbytes, -v) unlimited
file locks                      (-x) unlimited

$ ulimit -c unlimited -bash: ulimit: core file size: cannot modify limit: Operation not permitted

解决方案:

1.检查配置

看看shell配置里有没有 ulimit -c 0 这种类似的关闭的操作,例如 $HOME/.bash_profile 或者 $HOME/.bashrc 之类的,如果有,注释掉。

#
# Do not produce core dumps
#
# ulimit -c 0

阅读全文

只有ie能上网,其他浏览器和软件都不能的解决方法:

以管理员方式打开cmd.exe,运行如下命令:

netsh winsock reset catalog
netsh int ip reset reset.log hit

让被阻止了的svchost.exe进程恢复正常,以解决Windows 7 通信端口初始化失败的问题  

netsh winsock reset catalog

netsh winsock reset catalog

 


阅读全文

作者的图片

DigDeeply

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

Web Development Engineer

Beijing China