python网页请求urllib2模块简单封装代码

对python网页请求模块urllib2进行简单的封装。

例子:

代码如下:

#!/usr/bin/python#coding: utf-8import base64import urllibimport urllib2import time

class sendrequest: ”’ this class use to set and request the http, and get the info of response. e.g. set authorization type, request tyep.. e.g. get html content, state code, cookie.. sendrequest(‘http://10.75.0.103:8850/2/photos/square/type.json’, data=’source=216274069′, type=’post’, auth=’base’, user=’zl2010′, password=’111111′) ”’ def __init__(self, url, data=none, type=’get’, auth=none, user=none, password=none, cookie = none, **header): ”’ url:request, raise error if none date: data for post or get, must be dict type type: get, post auth: option, if has the value must be ‘base’ or ‘cookie’ user: user for auth password: password for auth cookie: if request with cookie other header info: e.g. referer=’www.sina.com.cn’ ”’ self.url = url self.data = data self.type = type self.auth = auth self.user = user self.password = password self.cookie = cookie if ‘referer’ in header: self.referer = header[referer] else: self.referer = none if ‘user-agent’ in header: self.user_agent = header[user-agent] else: self.user_agent = none self.setup_request() self.send_request()

def setup_request(self): ”’ setup a request ”’ if self.url == none or self.url == ”: raise ‘the url should not empty!’ # set request type #print self.url #print self.type #print self.data #print self.auth #print self.user #print self.password if self.type == ‘post’: self.req = urllib2.request(self.url, self.data) elif self.type == ‘get’: if self.data == none: self.req = urllib2.request(self.url) else: self.req = urllib2.request(self.url + ‘?’ + self.data) else: print ‘the http request type not support now!’ ##set auth type if self.auth == ‘base’: if self.user == none or self.password == none: raise ‘the user or password was not given!’ else: auth_info = base64.encodestring(self.user + ‘:’ + self.password).replace(‘\n’,”) auth_info = ‘basic ‘ + auth_info #print auth_info self.req.add_header(“authorization”, auth_info) elif self.auth == ‘cookie’: if self.cookie == none: raise ‘the cookie was not given!’ else: self.req.add_header(“cookie”, self.cookie) else: pass ##add other auth type here

##set other header info if self.referer: self.req.add_header(‘referer’, self.referer) if self.user_agent: self.req.add_header(‘user-agent’, self.user_agent) def send_request(self): ”’ send a request ”’ # get a response object try: self.res = urllib2.urlopen(self.req) self.source = self.res.read() self.goal_url = self.res.geturl() self.code = self.res.getcode() self.head_dict = self.res.info().dict self.res.close() except urllib2.httperror, e: self.code = e.code print e

def get_code(self): return self.code def get_url(self): return self.goal_url def get_source(self): return self.source def get_header_info(self): return self.head_dict

def get_cookie(self): if ‘set-cookie’ in self.head_dict: return self.head_dict[‘set-cookie’] else: return none def get_content_type(self): if ‘content-type’ in self.head_dict: return self.head_dict[‘content-type’] else: return none def get_expires_time(self): if ‘expires’ in self.head_dict: return self.head_dict[‘expires’] else: return none def get_server_name(self): if ‘server’ in self.head_dict: return self.head_dict[‘server’] else: return none def __del__(self): pass

__all__ = [sendrequest,]if __name__ == ‘__main__’: ”’ the example for using the sendrequest class ”’ value = {‘source’:’216274069′} data = urllib.urlencode(value) url = ‘http://10.75.0.103:8850/2/photos/square/type.json’ user = ‘wz_0001’ password = ‘111111’ auth = ‘base’ type = ‘post’ t2 = time.time() rs = sendrequest(‘http://www.google.com’) #rs = sendrequest(url, data=data, type=type, auth=auth, user=user, password=password) print ‘t2: ‘ + str(time.time() – t2) print ‘—————get_code()—————‘ print rs.get_code() print ‘—————get_url()—————‘ print rs.get_url() print ‘—————get_source()—————‘ print rs.get_source() print ‘—————get_cookie()—————‘ print rs.get_cookie() rs = none