2011-04-12 11 views
5

Google gmail giriş otomatize etmek için çalışmıyor ve iyi çalışıyor. Ancak, yaptığım bir uygulama için, mekaniği kullanarak gmail'e giriş yapmayı otomatikleştirmeye çalışıyorum. Yerel makinede geliştirme ortamında ve aynı zamanda appengine üzerinde çalıştıktan sonra çalışmaz.makineleştirmek ben makineleştirmek kullanılmış ve GAE bir uygulama dağıtmış AppEngine'de

Ben PSP kullanan Mod_python aracılığıyla benim sunucu üzerinde çalıştırmak için aynı komut dosyası kullanmak mümkün olmuştur.

Burada çözümleri bir sürü bulundu, ancak bunların hiçbiri benim için çalışmıyor gibi görünüyor.

<snip> 
br = mechanize.Browser() 
response = br.open("http://www.gmail.com") 
loginForm = br.forms().next() 
loginForm["Email"] = self.request.get('user') 
loginForm["Passwd"] = self.request.get('password') 
response = br.open(loginForm.click()) 
response2 = br.open("http://mail.google.com/mail/h/") 
result = response2.read() 
<snip> 

Ben sonucu baktığımızda elime AppEngine'de kullanılan giriş sayfanız: İşte benim kod snippet'idir. Ancak kendi sunucumda barındırılan mod_python ile, sayfayı kullanıcının gelen kutusuyla alırım.

+0

bize kod – systempuntoout

+0

Kodu göstermek veya bu olmadı! – jathanism

+0

Neden App Engine uygulamasından gmail'e giriş yapmayı otomatikleştirmeye çalışıyorsunuz? Bunun GMail için Hizmet Şartlarına açıkça aykırı olduğunun farkında mısınız ve yapmaya çalıştığınız şeyi yapmak için neredeyse kesinlikle daha iyi bir yol var mı? –

cevap

6

sorun Google GAE üzerinde urllib2 modülü sakat nasıl büyük olasılıkla.

Dahili olarak şimdi urlfetch modülünü (Google yazdığı bir şeydir) kullanan ve tamamen kaldırdık HTTPCookieProcessor() işlevselliği - anlamı, çerezler otomatik sitelere giriş yaparken kritik parçası olan talep etmek isteğinden kalıcı DEĞİLDİR programlı.

Orada bu etrafında bir yoldur, ama motorize kullanmıyor. Kendi Kurabiye işlemci rulo zorunda - burada aldı temel yaklaşımdır (mükemmel değil, ama bu iş bitmiş olur): yöntemle hariç, sen urllib2.urlopen olur gibi

import urllib, urllib2, Cookie 
from google.appengine.api import urlfetch 
from urlparse import urljoin 
import logging 

class GAEOpener(object): 
    def __init__(self): 
     self.cookie = Cookie.SimpleCookie() 
     self.last_response = None 

    def open(self, url, data = None): 
     base_url = url 
     if data is None: 
      method = urlfetch.GET 
     else: 
      method = urlfetch.POST 
     while url is not None: 
      self.last_response = urlfetch.fetch(url = url, 
       payload = data, 
       method = method, 
       headers = self._get_headers(self.cookie), 
       allow_truncated = False, 
       follow_redirects = False, 
       deadline = 10 
       ) 
      data = None # Next request will be a get, so no need to send the data again. 
      method = urlfetch.GET 
      self.cookie.load(self.last_response.headers.get('set-cookie', '')) # Load the cookies from the response 
      url = urljoin(base_url, self.last_response.headers.get('location')) 
      if url == base_url: 
       url = None 
     return self.last_response 

    def _get_headers(self, cookie): 
     headers = { 
      'Host' : '<ENTER HOST NAME HERE>', 
      'User-Agent' : 'Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US; rv:1.9.1.2) Gecko/20090729 Firefox/3.5.2 (.NET CLR 3.5.30729)', 
      'Cookie' : self._make_cookie_header(cookie) 
      } 
     return headers 

    def _make_cookie_header(self, cookie): 
     cookie_header = "" 
     for value in cookie.values(): 
      cookie_header += "%s=%s; " % (value.key, value.value) 
     return cookie_header 

    def get_cookie_header(self): 
     return self._make_cookie_header(self.cookie) 

Sen kullanabilirsiniz kullanmak sadece "açık".

+0

Bu yüzden, makineleşme, isteklerin istenmesi durumunda çerezleri manuel olarak devam ettirmek için yamalıysa, o zaman hepsi iyi olmalıdır? – cerberos

İlgili konular