我需要自动从网站下载文件。文件下载按钮仅在登录后出现,我提供了用户名和密码。在登录表单中还有两个隐藏字段,其中一个是带有生成值的 csrf_token_login:
<input type="hidden" name="csrf_token_login" value="nl9YERDFpecfITb8QwFWneoaefykxp2b" />
如果我只有登录名和密码(在使用 java.net.URLConnection 触发和处理 HTTP 请求中有很好的解释),那么很清楚如何在 Java 中编码(使用 java.net.HttpUrlConnection ):提交 POST 请求, 获取 cookie 并将它们设置为任何后续请求。但是如何在登录表单上获取生成的 csrf_token_login 值并与其他值一起提交?
在登录页面的 HttpURLConnection 上使用 getInputStream() 读取它会给我 csrf 值。但同时这会建立连接并防止设置连接属性以发布数据:
private HttpURLConnection logUrlCon;
...
BufferedReader logInput = new BufferedReader(new InputStreamReader(logUrlCon.getInputStream()));
... // read and get csrf value OK
logUrlCon.setDoOutput(true); // throws java.lang.IllegalStateException: Already connected
有没有办法让这个 csrf_tiken_login 值在登录表单中生成并用用户名和密码发布?