对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