以下是一段 python 程式,它的功能是用來取得 http://robotexp.blogspot.com/ 也就是本站的內容
#! /usr/bin/env python
import pycurl class GetPage: def __init__ (self, url): self.contents = '' self.url = url def read_page (self, buf): self.contents = self.contents + buf def show_page (self): print self.contents mypage = GetPage("http://robotexp.blogspot.com/") testcurl = pycurl.Curl() testcurl.setopt(testcurl.URL, mypage.url) testcurl.setopt(testcurl.WRITEFUNCTION, mypage.read_page) testcurl.perform() testcurl.close() mypage.show_page()
執行這支程式時會將整個頁面 html 下載並顯示在終端機上,然而我們希望 curl 讀取網頁時它的行為能更像一般瀏覽器,首先我們希望它向網站發出 Request 時做一些偽裝。
以下為利用 wireshark 擷取 pycurl 預設的 GET Request:
GET / HTTP/1.1
User-Agent: PycURL/7.19.5
Host: robotexp.blogspot.com
Accept: */*
實際上網頁伺服器會紀錄這些 Request 訊息,伺服器管理者可以從這段訊息的 User-Agent 得知使用者以哪種瀏覽器瀏覽網頁,而 User-Agent: PycURL/7.19.5 很明顯暴露使用者不是以瀏覽器來瀏覽網頁,因此必須修改 curl 的 User-Agent 設定使它看起來像一般瀏覽器,以下我們就讓 curl 偽裝成 Opera 吧!
將先前的程式碼修改如下,即可將 User-Agent 訊息置換成 Opera:
#! /usr/bin/env python
import pycurl class GetPage: def __init__ (self, url): self.contents = '' self.url = url def read_page (self, buf): self.contents = self.contents + buf def show_page (self): print self.contents class GetPageByFakeBrowser(GetPage): def __init__ (self, url, ua): self.contents = '' self.url = url self.ua = ua mypage = GetPageByFakeBrowser( \ "http://robotexp.blogspot.com/", \ "Opera/9.80 (Windows NT 5.1; U; cs) Presto/2.2.15 Version/10.00") testcurl = pycurl.Curl() testcurl.setopt(testcurl.URL, mypage.url) testcurl.setopt(testcurl.USERAGENT, mypage.ua) testcurl.setopt(testcurl.WRITEFUNCTION, mypage.read_page) testcurl.perform() testcurl.close() mypage.show_page()
沒有留言:
張貼留言