nav*_*ajo 8 android http-post android-intent
我想做这样的事情:
startActivity(new Intent(Intent.ACTION_VIEW,Uri.parse(" http://www.somepage.com?par1=val1&par2=val2 "));
但我不想发送参数与get但是发帖.我怎么能这样做?
非常感谢纳瓦霍人
djp*_*ado 12
它可以做到,但是以一种棘手的方式.
您可以使用自动提交表单创建一个小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>
Run Code Online (Sandbox Code Playgroud)
源代码:
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();
}
Run Code Online (Sandbox Code Playgroud)
纳瓦霍语,
您尝试执行的操作无法通过上述 URL 以及您在上面所做的约束来完成。主要原因是上面的 URL 是 GET URL。POST URL 中没有上述参数。它们是在实际的 REQUEST 中传递的,而不是 URL。
为了完成您想要做的事情,您必须拦截 Intent,重新格式化 URL,然后使用新的 Intent 启动浏览器。URL 的来源是关键。如果来源来自您或您可以跟踪的内容,那很简单,只需创建一个自定义意图即可。如果来源超出您的控制范围,那么您可能会遇到问题(见下文)...
1) GET 和 POST 不可互换。如果您弄乱了不属于您的数据或不访问您控制的站点,那么您可能会破坏该站点的功能,因为出于安全原因,并非每个人都对 GET 和 POST 进行编程。
2)如果您响应与浏览器相同的 Intent,那么如果您的应用程序始终打开默认值,则用户可能无法理解您的应用程序的用途。
另一种可能性(如果您控制网站)是通过创建您的网站可以根据实际数据要求读取的 cookie 来响应 Intent。这需要服务器上的 PHP/ASP 或 JS 激活 HttpRequest()。
如果我有更多信息,我可以为您提供更好的建议。
模糊逻辑
归档时间: |
|
查看次数: |
14260 次 |
最近记录: |