2016-05-07 13 views
13

मैं जब सांत्वना एप्लिकेशन या बिलाव सर्वर webapp के साथ परीक्षण, यह अच्छी तरह से चलाता है JSoup, साथ फेसबुक लॉगइन करने के लिए प्रयास करें:Jsoups Google अनुप्रयोग इंजन पर गलत तरीके से चलाने के

String userAgent = BrowserVersion.FIREFOX_38.getUserAgent(); 
    Connection conn1 = Jsoup.connect("https://m.facebook.com"); 
    Document document = conn1.userAgent(userAgent).execute().parse(); 
    Element form = document.select("form").get(0); 
    Elements inputs = form.select("input"); 


    Connection conn2 = Jsoup.connect(form.absUrl("action")).userAgent(userAgent); 
    for (Element input : inputs) { 
     conn2.data(input.attr("name"), input.val()); 
    } 
    conn2.data("email", "[email protected]").data("pass", "mypass"); 
    Connection.Response response1 = conn2.method(Connection.Method.POST).execute(); 
    System.out.println(response1.url()); 
    Document doc1 = response1.parse(); 
    Elements h3 = doc1.select("h3"); 
    for (Element element : h3) { 
     System.out.println(element.text()); 
    } 

response1.url() https://m.facebook.com/home.php?_rdr

है

लेकिन जब मैं गूगल एप इंजन अनुप्रयोग के साथ प्रयास करते हैं, यह लॉग इन नहीं कर सकते, लेकिन संदेश के साथ पेज से पता चलता "आप पहली बार के लिए लॉग इन करने के लिए है" (मुझे लगता है कि अनुरोध कुछ अन्य यूआरएल तक पहुँचने का प्रयास)

response1.url() https://m.facebook.com/login.php?next=https%3A%2F%2Fm.facebook.com%2Fhome.php%3Frefsrc%3Dhttps%253A%252F%252Fm.facebook.com%252F%26refid%3D8&refsrc=https%3A%2F%2Fm.facebook.com%2F&refid=8&_rdr

मैं पासवर्ड बदलने यह गलत बनाने के लिए, यह गलत-पासवर्ड पेज से पता चलता है। तो मुझे सही पासवर्ड के साथ लगता है, अनुरोध उचित पृष्ठ पर जाता है। लेकिन सही पासवर्ड के साथ, यह दूसरे पेज पर रीडायरेक्ट करता है? मुझे नहीं लगता कि कंसोल ऐप और जीएई के बीच कोई अलग बात है जो अनुरोध को अलग बनाती है!

+0

मैं पूछूंगा कि आप क्या करने की कोशिश कर रहे हैं। ऐसा लगता है कि आप फेसबुक से जुड़ने और लॉगिन करने की कोशिश कर रहे हैं। हालांकि, क्या आपने लॉग इन करने का प्रयास करने के बाद घर से फिर से कनेक्ट करने का प्रयास किया है? – Gann14

+0

@ गान 14 हां, मैंने कोशिश की, और अभी भी लॉगिन नहीं किया – yelliver

उत्तर

0

ऐप इंजन समय-समय पर कुछ अजीब चीजें कर सकता है जब आप सर्वर से आउटबाउंड HTTP अनुरोध बना रहे हैं। जेएसओपी अंतर्निहित अनुरोध को कैसे लागू करता है, इस पर निर्भर करता है कि यह मिश्रित हो रहा है। हुड के तहत, इसे urlfetch का उपयोग करने की आवश्यकता होगी।

एक चीज जिसे आप यहां आजमा सकते हैं App Engine Flexible का उपयोग करना है। आउटबाउंड अनुरोधों को UrlFetch या सॉकेट एपीआई के माध्यम से पाइप नहीं किया जा रहा है, क्योंकि आखिरकार आपका ऐप Google Compute Engine पर चल रहा है।

यदि आपका ऐप ऐप इंजन एपीआई का एक टन उपयोग नहीं कर रहा है, तो यह समस्या को हल करने का एक आसान तरीका हो सकता है।

आशा है कि इससे मदद मिलती है!

+0

मैं जीएई फ्लेक्स का उपयोग नहीं करना चाहता क्योंकि इसे भुगतान की आवश्यकता है। – yelliver

0

मैं सुझाव दूंगा कि सफल लॉगिन के बाद, फेसबुक प्रतिक्रिया के रूप में (कई अनुक्रमिक रीडायरेक्ट?) रीडायरेक्ट करता है।

जब आप GAE के बाहर अपना ऐप चलाते हैं, जावा केवल उन रीडायरेक्ट का पालन करता है, और परिणामस्वरूप https://m.facebook.com/home.php?_rdr परिणाम देता है।

दूसरी ओर, जब GAE के अंदर चल रहा है, GAE की URLFetch लाइब्रेरी follows up to 5 redirects only (या कोई भी कॉन्फ़िगर नहीं किया गया है)।

यदि ऐसा है, तो आप अपने कोड में उन रीडायरेक्ट का पालन कर सकते हैं।

क्या आप इस परिकल्पना की जांच के लिए response1.statusCode() प्रिंट भी कर सकते हैं?

0

क्योंकि यह किसी प्रकार के प्रमाणीकरण से निपट रहा है, मुझे आश्चर्य है कि आपको पहली प्रतिक्रिया से कुकीज़ को बनाए रखने की आवश्यकता है और उसे प्रमाणीकरण प्रदान करने के बाद के अनुरोधों में उनका उपयोग करना है।

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