Исключение нулевого указателя генерируется, когда приложение пытается использовать null в случае, когда требуется объект. К ним относятся:
null
. null
. null
, как если бы это был массив. null
, как если бы это был массив. null
как будто это было значение Throwable. Приложения должны бросать экземпляры этого класса, чтобы указать на другие незаконные использования объекта null
.
Ссылка: http://docs.oracle.com/javase/8/docs/api/java/lang/NullPointerException.html
appcfg.py, инструмент, который загружает данные на Механизм Приложения, должен сделать точно это для аутентификации себя с сервером Механизма Приложения. Соответствующая функциональность абстрагирована в appengine_rpc.py. Короче говоря решение:
можно также хотеть посмотреть _Authenticate, видеть, как appcfg обрабатывает различные коды возврата от ClientLogin, и _GetOpener, чтобы видеть, как appcfg создает urllib2 OpenerDirector, который не следует за перенаправлениями HTTP. Или Вы могли, на самом деле, просто использовать оптовую торговлю классами AbstractRpcServer и HttpRpcServer, так как они делают в значительной степени все, в чем Вы нуждаетесь.
благодаря Паукообразному насекомому для ответа - это работало, как предложено
, вот упрощенная копия кода, в случае, если полезно следующему человеку, который попробует!
import os
import urllib
import urllib2
import cookielib
users_email_address = "billy.bob@gmail.com"
users_password = "billybobspassword"
target_authenticated_google_app_engine_uri = 'http://mylovelyapp.appspot.com/mylovelypage'
my_app_name = "yay-1.0"
# we use a cookie to authenticate with Google App Engine
# by registering a cookie handler here, this will automatically store the
# cookie returned when we use urllib2 to open http://currentcost.appspot.com/_ah/login
cookiejar = cookielib.LWPCookieJar()
opener = urllib2.build_opener(urllib2.HTTPCookieProcessor(cookiejar))
urllib2.install_opener(opener)
#
# get an AuthToken from Google accounts
#
auth_uri = 'https://www.google.com/accounts/ClientLogin'
authreq_data = urllib.urlencode({ "Email": users_email_address,
"Passwd": users_password,
"service": "ah",
"source": my_app_name,
"accountType": "HOSTED_OR_GOOGLE" })
auth_req = urllib2.Request(auth_uri, data=authreq_data)
auth_resp = urllib2.urlopen(auth_req)
auth_resp_body = auth_resp.read()
# auth response includes several fields - we're interested in
# the bit after Auth=
auth_resp_dict = dict(x.split("=")
for x in auth_resp_body.split("\n") if x)
authtoken = auth_resp_dict["Auth"]
#
# get a cookie
#
# the call to request a cookie will also automatically redirect us to the page
# that we want to go to
# the cookie jar will automatically provide the cookie when we reach the
# redirected location
# this is where I actually want to go to
serv_uri = target_authenticated_google_app_engine_uri
serv_args = {}
serv_args['continue'] = serv_uri
serv_args['auth'] = authtoken
full_serv_uri = "http://mylovelyapp.appspot.com/_ah/login?%s" % (urllib.urlencode(serv_args))
serv_req = urllib2.Request(full_serv_uri)
serv_resp = urllib2.urlopen(serv_req)
serv_resp_body = serv_resp.read()
# serv_resp_body should contain the contents of the
# target_authenticated_google_app_engine_uri page - as we will have been
# redirected to that page automatically
#
# to prove this, I'm just gonna print it out
print serv_resp_body
Im, не слишком знакомый с AppEngine, или, Гуглит веб-пчелу, но для метода решения "в лоб" Вы могли записать, что сценарию с чем-то нравится, механизируют ( http://wwwsearch.sourceforge.net/mechanize/ ) для простого обхода посредством процесса входа в систему, прежде чем Вы начнете делать реальную работу клиента.
Я не эксперт по Python или эксперт по механизму приложения. Но Вы пробовали после образца, прикладного в http://code.google.com/appengine/docs/gettingstarted/usingusers.html . Я создал один в http://quizengine.appspot.com , это, казалось, хорошо работало с аутентификацией Google и всем. Просто предложение, но заглядывают к руководству по началу работы. Успокойтесь, если предложение звучит наивным.:) Спасибо.