1

我需要自动从网站下载文件。文件下载按钮仅在登录后出现,我提供了用户名和密码。在登录表单中还有两个隐藏字段,其中一个是带有生成值的 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 值在登录表单中生成并用用户名和密码发布?

4

1 回答 1

1

读取登录页面内容并使用正则表达式提取数据。您的隐藏字段具有非常独特的形式(具有唯一的名称等),因此非常适合基于正则表达式的数据提取。

于 2012-05-25T17:22:09.580 回答