python网页请求urllib2模块简单封装代码
admin
2023-08-02 22:30:21
0

对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

相关内容

热门资讯

Mobi、epub格式电子书如... 在wps里全局设置里有一个文件关联,打开,勾选电子书文件选项就可以了。
定时清理删除C:\Progra... C:\Program Files (x86)下面很多scoped_dir开头的文件夹 写个批处理 定...
scoped_dir32_70... 一台虚拟机C盘总是莫名奇妙的空间用完,导致很多软件没法再运行。经过仔细检查发现是C:\Program...
500 行 Python 代码... 语法分析器描述了一个句子的语法结构,用来帮助其他的应用进行推理。自然语言引入了很多意外的歧义,以我们...
小程序支付时提示:appid和... [Q]小程序支付时提示:appid和mch_id不匹配 [A]小程序和微信支付没有进行关联,访问“小...
pycparser 是一个用... `pycparser` 是一个用 Python 编写的 C 语言解析器。它可以用来解析 C 代码并构...
微信小程序使用slider实现... 众所周知哈,微信小程序里面的音频播放是没有进度条的,但最近有个项目呢,客户要求音频要有进度条控制,所...
65536是2的几次方 计算2... 65536是2的16次方:65536=2⁶ 65536是256的2次方:65536=256 6553...
Apache Doris 2.... 亲爱的社区小伙伴们,我们很高兴地向大家宣布,Apache Doris 2.0.0 版本已于...
项目管理和工程管理的区别 项目管理 项目管理,顾名思义就是专注于开发和完成项目的管理,以实现目标并满足成功标准和项目要求。 工...