2011-09-28 38 views
30

我有一个android应用程序,它由WebWiew组成,我需要使用代码自动登录到网站。我试过使用postUrl(),它似乎工作...但只在一些网站。如何发送POST数据与android webview中的代码

下面是我使用的代码:

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给出错误说我需要启用cookie)。

现在我只是用手去发布数据;查看网站的登录表单,并在我的代码中将postData中的名称/值字段。在像谷歌这样的网站上,登录表单有许多隐藏字段,我也一直在将它们添加到postData中。

如果有人能给我任何我做错的事情的想法,请让我知道,我对此很困惑。

回答

14

尝试用"BASE64"替换"utf-8"(在第二个参数中)。

+1

an00b嗨。感谢你的回答!我相信我已经尝试过,但没有运气。我不再处理这个具体问题,我决定另辟蹊径。无论如何,我会投你一票,因为我真的很感谢答案。 – javajavajavajavajava

+0

“BASE64”没有字符集,所以这可能工作(取决于postData),但它可能会失败。正确的方法是将postData编码为“application/x-www-form-urlencoded”编码,这可以通过URLEncoder.encode(postData,“UTF-8”)完成。 – raudi

+0

raudi你可以用一个代码段使用“应用程序/ x-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

我读了EncodingUtils.java的源代码在Android [这里](http://grepcode.com/file/repo1。 maven.org/maven2/org.apache.httpcomponents/httpcore/4.4/org/apache/http/util/EncodingUtils.java#95) 'EncodingUtils.getBytes(postData,“base64”)'与'postData.getBytes相同()'。 只需使用'postData.getBytes()'而不是EncodingUtils。 (如果您需要迁移到没有EncodingUtils的Android M(API 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());