2011-09-28 11 views
30

मेरे पास एक एंड्रॉइड एप्लिकेशन है जिसमें WebWiew है और मुझे कोड का उपयोग करके स्वचालित रूप से किसी साइट पर लॉगिन करने की आवश्यकता है। मैंने postUrl() का उपयोग करने का प्रयास किया है और ऐसा लगता है कि यह काम करता है ... लेकिन केवल कुछ साइटों पर।एंड्रॉइड वेबव्यू में कोड के साथ POST डेटा कैसे भेजें

यहाँ कोड मैं का उपयोग कर रहा है:

public class webviewActivity extends Activity { 
    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     WebView webview = new WebView(this); 
     setContentView(webview); 
     WebSettings webSettings = webview.getSettings(); 
     webSettings.setJavaScriptEnabled(true); 

     webview.setWebViewClient(new WebViewClient()); 

     String postData = "[email protected]&login_password=myPassword"; 
     webview.postUrl("https://www.dropbox.com/login", EncodingUtils.getBytes(postData, "utf-8")); 
    } 
} 

यह काम करता है dropbox.com के लिए महान, लेकिन google.com, facebook.com, आदि जैसे अन्य साइटों सिर्फ प्रवेश पृष्ठ लोड या देना एक त्रुटि (google.com एक त्रुटि देता है जिसमें मुझे कुकीज़ सक्षम करने की आवश्यकता है)।

अभी मैं सिर्फ हाथ से पोस्ट डेटा जा रहा हूं; साइट के लिए लॉगिन फॉर्म देख रहे हैं और मेरे कोड में पोस्टडेटा में नाम/मूल्य फ़ील्ड डाल रहे हैं। Google जैसी साइटों पर, लॉगिन फॉर्म में कई छिपे हुए फ़ील्ड हैं और मैं उन्हें पोस्टडेटा में भी जोड़ रहा हूं।

अगर कोई मुझे किसी चीज़ का कोई विचार दे सकता है तो मैं गलत कर रहा हूं कृपया मुझे बताएं, मैं इस बारे में बहुत उलझन में हूं।

उत्तर

14

"BASE64" के साथ "utf-8" (दूसरे पैरामीटर में) को बदलने का प्रयास करें।

+1

हाय an00b। जवाब के लिए धन्यवाद! मेरा मानना ​​है कि मैंने भाग्य के साथ यह कोशिश की है। मैं अब इस विशिष्ट समस्या पर काम नहीं कर रहा हूं, मैंने एक अलग मार्ग जाने का फैसला किया। मैं आपको वैसे भी वोट दूंगा, क्योंकि मैं वास्तव में उत्तर की सराहना करता हूं। – javajavajavajavajava

+0

"BASE64" कोई वर्ण सेट नहीं है, इसलिए यह काम कर सकता है (पोस्टडेटा के आधार पर) लेकिन यह भी असफल हो सकता है। सही तरीका है कि पोस्टडाटा को "एप्लिकेशन/एक्स-www-form-urlencoded" एन्कोडेड होना चाहिए, जिसे URLEncoder.encode (postData, "UTF-8") के साथ किया जा सकता है; – raudi

+0

रुडी आप "एप्लिकेशन/एक्स-www-form-urlencoded" – D4rWiNS

11
public void onCreate(Bundle savedInstanceState) { 

    super.onCreate(savedInstanceState); 

    WebView webView = new WebView(this); 

    setContentView(webView); 

    String url = "http://example.com/somepage.php"; 
    String postData = "postvar=value&postvar2=value2"; 

    webView.postUrl(url, EncodingUtils.getBytes(postData, "base64")); 
} 
+13

का उपयोग करके एक स्निपेट के साथ उत्तर दे सकते हैं, मैंने एंड्रॉइड में यहां एन्कोडिंगयूटिल.जावा के स्रोत कोड को पढ़ा है [यहां] http://grepcode.com/file/repo1। maven.org/maven2/org.apache.httpcomponents/httpcore/4.4/org/apache/http/util/EncodingUtils.java#95) 'एन्कोडिंगयूट्स .getBytes (postData," base64 ")' postData.getBytes के समान() '। एन्कोडिंग उपयोग के बजाय बस 'postData.getBytes() 'का उपयोग करें। (यदि आपको एंड्रॉइड एम (एपीआई 23) में कोई एन्कोडिंग उपयोग नहीं किया जाता है तो – Johnny

+0

आपने अपना दिन दोस्त बचाया है। – NinjaCoder

+0

https://developer.android.com/reference/org/apache/http/util/EncodingUtils.html –

0
WebView myWebView = (WebView) findViewById(R.id.webview); 

String url="http://www.example.org/login"; 

String postData= 
       "username="+URLEncoder.encode("abc","UTF8")+ 
       "&password="+URLEncoder.encode("***", "UTF-8"); 

myWebView.postUrl(url,postData.getBytes()); 
संबंधित मुद्दे