可能重复:
How can I open android browser with specified POST parameters?
我想做点什么 像这样:
startActivity(new Intent(Intent.ACTION_VIEW,Uri.parse(“http://www.somepage.com?par1=val1&par2=val2”));
但是我不想发送带有get但带帖子的参数。 我怎么能这样做?
非常感谢, 纳瓦霍
答案 0 :(得分:11)
它可以做到,但是以一种棘手的方式。
您可以使用自动提交表单创建一个小html文件,将其读入字符串,替换params并将其作为数据uri而不是url嵌入到intent中。 有一些负面的东西,它只能直接调用默认浏览器,并且技巧将存储在浏览器历史记录中,如果你导航回来它会出现。
以下是一个例子:
HTML文件(/ res / raw):
<html>
<body onLoad="document.getElementById('form').submit()">
<form id="form" target="_self" method="POST" action="${url}">
<input type="hidden" name="param1" value="${value}" />
...
</form>
</body>
</html>
源代码:
private void browserPOST() {
Intent i = new Intent();
// MUST instantiate android browser, otherwise it won't work (it won't find an activity to satisfy intent)
i.setComponent(new ComponentName("com.android.browser", "com.android.browser.BrowserActivity"));
i.setAction(Intent.ACTION_VIEW);
String html = readTrimRawTextFile(this, R.raw.htmlfile);
// Replace params (if any replacement needed)
// May work without url encoding, but I think is advisable
// URLEncoder.encode replace space with "+", must replace again with %20
String dataUri = "data:text/html," + URLEncoder.encode(html).replaceAll("\\+","%20");
i.setData(Uri.parse(dataUri));
startActivity(i);
}
private static String readTrimRawTextFile(Context ctx, int resId) {
InputStream inputStream = ctx.getResources().openRawResource(resId);
InputStreamReader inputreader = new InputStreamReader(inputStream);
BufferedReader buffreader = new BufferedReader(inputreader);
String line;
StringBuilder text = new StringBuilder();
try {
while ((line = buffreader.readLine()) != null) {
text.append(line.trim());
}
}
catch (IOException e) {
return null;
}
return text.toString();
}
答案 1 :(得分:1)
纳瓦霍,
使用上面提到的约束,上述网址无法完成您要做的工作。主要原因是上面的URL是一个GET URL。 POST URL中没有上述参数。它们是在实际的REQUEST而不是URL中传递的。
要完成您想要的操作,您必须拦截Intent,重新格式化URL,然后使用新的Intent启动浏览器。 URL的来源是关键。如果源来自您或您可以跟踪的内容,那很简单,只需创建一个自定义Intent。如果源不在您的控制之下,那么您可能会遇到问题(见下文)......
1)GET和POST不可互换。如果您正在处理不属于您的数据或未访问您控制的网站,那么您可能会破坏该网站的功能,因为出于安全原因,并非每个人都为GET和POST编程。
2)如果您正在响应浏览器所执行的相同Intent,那么如果用户始终打开默认设置,则可能无法理解您的应用所执行的操作。
另一种可能性(如果您控制网站)是通过创建您的网站可以根据实际数据要求读取的cookie来响应Intent。这需要服务器上的PHP / ASP或JS激活的HttpRequest()。
如果我有更多信息,我可以更好地建议你。
FuzzicalLogic