1. This site uses cookies. By continuing to use this site, you are agreeing to our use of cookies. Learn More.
  2. Anuncie Aqui
    Anuncie aqui você Também: fdantas@4each.com.br

[Python] How do you access an authenticated Google App Engine service from a (non-web) python...

Discussão em 'Python' iniciado por Stack, Setembro 9, 2025.

  1. Stack

    Stack Membro Participativo

    I have a Google App Engine app - http://mylovelyapp.appspot.com/ It has a page - mylovelypage

    For the moment, the page just does self.response.out.write('OK')

    If I run the following Python at my computer:

    import urllib2
    f = urllib2.urlopen("http://mylovelyapp.appspot.com/mylovelypage")
    s = f.read()
    print s
    f.close()


    it prints "OK"

    the problem is if I add login:required to this page in the app's yaml

    then this prints out the HTML of the Google Accounts login page

    I've tried "normal" authentication approaches. e.g.

    passman = urllib2.HTTPPasswordMgrWithDefaultRealm()

    auth_handler = urllib2.HTTPBasicAuthHandler()
    auth_handler.add_password(None,
    uri='http://mylovelyapp.appspot.com/mylovelypage',
    user='billy.bob@gmail.com',
    passwd='billybobspasswd')
    opener = urllib2.build_opener(auth_handler)
    urllib2.install_opener(opener)


    But it makes no difference - I still get the login page's HTML back.

    I've tried Google's ClientLogin auth API, but I can't get it to work.

    h = httplib2.Http()

    auth_uri = 'https://www.google.com/accounts/ClientLogin'
    headers = {'Content-Type': 'application/x-www-form-urlencoded'}
    myrequest = "Email=%s&Passwd=%s&service=ah&source=DALELANE-0.0" % ("billy.bob@gmail.com", "billybobspassword")
    response, content = h.request(auth_uri, 'POST', body=myrequest, headers=headers)

    if response['status'] == '200':
    authtok = re.search('Auth=(\S*)', content).group(1)

    headers = {}
    headers['Authorization'] = 'GoogleLogin auth=%s' % authtok.strip()
    headers['Content-Length'] = '0'

    response, content = h.request("http://mylovelyapp.appspot.com/mylovelypage",
    'POST',
    body="",
    headers=headers)

    while response['status'] == "302":
    response, content = h.request(response['location'], 'POST', body="", headers=headers)

    print content


    I do seem to be able to get some token correctly, but attempts to use it in the header when I call 'mylovelypage' still just return me the login page's HTML. :-(

    Can anyone help, please?

    Could I use the GData client library to do this sort of thing? From what I've read, I think it should be able to access App Engine apps, but I haven't been any more successful at getting the authentication working for App Engine stuff there either

    Any pointers to samples, articles, or even just keywords I should be searching for to get me started, would be very much appreciated.

    Thanks!

    Continue reading...

Compartilhe esta Página