, ancak hiçbir şans google için giriş. Aşağıdaki makaleleri okudum ve temel fikirleri aldım. Ama hiçbir şey benim için işe yaramıyor. http://krasserm.blogspot.com/2010/01/accessing-security-enabled-google-app.html http://blog.notdot.net/2010/05/Authenticating-against-App-Engine-from-an-Android-appProgramlı uygulama motor C#
http://dalelane.co.uk/blog/?p=894
http://code.activestate.com/recipes/577217-routines-for-programmatically-authenticating-with-/ http://dalelane.co.uk/blog/?p=303
ne yapacağımı biliyorum. 1) ClientLogin'den bir auth jetonu alın. 2) Google App Engine'den bir çerez alın. 3) Gönder çerezi (Evet, veri göndermek İkinci bölümde sonra yönlendirmez istiyorum) ile benim uygulamasına veri. Ama üçüncü bölümü tüm benim için çalışmaz. Bana 403 hatası veriyor. İşte benim kodudur:
void PostToGAE()
{
var auth = GetAuth(); // I can get the authtoken
var cookies = GetCookies(auth); // I can get the ACSID cookie
var url = string.Format("http://test.appspot.com/do/something/");
var content = "testvalue=test";
HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url);
request.KeepAlive = false;
request.CookieContainer = cookies;
byte[] byteArray = Encoding.UTF8.GetBytes(content);
request.ContentLength = byteArray.Length;
request.ContentType = "application/x-www-form-urlencoded";
request.Method = "POST";
Stream dataStream = request.GetRequestStream();
dataStream.Write(byteArray, 0, byteArray.Length);
dataStream.Close();
HttpWebResponse response = (HttpWebResponse)request.GetResponse(); // This gives me 403
Stream stream = response.GetResponseStream();
StreamReader reader = new StreamReader(stream);
string result = reader.ReadToEnd();
reader.Close();
}
CookieContainer GetCookies(string auth)
{
CookieContainer cookies = new CookieContainer();
var url = string.Format("http://test.appspot.com/_ah/login?auth={0}",
System.Web.HttpUtility.UrlEncode(auth));
HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url);
request.AllowAutoRedirect = false;
request.CookieContainer = cookies;
request.ContentType = "application/x-www-form-urlencoded";
request.Method = "GET";
HttpWebResponse response = (HttpWebResponse)request.GetResponse();
Stream stream = response.GetResponseStream();
StreamReader reader = new StreamReader(stream);
string result = reader.ReadToEnd();
reader.Close();
return cookies;
}
string GetAuth()
{
HttpWebRequest request = (HttpWebRequest)WebRequest.Create("http://www.google.com/accounts/ClientLogin");
var content = "[email protected]&Passwd=testpass&service=ah&accountType=HOSTED_OR_GOOGLE";
byte[] byteArray = Encoding.UTF8.GetBytes(content);
request.ContentLength = byteArray.Length;
request.ContentType = "application/x-www-form-urlencoded";
request.Method = "POST";
Stream dataStream = request.GetRequestStream();
dataStream.Write(byteArray, 0, byteArray.Length);
dataStream.Close();
HttpWebResponse response = (HttpWebResponse)request.GetResponse();
Stream stream = response.GetResponseStream();
StreamReader reader = new StreamReader(stream);
string loginStuff = reader.ReadToEnd();
reader.Close();
var auth = loginStuff.Substring(loginStuff.IndexOf("Auth")).Replace("Auth=", "").TrimEnd('\n');
return auth;
}
Benim app.yaml şöyle görünür:
- url: /do/something/
script: something.py
login: admin
Ben çalıştığını, GET için yöntem POST değiştirirseniz. Verileri nasıl gönderebileceğimi söyleyen var mı?
Teşekkürler. DÜZENLENMİŞ
:
Hala şanslar. App.yaml dosyasında [login: required] olarak değiştirerek, app.yaml'ye [güvenli: her zaman] ekleyerek ve https'e istek protokolünü değiştirerek, parametreyi/_ah/login öğesine eklemeye devam etmenin çeşitli yollarını denedim. onları işe yaramaz :(POST. GET ama hiç bir fikir neden çalışmıyor
tamamen fikrin yok mu?