欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

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

程序员文章站 2023-11-23 17:24:10
对python网页请求模块urllib2进行简单的封装。 例子: 复制代码 代码如下:#!/usr/bin/python#coding: utf-8import bas...

对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