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

发布时间:2019-08-31编辑:脚本学堂
分享一个python网页请求模块urllib2模块的简单封装代码,有需要的朋友参考下。

python/urllib2/ target=_blank class=infotextkey>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