做了很多研究,但遗憾的是现在我完全陷入困境。
我需要下载一个html页面: 为此,我在公式中填写了不同的数据,然后单击提交按钮,然后我想保存响应。
使用 Firebug,我可以看到我的数据已填写并通过 POST 发送。不幸的是,还有一个参数我无法追踪它如何生成的,如果没有最后一个参数,我不会得到足够的 html 响应,而是得到一个错误页面。
wget 和curl(cookies、useragent、header、referrer)在没有最后一个参数的情况下失败!
我对 jquery 和 javascript 不太熟悉,所以我不知道数据来自哪里,但如果浏览器知道我也应该能够!
我发现这很相似,只是我的看起来更难,因为生成了字段:wget : get field info before sending post-data
就我而言,我将其追溯到:
<script type="text/javascript">
$(document).ready(function(){
$.get('/getmyData.asp?str=erServiceXUVC',function(string){
$('#oikuZR').append('<input type="hidden" name="lsXUVp" value="'+ string +'">');
});
});
</script>
与使用真实浏览器和 wget(即使使用用户代理等)的区别是因为我无法访问该值,如果我使用普通浏览器,该值就会显示出来。
<input type="hidden" value="34928321" name="lsXUVp">
这正是我需要的值(与 firebug POST 相比)!但是....
我的知识到此结束。
- 在代码中找不到“34928321”
- “#oikuZR”没有出现在 firebug 的 DOM 列表中,但也许我做错了什么(有数千个条目)
- 调试上面的脚本,我可以看到 string=34928321 作为局部变量,但我看不到函数是从哪里调用的
- 如果我打开 www.homepage.com/getmyData.asp?str=erServiceXUVC(带或不带参数),只会出现一个错误页面。
考虑使用Splash作为为我运行 javascript 的代理,而不是 wget 该页面,但由于我还不了解其机制,所以我对此表示怀疑。
那我能做什么呢?
也许是一个支持 JavaScript 的浏览器,可以接受来自命令行的命令:打开、填写、发送、saveHtml?备择方案? wget 的解决方案(最喜欢!)?
最佳答案
我认为添加此调用是为了防止(或至少使其变得更难)做您想做的事情。
诀窍就在这一行:
$.get('/getmyData.asp?str=erServiceXUVC',function(string){
..
});
该行执行 AJAX 请求。当请求成功时,调用回调函数,并将响应传递到参数string
中。
因此,通过此请求,会生成一个代码,然后将其与表单一起发回。如果不检查实际环境我无法确定,但我认为 AJAX 请求取决于 session (可能通过 cookie)。如果没有该 session ,它可能会生成错误消息。
因此,要解决此问题,您必须获取该页面及其附带的所有 cookie。然后,在请求代码时,使用相同的 cookie,以便服务器将在同一 session 中看到该请求。
这很可能是防止垃圾邮件机器人滥用表单的技巧。因此,很难猜测可能还有哪些其他技巧,以及还需要什么才能使其发挥作用。
关于javascript - 下载从 javascript 生成 POST 参数的主页,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26194410/