A preserved archive of the Logical Gamers community forums, 2009-2025. The original threads and posts, served read-only. Registration, posting and private messages are gone for good.

[Python] Session Class

1k views · started by Riddle ·
#1
[Python] Session Class
Last Tested in Python Version: 3.1.2

Basically an HTTP Wrapper for Python.

Feel free to add any functions you'd like to see in the class, or make any changes. I'll gladly edit the post here.

If anyone can manage to add Proxy support to this class, it would be beneficial for everyone. :)

Again, it hasn't been fully documented yet. I'll try to get to it ASAP.

#!/usr/bin/env python

#####################
#Author: Riddle
#Website: www.logicalgamers.com
#E-mail: NONE
#Version: 0.9.1
#####################

import general
from urllib.parse import urlencode
import urllib.request
import gzip
import http.cookiejar
import socket
import io

socket.setdefaulttimeout(10)

class HTTP:

def __init__(self, user_agent = 'Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US) AppleWebKit/533.4 (KHTML, like Gecko) Chrome/5.0.375.86 Safari/533.4'):
self.USER_AGENT = user_agent
self.ENCODING = 'gzip'

self.ID = None
self.Cookie_Jar = http.cookiejar.LWPCookieJar()

self.Last_URL = None
self.Referer = None

def Set_Referer (self, Ref = None):
self.Referer = Ref

def Clear_Cookies (self):
self.Cookie_Jar.clear_session_cookies()

def Get_Opener (self):
Opener = urllib.request.build_opener(urllib.request.HTTPCookieProcessor(self.Cookie_Jar))

if self.Referer != None and self.ENCODING != None:
Opener.addheaders = [('User-Agent', self.USER_AGENT),('Accept-Encoding', self.ENCODING),('Referer', self.Referer)]
elif self.Referer != None and self.ENCODING == None:
Opener.addheaders = [('User-Agent', self.USER_AGENT),('Referer', self.Referer)]
elif self.Referer == None and self.ENCODING != None:
Opener.addheaders = [('User-Agent', self.USER_AGENT), ('Accept-Encoding', self.ENCODING)]
else:
Opener.addheaders = [('User-Agent', self.USER_AGENT)]

self.Referer = None

return Opener

def POST (self, URL, Data):
if Data.__class__ == dict:
Data = urllib.parse.urlencode(Data)

return self.GET(URL, Data)

def GET (self, URL, Data = None, enc = "utf-8"):
try:
Request = urllib.request.Request(URL, Data)
Opener = self.Get_Opener()
Contents = Opener.open(Request)
Source = Contents.read()
if self.ENCODING == 'gzip':
try:
Compressed_Data = io.BytesIO(Source)
Decompressed_Data = gzip.GzipFile(fileobj = Compressed_Data)
Source = Decompressed_Data.read()

except:
general.General().Log_Error("Error decoding GZip.\nURL: " + URL + "\nData: " + Data + "\n\n")

return str(Source,enc)

except:
return "__ERROR__"

def Get_Last_URL(self):
return self.Last_URL

def Set_Last_URL(self, URL = None):
self.Last_URL = URL

def Save_Image(self, URL, path = None):
Opener = urllib.request.build_opener()
Contents = Opener.open(URL)
Image = Contents.read()
general.General().Str_To_File(Image,path,'wb')


Changelog:

  • 6/30/2010: Added version doc. in the class. Need to add proxy support.
  • 7/4/2010: Version 0.9.1; Added Save_Image().
#2
Updated, see changelog.
#3
Updated, see changelog.
#5
Updated for Python 3.2. Just an issue with encoding:

#!/usr/bin/env python

#####################
#Author: Riddle
#Website: www.logicalgamers.com
#E-mail: NONE
#Version: 0.9.1
#####################

import general
from urllib.parse import urlencode
import urllib.request
import gzip
import http.cookiejar
import socket
import io

socket.setdefaulttimeout(10)

class HTTP:

def __init__(self, user_agent = 'Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US) AppleWebKit/533.4 (KHTML, like Gecko) Chrome/5.0.375.86 Safari/533.4'):
self.USER_AGENT = user_agent
self.ENCODING = 'gzip'

self.ID = None
self.Cookie_Jar = http.cookiejar.LWPCookieJar()

self.Last_URL = None
self.Referer = None

def Set_Referer (self, Ref = None):
self.Referer = Ref

def Clear_Cookies (self):
self.Cookie_Jar.clear_session_cookies()

def Get_Opener (self):
Opener = urllib.request.build_opener(urllib.request.HTTPCookieProcessor(self.Cookie_Jar))

if self.Referer != None and self.ENCODING != None:
Opener.addheaders = [('User-Agent', self.USER_AGENT),('Accept-Encoding', self.ENCODING),('Referer', self.Referer)]
elif self.Referer != None and self.ENCODING == None:
Opener.addheaders = [('User-Agent', self.USER_AGENT),('Referer', self.Referer)]
elif self.Referer == None and self.ENCODING != None:
Opener.addheaders = [('User-Agent', self.USER_AGENT), ('Accept-Encoding', self.ENCODING)]
else:
Opener.addheaders = [('User-Agent', self.USER_AGENT)]

self.Referer = None

return Opener

def POST (self, URL, Data):
if Data.__class__ == dict:
Data = urllib.parse.urlencode(Data)
Data = Data.encode( 'utf8' ) # Fix for version 3.2. Convert to bytes.

return self.GET(URL, Data)

def GET (self, URL, Data = None, enc = "utf-8"):
try:
Request = urllib.request.Request(URL, Data)
Opener = self.Get_Opener()
Contents = Opener.open(Request)
Source = Contents.read()
if self.ENCODING == 'gzip':
try:
Compressed_Data = io.BytesIO(Source)
Decompressed_Data = gzip.GzipFile(fileobj = Compressed_Data)
Source = Decompressed_Data.read()

except:
general.General().Log_Error("Error decoding GZip.\nURL: " + URL + "\nData: " + Data + "\n\n")

return str(Source,enc)

except:
return "__ERROR__"


def Get_Last_URL(self):
return self.Last_URL

def Set_Last_URL(self, URL = None):
self.Last_URL = URL

def Save_Image(self, URL, path = None):
Opener = urllib.request.build_opener()
Contents = Opener.open(URL)
Image = Contents.read()
general.General().Str_To_File(Image,path,'wb')