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


Posted in Python onFebruary 07, 2014

对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
Python 相关文章推荐
python文件读写操作与linux shell变量命令交互执行的方法
Jan 14 Python
Python全局变量操作详解
Apr 14 Python
Python中几种导入模块的方式总结
Apr 27 Python
python实现按长宽比缩放图片
Jun 07 Python
对python GUI实现完美进度条的示例详解
Dec 13 Python
Django logging配置及使用详解
Jul 23 Python
浅析python内置模块collections
Nov 15 Python
Python 实现将数组/矩阵转换成Image类
Jan 09 Python
python中get和post有什么区别
Jun 19 Python
matplotlib 画双轴子图无法显示x轴的解决方法
Jul 27 Python
python 实现Harris角点检测算法
Dec 11 Python
python如何调用php文件中的函数详解
Dec 29 Python
python解析xml模块封装代码
Feb 07 #Python
python 解析XML python模块xml.dom解析xml实例代码
Feb 07 #Python
python合并文本文件示例
Feb 07 #Python
python实现哈希表
Feb 07 #Python
python处理cookie详解
Feb 07 #Python
urllib2自定义opener详解
Feb 07 #Python
python解析html开发库pyquery使用方法
Feb 07 #Python
You might like
用PHP和ACCESS写聊天室(一)
2006/10/09 PHP
yii2-GridView在开发中常用的功能及技巧总结
2017/01/07 PHP
PHP 访问数据库配置通用方法(json)
2018/05/20 PHP
firebug的一个有趣现象介绍
2011/11/30 Javascript
删除节点的jquery代码
2014/01/13 Javascript
Javascript遍历table中的元素示例代码
2014/07/08 Javascript
JS实现网页表格自动变大缩小的方法
2015/03/09 Javascript
原生js实现鼠标跟随效果
2017/02/28 Javascript
jquery PrintArea 实现票据的套打功能(代码)
2017/03/17 Javascript
Angular 2父子组件数据传递之@ViewChild获取子组件详解
2017/07/04 Javascript
认识less和webstrom的less配置方法
2017/08/02 Javascript
AngularJS实现的获取焦点及失去焦点时的表单验证功能示例
2017/10/25 Javascript
Vue使用vux-ui自定义表单验证遇到的问题及解决方法
2018/05/10 Javascript
微信小程序倒计时功能实例代码
2018/07/17 Javascript
微信小程序获取用户绑定手机号方法示例
2019/07/21 Javascript
javascript如何使用函数random来实现课堂随机点名方法详解
2020/07/28 Javascript
原生JS实现九宫格抽奖
2020/09/13 Javascript
巧用python和libnmapd,提取Nmap扫描结果
2016/08/23 Python
Python中的id()函数指的什么
2017/10/17 Python
Python3实现的字典、列表和json对象互转功能示例
2018/05/22 Python
一个可以套路别人的python小程序实例代码
2019/04/09 Python
python实现可变变量名方法详解
2019/07/01 Python
pycharm 安装JPype的教程
2019/08/08 Python
Python递归函数 二分查找算法实现解析
2019/08/12 Python
python 列表、字典和集合的添加和删除操作
2019/12/16 Python
浅谈python3 构造函数和析构函数
2020/03/12 Python
HTML5组件Canvas实现图像灰度化(步骤+实例效果)
2013/04/22 HTML / CSS
巴西网上药店:Drogaria Araujo
2021/01/06 全球购物
你的创业计划书怎样才能打动风投
2014/02/06 职场文书
餐饮部总监岗位职责范文
2014/02/13 职场文书
国培远程培训感言
2014/03/08 职场文书
中医学专业自荐信范文
2014/04/01 职场文书
数控专业毕业生求职信
2014/06/12 职场文书
红色革命电影观后感
2015/06/18 职场文书
2016年大学校运会广播稿件
2015/12/21 职场文书
开网店计划分析
2019/07/30 职场文书