我正在尝试使用 Java 提交一个表单,如下所示:
<form id="bForm" action="/a/b.php" method="POST"></form>
没有<input type="hidden">
,甚至根本没有<input>
。在源代码中,我看到当我单击执行 javascript 代码的链接时提交了此表单,如下所示:
javascript:b(<k>,<v>)
其中<k>
和<v>
是一些由一些数字组成的键和值。
现在,b()
源代码中的函数是这样的:
function b(value, key) {
var form = document.getElementById('bForm');
form.action = '/b/user/' + key + '/' + value + '.txt';
form.submit();
}
我试图接收的是 .txt 文件作为响应发送,但试图直接打开
http://<url>.com/b/user/<key>/<value>.txt
在浏览器中没有给我 .txt 文件,而是一条消息说必须使用 POST 方法访问它。
现在,我读到了如何通过 POST 发送请求(也从试图在这里找到解决方案),并认为我最了解。尽管如此,我今天只阅读了几乎所有内容,包括形式是什么,所以如果解决方案很明显,请原谅。我在这里遇到的问题是,我无法传递任何参数来“让 URL 知道”在提交表单时要执行的操作。
现在我可能无法更改表单的操作,我该怎么办?我可以通过“POST”以某种方式“连接”到指向 .txt 文件的 URL 吗?或者我是否需要以某种方式执行 javascript,如果需要,如何执行?
编辑:我现在已经解决了这个问题,不确定我的解释是否不够好,但解决方案似乎很简单,我只是对表格不够了解。所以,action=#myurl# 表示表单提交到#myurl#,而不是当前页面。而且,虽然目标 URL 似乎指向某个文件,该文件无法对提交的表单执行任何操作,但这是不对的。实际上,它指向一个脚本,但是该脚本被“隐藏”了,我们只能在 URL 中看到我们要下载的文件的路径。所以,我只是这样做了:
URL url = new URL("http://myurl.com/b/user/" + key + "/" + value + ".txt");
HttpURLConnection c = (HttpURLConnection) url.openConnection();
//set User-Agent, Cookie, etc. properties here
c.setRequestMethod("POST");
c.setInstanceFollowRedirects(false); //not sure if this is needed
InputStream in = c.getInputStream(); //this submits the parameter-less form
//now I can get the response with this stream, i.e. read & save the .txt file
现在所有测试和运行完整的代码,所以它肯定可以工作。