Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- import cookielib
- import urllib
- import urllib2
- import mimetools, mimetypes
- import os, stat
- class Callable:
- def __init__(self, anycallable):
- self.__call__ = anycallable
- # Controls how sequences are uncoded. If true, elements may be given multiple values by
- # assigning a sequence.
- doseq = 1
- class MultipartPostHandler(urllib2.BaseHandler):
- handler_order = urllib2.HTTPHandler.handler_order - 10 # needs to run first
- def http_request(self, request):
- data = request.get_data()
- if data is not None and type(data) != str:
- v_files = []
- v_vars = []
- try:
- for(key, value) in data.items():
- if type(value) == file:
- v_files.append((key, value))
- else:
- v_vars.append((key, value))
- except TypeError:
- systype, value, traceback = sys.exc_info()
- raise TypeError, "not a valid non-string sequence or mapping object", traceback
- if len(v_files) == 0:
- data = urllib.urlencode(v_vars, doseq)
- else:
- boundary, data = self.multipart_encode(v_vars, v_files)
- contenttype = 'multipart/form-data; boundary=%s' % boundary
- if(request.has_header('Content-Type')
- and request.get_header('Content-Type').find('multipart/form-data') != 0):
- print "Replacing %s with %s" % (request.get_header('content-type'), 'multipart/form-data')
- request.add_unredirected_header('Content-Type', contenttype)
- request.add_data(data)
- return request
- def multipart_encode(vars, files, boundary = None, buffer = None):
- if boundary is None:
- boundary = mimetools.choose_boundary()
- if buffer is None:
- buffer = ''
- for(key, value) in vars:
- buffer += '--%s\r\n' % boundary
- buffer += 'Content-Disposition: form-data; name="%s"' % key
- buffer += '\r\n\r\n' + value + '\r\n'
- for(key, fd) in files:
- file_size = os.fstat(fd.fileno())[stat.ST_SIZE]
- filename = fd.name.split('/')[-1]
- contenttype = mimetypes.guess_type(filename)[0] or 'application/octet-stream'
- buffer += '--%s\r\n' % boundary
- buffer += 'Content-Disposition: form-data; name="%s"; filename="%s"\r\n' % (key, filename)
- buffer += 'Content-Type: %s\r\n' % contenttype
- # buffer += 'Content-Length: %s\r\n' % file_size
- fd.seek(0)
- buffer += '\r\n' + fd.read() + '\r\n'
- buffer += '--%s--\r\n\r\n' % boundary
- return boundary, buffer
- multipart_encode = Callable(multipart_encode)
- https_request = http_request
- class minusSession():
- def __init__(self):
- self.loginHeaders = {}
- self.loginHeaders['Host'] = 'minus.com'
- self.loginHeaders['User-Agent'] = 'Mozilla/5.0 (Windows NT 6.1; WOW64; rv:16.0) Gecko/20100101 Firefox/16.0'
- self.loginHeaders['Accept'] = 'application/json, text/javascript, */*; q=0.01'
- self.loginHeaders['Accept-Language'] = 'fr,fr-fr;q=0.8,en-us;q=0.5,en;q=0.3'
- self.loginHeaders['Accept-Encoding'] = 'gzip, deflate'
- self.loginHeaders['Content-Type'] = 'application/x-www-form-urlencoded; charset=UTF-8'
- self.loginHeaders['X-Requested-With'] = 'XMLHttpRequest'
- self.loginHeaders['Referer'] = 'http://minus.com/'
- self.loginHeaders['DNT'] = '1'
- self.loginHeaders['Pragma'] = 'no-cache'
- self.loginHeaders['Cache-Control'] = 'no-cache'
- self.createFolderHeaders = {}
- self.createFolderHeaders['Host'] = 'minus.com'
- self.createFolderHeaders['User-Agent'] = 'Mozilla/5.0 (Windows NT 6.1; WOW64; rv:16.0) Gecko/20100101 Firefox/16.0'
- self.createFolderHeaders['Accept'] = 'application/json, text/javascript, */*; q=0.01'
- self.createFolderHeaders['Accept-Language'] = 'fr,fr-fr;q=0.8,en-us;q=0.5,en;q=0.3'
- self.createFolderHeaders['Accept-Encoding'] = 'gzip, deflate'
- self.createFolderHeaders['Referer'] = 'http://minus.com/'
- self.createFolderHeaders['Cookie'] = ''
- self.createFolderHeaders['DNT'] = '1'
- self.uploadHeaders = {}
- self.uploadHeaders['Host'] = 'minus.com'
- self.uploadHeaders['User-Agent'] = 'Mozilla/5.0 (Windows NT 6.1; WOW64; rv:16.0) Gecko/20100101 Firefox/16.0'
- self.uploadHeaders['Accept'] = 'text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8'
- self.uploadHeaders['Accept-Language'] = 'fr,fr-fr;q=0.8,en-us;q=0.5,en;q=0.3'
- self.uploadHeaders['Accept-Encoding'] = 'gzip, deflate'
- self.uploadHeaders['Referer'] = 'http://minus.com/'
- self.uploadHeaders['Content-Type'] = 'multipart/form-data; boundary=---------------------------36022435010291'
- self.uploadHeaders['Cookie'] = ''
- self.uploadHeaders['DNT'] = '1'
- self.uploadHeaders['Pragma'] = 'no-cache'
- self.uploadHeaders['Cache-Control'] = 'no-cache'
- def openSession(self,username,password):
- self.user = username
- self.psw = password
- data = "disable_safety_mode=0&web-login=true&login-username={0}&login-password={1}".format(username,password)
- cj = cookielib.CookieJar()
- #Create an opener to open pages using the http protocol and to process cookies.
- opener = urllib2.build_opener(urllib2.HTTPCookieProcessor(cj), urllib2.HTTPHandler())
- req = urllib2.Request("http://minus.com/api/login/login",data = data,headers = self.loginHeaders) #Create a post request
- f = opener.open(req)
- html = f.read()
- if html == '''{"success": true}''':
- self.uploadHeaders['Cookie'] = '' #clear cookies if already logged
- for cookie in cj:
- cookie = str(cookie).split(' ')[1]
- self.uploadHeaders['Cookie'] += cookie + '; '
- self.createFolderHeaders ['Cookie'] += cookie + '; '
- print self.uploadHeaders['Cookie']
- return 1
- else:
- return 0,html
- def upload(self,fileName):
- def createMinusFolder():
- opener = urllib2.build_opener(urllib2.HTTPHandler())
- req = urllib2.Request("http://minus.com/api/CreateGallery_Web/?d=1351809273415",headers = self.createFolderHeaders) #Create a post request
- f = opener.open(req)
- html = eval(f.read())
- return html['editor_id']
- def uploadFile(fileName,folderID):
- opener = urllib2.build_opener(MultipartPostHandler)
- url = 'http://minus.com/api/UploadItem_Web/?editor_id={0}&key=-&filename={1}'.format(folderID,os.path.basename(fileName.name))
- req = urllib2.Request(url,headers = self.uploadHeaders)
- params = {"file" : fileName }
- try:
- f = opener.open(req, params)
- return 1
- except:
- return 0
- folderId = createMinusFolder()
- rep = uploadFile(fileName,folderId)
- return rep
- session = minusSession()
- session.openSession('username','password')
- #ALWAYS USE "rb" TO OPEN A FILE
- session.upload(open("C:\\Users\\Gabriel\\Pictures\\01.jpg",'rb'))
Advertisement
Add Comment
Please, Sign In to add comment