|
对python网页请求模块urllib2进行简单的封装。
例子:
复制代码 代码如下: #!/usr/bin/python #coding: utf-8 import base64 import urllib import urllib2 import 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
(编辑:安卓应用网)
【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!
|