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基于xml parse实现解析cdatasection数据
Sep 30 Python
Python转换HTML到Text纯文本的方法
Jan 15 Python
Python数据类型详解(一)字符串
May 08 Python
Python批量更改文件名的实现方法
Oct 29 Python
Python 获取主机ip与hostname的方法
Dec 17 Python
用Python和WordCloud绘制词云的实现方法(内附让字体清晰的秘笈)
Jan 08 Python
Django 使用easy_thumbnails压缩上传的图片方法
Jul 26 Python
使用Tensorflow-GPU禁用GPU设置(CPU与GPU速度对比)
Jun 30 Python
详解python百行有效代码实现汉诺塔小游戏(简约版)
Oct 30 Python
python文件名批量重命名脚本实例代码
Apr 22 Python
将Python代码打包成.exe可执行文件的完整步骤
May 12 Python
pandas求平均数和中位数的方法实例
Aug 04 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
批量获取memcache值并按key的顺序返回的实现代码
2011/06/14 PHP
js停止输出代码
2008/07/20 Javascript
JS注释所产生的bug 即使注释也会执行
2013/11/19 Javascript
再探JavaScript作用域
2014/09/24 Javascript
js格式化时间小结
2014/11/03 Javascript
jQuery对象初始化的传参方式
2015/02/26 Javascript
javascript Promise简单学习使用方法小结
2016/05/17 Javascript
深入剖析JavaScript面向对象编程
2016/07/12 Javascript
jquery计算出left和top,让一个div水平垂直居中的简单实例
2016/07/13 Javascript
快速移动鼠标触发问题及解决方法(ECharts外部调用保存为图片操作及工作流接线mouseenter和mouseleave)
2016/08/29 Javascript
javascript实现获取指定精度的上传文件的大小简单实例
2016/10/25 Javascript
详解jQuery中的事件
2016/12/14 Javascript
Node.js开发第三方微信公众平台
2017/06/05 Javascript
vue 虚拟dom的patch源码分析
2018/03/01 Javascript
jQuery实现获取动态添加的标签对象示例
2018/06/28 jQuery
Angular父子组件通过服务传参的示例方法
2018/10/31 Javascript
vue组件之间的数据传递方法详解
2019/04/19 Javascript
vue实现树形结构样式和功能的实例代码
2019/10/15 Javascript
如何基于JS截获动态代码
2019/12/25 Javascript
JS实现多选框的操作
2020/06/24 Javascript
javascript前端和后台进行数据交互方法示例
2020/08/07 Javascript
javascript实现时钟动画
2020/12/03 Javascript
深入探究Python中变量的拷贝和作用域问题
2015/05/05 Python
python创建列表并给列表赋初始值的方法
2015/07/28 Python
python scrapy爬虫代码及填坑
2019/08/12 Python
pytorch进行上采样的种类实例
2020/02/18 Python
UGG雪地靴德国官网:UGG德国
2016/11/19 全球购物
环保建议书500字
2014/05/14 职场文书
体育专业求职信
2014/07/16 职场文书
收款委托书
2014/10/14 职场文书
2014年小班保育员工作总结
2014/12/23 职场文书
2015年高校辅导员工作总结
2015/04/20 职场文书
初中体育教学随笔
2015/08/15 职场文书
聘用合同范本
2015/09/21 职场文书
redis数据一致性的实现示例
2022/03/18 Redis
一行Python命令实现批量加水印
2022/04/07 Python