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多线程编程简单介绍
Apr 13 Python
讲解Python中if语句的嵌套用法
May 14 Python
python实现图片变亮或者变暗的方法
Jun 01 Python
使用简单工厂模式来进行Python的设计模式编程
Mar 01 Python
Python代码解决RenderView窗口not found问题
Aug 28 Python
python3实现ftp服务功能(客户端)
Mar 24 Python
Python字符串拼接的几种方法整理
Aug 02 Python
python在非root权限下的安装方法
Jan 23 Python
在python中利用KNN实现对iris进行分类的方法
Dec 11 Python
Python异常原理及异常捕捉实现过程解析
Mar 25 Python
13个Pandas实用技巧,助你提高开发效率
Aug 19 Python
使用Djongo模块在Django中使用MongoDB数据库
Jun 20 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
在线增减.htpasswd内的用户
2006/10/09 PHP
php连接mysql数据库代码
2009/03/10 PHP
PHP与SQL语句写一句话木马总结
2019/10/11 PHP
IE8 浏览器Cookie的处理
2009/01/31 Javascript
一个可以兼容IE FF的加为首页与加入收藏实现代码
2009/11/02 Javascript
基于jquery的button默认enter事件(回车事件)。
2011/05/18 Javascript
Jquery上传插件 uploadify v3.1使用说明
2012/06/18 Javascript
解析John Resig Simple JavaScript Inheritance代码
2012/12/03 Javascript
JQuery中根据属性或属性值获得元素(6种情况获取方法)
2013/01/17 Javascript
jQuery中outerWidth()方法用法实例
2015/01/19 Javascript
javascript转换日期字符串为Date日期对象的方法
2015/02/13 Javascript
基于javascript实现样式清新图片轮播特效
2016/03/30 Javascript
JS判断浏览器是否安装flash插件的简单方法
2016/09/13 Javascript
Node.js中用D3.js的方法示例
2017/01/16 Javascript
简单谈谈vue的过渡动画(推荐)
2017/10/11 Javascript
vue router 配置路由的方法
2018/07/26 Javascript
微信小程序实现收货地址左滑删除
2020/11/18 Javascript
[49:21]完美世界DOTA2联赛循环赛 Ink Ice vs LBZS BO2第二场 11.05
2020/11/06 DOTA
Python网页解析利器BeautifulSoup安装使用介绍
2015/03/17 Python
Django中传递参数到URLconf的视图函数中的方法
2015/07/18 Python
Python中return语句用法实例分析
2015/08/04 Python
浅析使用Python操作文件
2017/07/31 Python
Python线程下使用锁的技巧分享
2018/09/13 Python
django 类视图的使用方法详解
2019/07/24 Python
Python队列、进程间通信、线程案例
2019/10/25 Python
Python tkinter实现简单加法计算器代码实例
2020/05/13 Python
keras 实现轻量级网络ShuffleNet教程
2020/06/19 Python
python的scipy.stats模块中正态分布常用函数总结
2021/02/19 Python
一百多行代码实现react拖拽hooks
2021/03/23 Javascript
函授本科毕业自我鉴定
2013/10/09 职场文书
回门宴父母答谢词
2014/01/26 职场文书
2014迎国庆标语大全
2014/09/19 职场文书
办理收楼委托书范本
2014/10/09 职场文书
2014年政协工作总结
2014/12/09 职场文书
2016年重阳节慰问信
2015/12/01 职场文书
Redis配置外网可访问(redis远程连接不上)的方法
2022/12/24 Redis