1.是用curl抓取的数据是用相似gzip压缩后的数据致使的乱码。
乱码:curl www.1ting.com |more
乱码:curl -H "Accept-Encoding: gzip"www.1ting.com | more
不乱码:curl -H "Accept-Encoding: gzip"www.1ting.com | gunzip | morehtml
不乱码:curl www.1616.net |more
乱码:curl -H "Accept-Encoding: gzip"www.1616.net | more
不乱码:curl -H "Accept-Encoding: gzip"www.1616.net | gunzip | morelinux
下面的a,b解释的是www.1ting.com,c,d解释是的www.1616.net
a.某个url,若是用不加任何选项的curl命令抓取后乱码,在curl后面加上Accept-Encoding:gzip,后面不加gunzip,则抓取的数据会乱码。
b.某个url,若是用不加任何选项的curl命令抓取后乱码,在curl后面加上Accept-Encoding:gzip,后面加上gunzip,则抓取的数据不会乱码。shell
c.某个url,若是用不加任何选项的curl命令抓取后不乱码,在curl后面加上Accept-Encoding:gzip,后面不加gunzip,则抓取的数据会乱码。
d.某个url,若是用不加任何选项的curl命令抓取后不乱码,在curl后面加上Accept-Encoding:gzip,后面加上gunzip,则抓取的数据不会乱码。数组
小总:
也就是说在curl后面加上Accept-Encoding:gzip,再用gunzip解压缩,则基本上能够保存数据不乱码。markdown
2.GBK或者UTF8汉字之类的乱码app
iconv命令是运行于linux平台的文件编码装换工具。当咱们在linux系统shell下经过curl命令或者wget命令获取一个网页的源代码,当网页的编码与当前操做系统坏境的设置的编码不一样时,就会发现网页中有不少乱码。如在网页"meta"标签"charset"属性值设置为"gb2312"的http://www.baidu.com百度首页,在系统坏境变量"$LANG"值为"en_US.UTF-8"的linux系统即会产生中文乱码现象。这时咱们能够尝试使用iconv命令进行编码装换,让中文不在是乱码。以下命令是处理百度在系统坏境变量"$LANG"值为"en_US.UTF-8"的linux系统乱码的问题的解决方案之一:curl
curlhttp://www.baidu.com|iconv -fgb2312 -t utf-8工具
固然,你也经过改变系统坏境变量与百度首页的"charset"值一致,也能够解决此乱码问题,以下命令:编码
set LANG="gb2312"url
export LANG
curl http://www.baidu.com
iconv命令的详细语法:
iconv [选项..] [文件..]
选项:
-f 输入编码
-t 输出编码
-l 列出全部已知的编码
-o 输出文件
对比采用PHP CURL库的POST GETHEADER三种方法之间的差别
比较POST GETHEADER这三种方法的区别:
参数 |
POST |
GET |
HEADER |
CURLOPT_URL |
有 |
有 |
有 |
CURLOPT_POST |
开启 |
关闭 |
关闭 |
CURLOPT_HTTPHEADER |
若是有$header,则开启 |
若是有$header,则开启 |
若是有$header,则开启 |
CURLOPT_HEADER |
False |
False |
True |
CURLOPT_NOBODY |
false |
False |
true |
CURLOPT_POSTFILEDS |
True |
false |
false |
从上表中能够看出:
POST方法:开启POST链接,而后发送POST报文体。关闭HEADER和NOBODY
GET方法:关闭POST相关的选项,关闭NOBODYHEADER,仅仅只是开启curlopt_httpheader
HEADER方法:开启HEADER和NOBODY,关闭POST相关的选项。
应该说上述三种方法,一个明显的区别是,箱采用什么方法的时候,就开启对应的CURL选项。
CURL_HTTPHEADER与CUROPT_HEADER的区别:
前者是设置HTTP头部信息的一个数组
后者是将头文件的信息以数据流的方式输出
来源: https://www.xuebuyuan.com/1047685.html