轉:http://www.findspace.name/easycoding/1137
php
要加入 header,須要使用 Request 對象:html
#code1 import urllib2 request = urllib2.Request('http://www.baidu.com/') request.add_header('User-Agent', 'fake-client') response = urllib2.urlopen(request) print response.read()
對有些 header 要特別留意,服務器會針對這些 header 作檢查
User-Agent : 有些服務器或 Proxy 會經過該值來判斷是不是瀏覽器發出的請求
Content-Type : 在使用 REST 接口時,服務器會檢查該值,用來肯定 HTTP Body 中的內容該怎樣解析。常見的取值有:
application/xml : 在 XML RPC,如 RESTful/SOAP 調用時使用
application/json : 在 JSON RPC 調用時使用
application/x-www-form-urlencoded : 瀏覽器提交 Web 表單時使用
在使用服務器提供的 RESTful 或 SOAP 服務時, Content-Type 設置錯誤會致使服務器拒絕服務
再給一個詳細的:node
#Code2 import urllib,urllib2 url = 'http://www.super-ping.com/ping.php?node='+node+'&ping=www.google.com' headers = { 'Host':'www.super-ping.com', 'Connection':'keep-alive', 'Cache-Control':'max-age=0', 'Accept': 'text/html, */*; q=0.01', 'X-Requested-With': 'XMLHttpRequest', 'User-Agent': 'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/41.0.2272.89 Safari/537.36', 'DNT':'1', 'Referer': 'http://www.super-ping.com/?ping=www.google.com&locale=sc', 'Accept-Encoding': 'gzip, deflate, sdch', 'Accept-Language': 'zh-CN,zh;q=0.8,ja;q=0.6' } data = None req = urllib2.Request(url, data, headers) response = urllib2.urlopen(req) compressedData = response.read()
某些網站反感爬蟲的到訪,因而對爬蟲一概拒絕請求
這時候咱們須要假裝成瀏覽器,這能夠經過修改http包中的header來實現。
上面的例子裏面user-agent就是假裝過的。json
'User-Agent': 'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/41.0.2272.89 Safari/537.36',
某些站點有所謂的反盜鏈設置,其實說穿了很簡單,
就是檢查你發送請求的header裏面,referer站點是否是他本身,
因此咱們只須要像把headers的referer改爲該網站便可,以cnbeta爲例:瀏覽器
#Code3 headers = { 'Referer':'http://www.cnbeta.com/articles' }
headers是一個dict數據結構,你能夠放入任何想要的header,來作一些假裝。
例如,有些網站喜歡讀取header中的X-Forwarded-For來看看人家的真實IP,能夠直接把X-Forwarde-For改了。服務器
在Code2中最後獲取的數據是gzip壓縮過的(在這個樣例中返回的數據是服務器決定的),能夠寫進文件查看,對其進行解壓縮:數據結構
#Code4 import gzip,StringIO compressedData = response.read() compressedStream=StringIO.StringIO(compressedData) gzipper=gzip.GzipFile(fileobj=compressedStream) data=gzipper.read()
這裏寫的比較全app
http://blog.csdn.net/pleasecallmewhy/article/details/8925978網站