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 Django连接MySQL数据库做增删改查
Nov 07 Python
《Python之禅》中对于Python编程过程中的一些建议
Apr 03 Python
python实现清屏的方法
Apr 30 Python
详解Python 2.6 升级至 Python 2.7 的实践心得
Apr 27 Python
分分钟入门python语言
Mar 20 Python
Python assert语句的简单使用示例
Jul 28 Python
Python分割训练集和测试集的方法示例
Sep 19 Python
Python调用C/C++的方法解析
Aug 05 Python
PyTorch如何搭建一个简单的网络
Aug 24 Python
python实现无边框进度条的实例代码
Dec 30 Python
python 第三方库paramiko的常用方式
Feb 20 Python
Python学习开发之图形用户界面详解
Aug 23 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实现的农历算法实例
2015/08/11 PHP
php使用glob函数遍历文件和目录详解
2016/09/23 PHP
Laravel下生成验证码的类
2017/11/15 PHP
说说掌握JavaScript语言的思想前提想学习js的朋友可以看看
2009/04/01 Javascript
编写自己的jQuery插件简单实现代码
2011/04/19 Javascript
jQuery图片预加载 等比缩放实现代码
2011/10/04 Javascript
Extjs优化(一)删除冗余代码提高运行速度
2013/04/15 Javascript
JavaScript的漂亮的代码片段
2013/06/05 Javascript
JavaScript、tab切换完整版(自动切换、鼠标移入停止、移开运行)
2016/01/05 Javascript
Vue响应式原理Observer、Dep、Watcher理解
2019/06/06 Javascript
微信小程序模板消息推送的两种实现方式
2019/08/27 Javascript
JS实现商品橱窗特效
2020/01/09 Javascript
javascript设计模式 ? 装饰模式原理与应用实例分析
2020/04/14 Javascript
vue使用svg文件补充-svg放大缩小操作(使用d3.js)
2020/09/22 Javascript
Python实现的HTTP并发测试完整示例
2020/04/23 Python
浅析python实现scrapy定时执行爬虫
2018/03/04 Python
python3获取当前文件的上一级目录实例
2018/04/26 Python
python 通过logging写入日志到文件和控制台的实例
2018/04/28 Python
python list是否包含另一个list所有元素的实例
2018/05/04 Python
Python动态语言与鸭子类型详解
2019/07/01 Python
python实现图片插入文字
2019/11/26 Python
ABOUT YOU罗马尼亚:超过600个时尚品牌
2019/09/19 全球购物
Ajax请求总共有多少种Callback
2016/07/17 面试题
大学生毕业自我评价范文分享
2013/11/11 职场文书
会计师职业生涯规划范文
2014/02/18 职场文书
大课间活动实施方案
2014/03/06 职场文书
优秀大学生求职自荐信范文
2014/04/19 职场文书
爱情保证书大全
2014/04/29 职场文书
优秀电子工程系毕业生求职信
2014/05/24 职场文书
2014年生产部工作总结
2014/12/17 职场文书
公务员考察材料
2014/12/23 职场文书
李强为自己工作观后感
2015/06/11 职场文书
企业廉洁教育心得体会
2016/01/20 职场文书
MySQL 查询速度慢的原因
2021/05/25 MySQL
golang用type-switch判断interface的实际存储类型
2022/04/14 Golang
python如何为list实现find方法
2022/05/30 Python