python网页请求urllib2模块简单封装代码

1193次阅读  |  发布于5年以前

对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

Copyright© 2013-2020

All Rights Reserved 京ICP备2023019179号-8