这篇文章主要分享一个python网页请求模块urllib2模块的简单封装代码。
原文转自:http://www.jbxue.com/article/16585.html
对python网页请求模块urllib2进行简单的封装。
例子:
#!/usr/bin/python#coding: utf-8import base64import urllibimport urllib2import timeclass 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 nonedate: data for post or get, must be dict typetype: GET, POSTauth: option, if has the value must be 'base' or 'cookie'user: user for authpassword: password for authcookie: if request with cookie other header info: e.g. referer='www.sina.com.cn' '''self.url = urlself.data = dataself.type = typeself.auth = authself.user = userself.password = password self.cookie = cookieif 'referer' in header:self.referer = header[referer]else:self.referer = Noneif 'user-agent' in header:self.user_agent = header[user-agent]else:self.user_agent = Noneself.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().dictself.Res.close()except urllib2.HTTPError, e:self.code = e.codeprint edef get_code(self):return self.codedef get_url(self):return self.goal_urldef get_source(self): return self.sourcedef get_header_info(self):return self.head_dictdef get_cookie(self):if 'set-cookie' in self.head_dict:return self.head_dict['set-cookie']else:return Nonedef get_content_type(self):if 'content-type' in self.head_dict:return self.head_dict['content-type']else:return Nonedef get_expires_time(self):if 'expires' in self.head_dict:return self.head_dict['expires']else:return Nonedef get_server_name(self):if 'server' in self.head_dict:return self.head_dict['server']else:return Nonedef __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
新闻热点
疑难解答