у меня есть список, в котором некоторые элементы повторяются есть ли какая функция для создания списка без дублей или же модификации исходного?
Помогите, cookielib почему-то не принимает все куки. Есть такой код Code: def request(self, host, handler, request_body, verbose=0): # dummy request class for extracting cookies class CookieRequest(urllib2.Request): pass # dummy response class for extracting cookies class CookieResponse: def __init__(self, headers): self.headers = headers def info(self): return self.headers verbose = 0 crequest = CookieRequest('https://'+host+'/') # issue XML-RPC request h = self.make_connection(host) if verbose: h.set_debuglevel(1) self.send_request(h, handler, request_body) self.send_host(h, host) self.send_user_agent(h) # creating a cookie jar for my cookies cj = cookielib.LWPCookieJar() self.send_content(h, request_body) errcode, errmsg, headers = h.getreply() print str(headers) cresponse = CookieResponse(headers) cj.extract_cookies(cresponse, crequest) if len(cj) >0 and self.cookiefile != None: cj.save(self.cookiefile) if errcode != 200: raise xmlrpclib.ProtocolError( host + handler, errcode, errmsg, headers ) self.verbose = verbose try: sock = h._conn.sock except AttributeError: sock = None return self._parse_response(h.getfile(), sock) Приходящие заголовки выглядят так: Code: Server: nginx/0.6.32 Date: Mon, 18 May 2009 06:59:05 GMT Content-Type: text/xml; charset=utf-8 Connection: close Set-Cookie: SAPE=tra-ta-ta; path=/; domain=.sape.ru Expires: Thu, 19 Nov 1981 08:52:00 GMT Cache-Control: no-store, no-cache, must-revalidate, post-check=0, pre-check=0 Pragma: no-cache Set-Cookie: p=a8de899da4; expires=Tue, 18-May-2010 06:59:02 GMT; path=/; domain=.sape.ru Суть - сохраняет только куку "p", но не "SAPE" возможно из-за отсутствия аттрибута expires. Как настроить, чтобы сохранялись все куки?
Попробуй такой вариант: Code: import urllib2 import cookielib cookies = cookielib.CookieJar() proxy_handler = urllib2.ProxyHandler({"http":"10.10.10.10:3128"}) opener = urllib2.build_opener(urllib2.HTTPCookieProcessor(cookies), proxy_handler,) urllib2.install_opener(opener) temp_headers = urllib2.urlopen("www.sape.ru").info() print cookies По идее должны схаваться все куки - у меня по крайней мере ни разу не было проблем с таким вариантом - всгда все было ок, код твой если честно то просто не могу понять, наверное слишком глубоко для мну
login999 Спасибо, но не то, это функция из класса для транспорта XMLRPC Проблема оказалась проста. cookiejar.save не сохранял expired куки, там специальный флаг для этого
недавно посетила мысль о том что понемногу заменить PyCurl на стандартные библиотеки. И тут возникли два вопроса, что пока не смог решить: Как запустить запрос через Socks4/5 Как запустить запрос по https
urllib2 для http проксей, куков и т.д. для сокс свой openner написать, там не слишком сложно. Кстати как напишешь - плз выложи, интересно.
PyCurl - выбросить нафик, ибо это: 1. PHP -подход к Python 2. Глючность , если внимательно погуглишь на тему вот этого поста то увидишь что это сишная ошибка, вылазила эта гадость при использовании pyCurl Socks4/Socks5 - SocksiPy https через Urllib2 без проблем открывается, никаких шаманств не нужно, правда нету handler для работы с https через прокси - придется что-то выдумывать на эту тему , на activestate есть пример кстати P.S. Народ подскажите как НОРМАЛЬНО реализовать такую вот цацку: Code: def Counter(Count=[0,]): Count.append(Count[0]+1) del Count[0] return Count[0] она то делает все что мне нужно - запоминает показания счетчика, только мну считает что юзать список ради этого дела некошерно, хотелось бы ФУНКЦИЮ, и чтоб он запоминала именно int делать переменную не проканает так как я заипусь потом прописывать global Counter везде где мне нужно будет его изменить, а global в функциях есть некошерно
Хотелось бы стандартными средствами... Если использовать сторонние библиотеки, то нашел http://socksipy.sourceforge.net/ , типа работа как с сокетами, только через сокс, если все работает, то достаточно интересно. А если самому реализовывать, то интересно посмотреть на этот исходник: http://www.koders.com/python/fidE472F1B0D8A02578C8960D2A1648A8D6049C6A40.aspx?s=icq#L114 Ну тогда при моих интересах в принципе рано уходить от PyCurl, но правда меня смущает тот факт(как бы поэтому я и решил посмотреть что есть по данному вопросу) что нету версии PyCurl для Windows для версии 2.6. Хотя пока не собираюсь переходить на 2.6, ведь PyGame с которым активно играюсь пока что рекомендует 2.5... Но тенденция развития PyCurl не очень нравится (
блин! Не увидел, на новую страницу все перебросило, а я пропустил твой пост. Спасибо! Посмотрю! По поводу Курла не согласен что это ПХП подход. Курл такая же библиотека как и другие, и если она используется в многих языках - это не делает ее ПХП-шной )
PHP: def Counter(Count=[0,]): Count.append(Count[0]+1) del Count[0] return Count[0] А если так, тоесть глобальная переменная конечно есть, но одна в одном месте ): PHP: a = 0 def add(): global a a+=1 return a print add() print add()
Не совсем так, правильнее наверное будет сказать, что ее реализация есть под многие ЯП..., а вот пользуются ей в основной массе те, кто начал работать с PHP, а потом переходит на другие ЯП и ищут те инструменты, которыми привыкли пользоваться, на нынешней стадии развития питона(я имею ввиду 2,6,2), то единственное чего он не умеет и что поддерживает курл-это работа через соксы ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ Моя ИМХА, не претендую на абсолютную правоту
Незачет - а теперь представь, что у меня 20 функций, которым нужно получение счетчика, причем все это чудо многопоточное и пиздючит ну допустим в 50 потоков... в эту функцию например не нужно даже локов встраивать, так как операция атомарная и при работе с threading проблем быть не должно (по крайней мере так написано), но я считаю некошерным то что для хранения одного-единственного числа приходится создавать список и потом с ним так извращаться То что я написал является паттерном типа - мну создает заготовки на все случаи жизни Использование же global : 1. Некошерно 2. Как пишут возможны проблемы как раз при многопоточности
login999 В твоей функции Lock, наверное, все же нужен: например, если поток выполняющий эту функцию исполнит код "Count.append(Count[0]+1)" и, не успев выполнить "del Count[0]", передаст управление другому потоку, который исполнит код этой функции целиком, то результат ее выполнения в первом потоке в итоге будет неверным. А использовать изменяемый объект в качестве дефолтного значения аргумента функции, на мой взгляд, даже "некошернее", чем использовать global. Как мне кажется, удобней было бы реализовать такой счетчик в виде класса.
Имхо классы это лишнее для таких целей Мну если честно интересует одно - функция-счетчик А насчет функции - я тут пораскинул моском - я не уверен насчет того, является ли del атомарной операцией, понял что я в этом не уверен и решил переделать эту функцию так: Code: def Counter (Number=[0]): Number[0] = Number[0]+1 return Number[0] А насчет того что там используется изменяемый обьект - и что же здесь плохого? Если такое присваивание возможно, то почему бы его не использовать ? Тупо одна операция присваивания, теперь точно без локов можно
Лок все равно нужен: "Number[0] = Number[0]+1" - не атомрно. А классы, хмм, они очень удобны, даже для таких простых вещей. Насчет изменяемых объектов: я ж не написал, что не стоит этого использовать, а написал, что это "некошерно". Потому как для кого-то, просматривающего код этой функции, может быть неочевидным то, что список Number будет использоваться один и тот же при каждом вызове функции.