2011-05-18 13 views
5

मैं कुछ दिनों के लिए ASP.NET से मेरे Google अनुप्रयोग इंजन में प्रवेश करने की कोशिश की है, लेकिन कोई किस्मत के लिए लॉग इन। मैंने निम्नलिखित लेख पढ़े हैं और बुनियादी विचार प्राप्त किए हैं। लेकिन मेरे लिए कुछ भी काम नहीं करता है।
http://code.activestate.com/recipes/577217-routines-for-programmatically-authenticating-with-/ http://dalelane.co.uk/blog/?p=303
http://dalelane.co.uk/blog/?p=894
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-appप्रोग्राम गूगल करने के लिए एप्लिकेशन इंजन ग #

मैं क्या करना है पता है। 1) ClientLogin द्वारा एक प्रमाणीकरण टोकन प्राप्त करें। 2) Google ऐप इंजन से एक कुकी प्राप्त करें। 3) पोस्ट कुकी (हाँ, मैं, डेटा पोस्ट दूसरे भाग के बाद पुन: निर्देशित नहीं करना चाहते हैं) के साथ मेरे ऐप पर डेटा। लेकिन तीसरा हिस्सा मेरे लिए बिल्कुल काम नहीं करता है। यह मुझे 403 त्रुटि देता है। अगर मैं पाने के लिए पद्धति POST बदलने के लिए, कि काम करता है

- url: /do/something/ 
    script: something.py 
    login: admin 

: यहाँ मेरी कोड है:

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; 
} 

मेरे app.yaml इस तरह दिखता है। क्या कोई मुझे बता सकता है कि मैं डेटा कैसे पोस्ट कर सकता हूं?
धन्यवाद।

संपादित:
फिर भी प्रयास विफल। [: आवश्यक लॉगिन] app.yaml में बताया [सुरक्षित: हमेशा] मैं ऐसे में बदलने जैसे कई तरीके की कोशिश की है app.yaml है और आप https करने के लिए अनुरोध प्रोटोकॉल को बदलने, जोड़कर/_ah/लॉगिन करने के लिए पैरामीटर जारी है, लेकिन सभी को वे काम नहीं करते :(
मुझे पूरी तरह से पता नहीं है कि POST बिल्कुल काम क्यों नहीं करता है लेकिन कोई भी विचार?

उत्तर

3

मैंने इसे बनाया। मैं गलत ट्रैक पर था। यह ऐप की समस्या नहीं थी इंजन लेकिन Django। मैं Google ऐप इंजन पर Django-nonrel का उपयोग कर रहा हूं, और मैं पूरी तरह से @csrf_exempt सजावट करने वाले को अपने हैंडलर में रखना भूल गया। मुझे पहले भी यही समस्या थी, लेकिन फिर भी। वैसे भी, ऊपर दिया गया कोड स्पष्ट रूप से सही ढंग से काम कर रहा है शुरुआत में के बाद से। क्या एक स्मार्ट लड़का :)

संबंधित मुद्दे