0

我正在尝试使用 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

现在所有测试和运行完整的代码,所以它肯定可以工作。

4

0 回答 0