00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024 import urllib2
00025 import urlparse
00026
00027 class _Request( urllib2.Request ):
00028 timeout = None
00029 def open(self):
00030 if self.timeout:
00031 return urllib2.urlopen(self, None, self.timeout)
00032 return urllib2.urlopen(self)
00033
00034 class _RequestFactory( object ):
00035 def __init__(self, baseurl, user_agent, timeout, proxy):
00036 self.base_url = baseurl
00037 self.user_agent = user_agent
00038 self.timeout = timeout
00039 self.proxy = proxy
00040
00041 def __call__(self, *args, **kwargs):
00042 return self.new_request(*args, **kwargs)
00043
00044 def new_request(self, url):
00045 url = urlparse.urljoin(self.base_url, url)
00046 req = _Request(url)
00047 req.timeout = self.timeout
00048 if self.proxy:
00049 req.set_proxy(self.proxy, 'http')
00050 if self.user_agent:
00051 req.add_header('User-Agent', self.user_agent)
00052 return req
00053
00054 _request = None
00055
00056 def ConnSetup(baseurl, user_agent=None, timeout=120, proxy=None):
00057 global _request
00058 if _request is None:
00059 _request = _RequestFactory(baseurl, user_agent, timeout, proxy)
00060
00061 def Request(url=None):
00062 global _request
00063 if _request is None:
00064 raise Exception("Request Factory not yet spawned")
00065 if url:
00066 return _request(url)
00067 return _request.base_url