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中输出ASCII大文字、艺术字、字符字小技巧
Apr 28 Python
Python中线程的MQ消息队列实现以及消息队列的优点解析
Jun 29 Python
python开发环境PyScripter中文乱码问题解决方案
Sep 11 Python
Python贪心算法实例小结
Apr 22 Python
python 对dataframe下面的值进行大规模赋值方法
Jun 09 Python
Flask入门之上传文件到服务器的方法示例
Jul 18 Python
Django打印出在数据库中执行的语句问题
Jul 25 Python
Python多线程爬取豆瓣影评API接口
Oct 22 Python
TensorFLow 变量命名空间实例
Feb 11 Python
Idea安装python显示无SDK问题解决方案
Aug 12 Python
Ubuntu权限不足无法创建文件夹解决方案
Nov 14 Python
详解python网络进程
Jun 15 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 获取select下拉列表框的值
2010/05/08 PHP
php学习之数据类型之间的转换介绍
2011/06/09 PHP
Thinkphp模板中使用自定义函数的方法
2012/09/23 PHP
PHP函数之日期时间函数date()使用详解
2013/09/09 PHP
php calender(日历)二个版本代码示例(解决2038问题)
2013/12/24 PHP
redis查看连接数及php模拟并发创建redis连接的方法
2016/12/15 PHP
PHP序列化的四种实现方法与横向对比
2018/11/29 PHP
PHP 多进程与信号中断实现多任务常驻内存管理实例方法
2019/10/04 PHP
Mootools 1.2教程 类(一)
2009/09/15 Javascript
Javascript中获取出错代码所在文件及行数的代码
2010/09/23 Javascript
jquery checkbox实现单选小例
2013/11/27 Javascript
javascript读取xml实现javascript分页
2013/12/13 Javascript
js实现连个数字相加而不是拼接的方法
2014/02/23 Javascript
javascript中Array数组的迭代方法实例分析
2015/02/04 Javascript
javascript结合Canvas 实现简易的圆形时钟
2015/03/11 Javascript
JS显示下拉列表框内全部元素的方法
2015/03/31 Javascript
用JavaScript实现页面重定向功能的教程
2015/06/04 Javascript
jQuery实现类似标签风格的导航菜单效果代码
2015/08/25 Javascript
JavaScript组件开发完整示例
2015/12/15 Javascript
jQuery remove()过滤被删除的元素(推荐)
2017/07/18 jQuery
如何让你的JS代码更好看易读
2017/12/01 Javascript
JS实现图片懒加载(lazyload)过程详解
2020/04/02 Javascript
使用 Github Actions 自动部署 Angular 应用到 Github Pages的方法
2020/07/20 Javascript
小程序组件传值和引入sass的方法(使用vant Weapp组件库)
2020/11/24 Javascript
Python机器学习之K-Means聚类实现详解
2018/02/22 Python
Python3.6通过自带的urllib通过get或post方法请求url的实例
2018/05/10 Python
python 批量修改/替换数据的实例
2018/07/25 Python
使用HTML5做的导航条详细步骤
2020/10/19 HTML / CSS
Sneaker Studio罗马尼亚网站:购买运动鞋
2018/11/04 全球购物
英国网上电器商店:Electricshop
2020/03/15 全球购物
酒店led欢迎词
2014/01/09 职场文书
安全责任书范文
2014/03/12 职场文书
大学生优秀班干部事迹材料
2014/05/26 职场文书
校园安全广播稿范文
2014/09/25 职场文书
Windows下redis下载、redis安装及使用教程
2021/06/02 Redis
spring项目中切面及AOP的使用方法
2021/06/26 Java/Android