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解壓縮,則基本上能夠保存數據不亂碼。curl
2.GBK或者UTF8漢字之類的亂碼工具
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系統亂碼的問題的解決方案之一:編碼
curlhttp://www.baidu.com|iconv -fgb2312 -t utf-8url
固然,你也經過改變系統壞境變量與百度首頁的"charset"值一致,也能夠解決此亂碼問題,以下命令:spa
set LANG="gb2312"操作系統
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頭部信息的一個數組
後者是將頭文件的信息以數據流的方式輸出
轉:http://www.xuebuyuan.com/1047685.html