獲取網頁亂碼
1.是用curl抓取的資料是用類似gzip壓縮後的資料導致的亂碼。
亂碼:curl www.wode007.com |more
亂碼:curl -H "Accept-Encoding: gzip"www.wode007.com | more
不亂碼:curl -H "Accept-Encoding: gzip"www.wode007.com | gunzip | more
不亂碼:curl www.55wd.com |more
亂碼:curl -H "Accept-Encoding: gzip"www.55wd.com | more
不亂碼:curl -H "Accept-Encoding: gzip"www.55wd.com | gunzip | more
下面的a,b解釋的是www.wode007.com,c,d解釋是的www.55wd.com
a.某個url,如果用不加任何選項的curl命令抓取後亂碼,在curl後面加上Accept-Encoding:gzip,後面不加gunzip,則抓取的資料會亂碼。
b.某個url,如果用不加任何選項的curl命令抓取後亂碼,在curl後面加上Accept-Encoding:gzip,後面加上gunzip,則抓取的資料不會亂碼。
c.某個url,如果用不加任何選項的curl命令抓取後不亂碼,在curl後面加上Accept-Encoding:gzip,後面不加gunzip,則抓取的資料會亂碼。
d.某個url,如果用不加任何選項的curl命令抓取後不亂碼,在curl後面加上Accept-Encoding:gzip,後面加上gunzip,則抓取的資料不會亂碼。
小總:
也就是說在curl後面加上Accept-Encoding:gzip,再用gunzip解壓縮,則基本上可以儲存資料不亂碼。
素材公社https://www.wode007.com/sites/73209.html 愛圖網https://www.wode007.com/sites/73208.html
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系統亂碼的問題的解決方案之一:
curl http://www.baidu.com|iconv -fgb2312 -t utf-8
當然,你也通過改變系統壞境變數與百度首頁的"charset"值一致,也可以解決此亂碼問題,如下命令:
set LANG="gb2312"
export LANG
curl http://www.baidu.com
iconv命令的詳細語法:
iconv [選項..] [檔案..]
選項:
-f 輸入編碼
-t 輸出編碼
-l 列出所有已知的編碼
-o 輸出檔案
對比採用phpCURL庫的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頭部資訊的一個數組
後者是將標頭檔案的資訊以資料流的方式輸出