[python] https+proxy

Discussion in 'PHP' started by redvel, 25 Sep 2011.

  1. redvel

    redvel New Member

    Joined:
    12 Jan 2010
    Messages:
    9
    Likes Received:
    2
    Reputations:
    0
    Как в urllib2 сделать, чтоб соединение https шло через прокси-сервер. Вот взял я прокси, предварительно проверил, поддерживает ли он https(вбил в оперу и зашел на сайт проверки айпи через https, сайт показывал айпи прокси, тоесть все норм), дальше написал такой код:
    PHP:
    class atape_http_client:
       
    def __init__(selfproxy=Noneuser_agent='Mozilla/5.0 (X11; U; Linux i686; ru; rv:1.9.2.3) Gecko/20100423 Ubuntu/10.04 (lucid) Firefox/3.6.3'):
            
    self.cookie_handler=urllib2.HTTPCookieProcessor(cookielib.CookieJar())
            
    self.redirect_handler urllib2.HTTPRedirectHandler()
            
    self.http_handler     urllib2.HTTPHandler()
            
    self.https_handler    urllib2.HTTPSHandler()
            
    self.opener urllib2.build_opener(self.http_handlerself.https_handler,self.cookie_handlerself.redirect_handler)
            if 
    proxy:
                
    self.proxy_handler urllib2.ProxyHandler(proxy)
                
    self.opener.add_handler(self.proxy_handler)
            
    self.opener.addheaders = [('User-agent'user_agent)]
            
    urllib2.install_opener(self.opener)
       
    def request(selfurlparams={}, timeout=5):
            if 
    params:
                
    params urllib.urlencode(params)
                
    html urllib2.urlopen(urlparams)
            else:
                
    html urllib2.urlopen(url)
            return 
    html.read()
    myproxy='127.0.0.1:8080'
    atape=atape_http_client(proxy={'http':proxy})
    d1=atape.request('https://mysite.com/')
    Но такой код выдает ошибку. Что я сделал не так?
     
    #1 redvel, 25 Sep 2011
    Last edited: 25 Sep 2011
  2. emmy

    emmy Member

    Joined:
    12 Oct 2009
    Messages:
    76
    Likes Received:
    17
    Reputations:
    8
    Отсутствие пробелов и табов делает питон не тьюринг-полным языком :D
    Восстанавливай форматирование
     
  3. redvel

    redvel New Member

    Joined:
    12 Jan 2010
    Messages:
    9
    Likes Received:
    2
    Reputations:
    0
    Сорри, просто со смарта пишу
     
  4. redvel

    redvel New Member

    Joined:
    12 Jan 2010
    Messages:
    9
    Likes Received:
    2
    Reputations:
    0
    Отредактировал код, жду предложений
     
  5. Gifts

    Gifts Green member

    Joined:
    25 Apr 2008
    Messages:
    2,494
    Likes Received:
    807
    Reputations:
    614
    redvel вы устанавливаете прокси для HTTP протокола, а не HTTPS proxy={'http':proxy}

    Плюс прокси, через которую работаете - должна поддерживать работу с HTTPS

    Покажите ошибку, которую выдает данный код
     
    _________________________
  6. redvel

    redvel New Member

    Joined:
    12 Jan 2010
    Messages:
    9
    Likes Received:
    2
    Reputations:
    0
    Это опечатка, у меня в коде {'https':proxy} :)
    Вот ошибка:
    URLError: <urlopen error (8, 'EOF occurred in violation of protocol')
    А как проверить прокси? я в первом посте написал как я делал, или так не катит?
     
  7. Gifts

    Gifts Green member

    Joined:
    25 Apr 2008
    Messages:
    2,494
    Likes Received:
    807
    Reputations:
    614
    redvel скачать например 3proxy и запустить с ключом "-l" чтобы посмотреть, что вы пытаетесь подключиться через прокси и что метод CONNECT работает

    Плюс у вас опечатка, не proxy, а myproxy

    Ваш код работает, проблема в прокси сервере
     
    _________________________
  8. redvel

    redvel New Member

    Joined:
    12 Jan 2010
    Messages:
    9
    Likes Received:
    2
    Reputations:
    0
    итак, перепробывал уже штук 20 прокси, причем, все они поддерживали метод Connect! Скрипт выдает все ту же ошибку( блин
     
  9. Kaimi

    Kaimi Well-Known Member

    Joined:
    23 Aug 2007
    Messages:
    1,732
    Likes Received:
    811
    Reputations:
    231
    А вдруг не поддерживали? Поставь Charles или CCProxy или Fiddler и проверь как будет этот код с ними работать.
     
    _________________________