Skip to content

Instantly share code, notes, and snippets.

@y-li
Created July 13, 2012 09:25
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save y-li/3103869 to your computer and use it in GitHub Desktop.
Save y-li/3103869 to your computer and use it in GitHub Desktop.
#!/usr/bin/env python
import sys, os, re
import urllib, urllib2
import cookielib
class Fluct_Web_API(object):
UA = 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_7_4) AppleWebKit/534.57.2 (KHTML, like Gecko) Version/5.1.7 Safari/534.57.2'
cookiefile = 'fluct_cookie.txt'
opener = None
cookiejar = None
def __init__(self):
self.cookiejar = cookielib.MozillaCookieJar(self.cookiefile)
if os.access(self.cookiefile, os.F_OK):
self.cookiejar.load()
self.opener = urllib2.build_opener(
urllib2.HTTPRedirectHandler(),
urllib2.HTTPHandler(debuglevel = 0),
urllib2.HTTPSHandler(debuglevel = 0),
urllib2.HTTPCookieProcessor(self.cookiejar)
)
self.opener.addheaders = [('User-agent', self.UA)]
def __del__(self):
self.cookiejar.save()
def setUA(self, UA):
i = 0
for item in self.opener.addheaders:
if re.match('[Uu]ser-[Aa]gent$', item[0]) != None:
del self.opener.addheaders[i]
break
i += 1
self.opener.addheaders.append(('User-agent', UA))
def print_response_info(self, response):
print response.url
print response.code, response.msg
print response.headers
def GET(self, URL, data = None):
if data != None:
return self.POST(URL, data)
try:
response = self.opener.open(URL)
content = response.read()
except Exception, e:
print >>sys.stderr, e.reason
return False, False
return response, content
def POST(self, URL, data):
try:
response = self.opener.open(URL, urllib.urlencode(data))
content = response.read()
except Exception, e:
print >>sys.stderr, e.reason
return False, False
return response, content
if __name__ == '__main__':
if len(sys.argv) < 2:
print >>sys.stderr, 'Tell me a URL!'
sys.exit(-1)
URL = sys.argv[1]
web = Fluct_Web_API()
response, content = web.GET(URL)
if response == False:
sys.exit(-1)
web.print_response_info(response)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment