我正在尝试为我即将推出的 Android 应用程序创建一个网络抓取工具。因此,我需要在网站上使用一个简单的搜索表单,填写该表单并将结果发送回服务器。
如 Jsoup-Cookbook 中所述,我从服务器上抓取了我需要的站点并更改了值。
现在我只需要将修改后的文档发布回服务器并抓取结果页面。
据我在 Jsoup-API 中看到的,除了 Jsoup.connection 中的 .data-Attribute
之外,没有办法回发某些内容,不幸的是它无法填写文本字段通过他们的 ID。
有什么想法或解决方法吗?如何将修改后的文档或其部分发布回网站?
最佳答案
您似乎误解了 HTTP 的一般工作原理。带有修改后的输入值的整个 HTML 文档并不从客户端发送到服务器。更重要的是,所有输入元素的名称=值对都作为请求参数发送。然后服务器将返回所需的 HTML 响应。
例如,如果您想在 Jsoup 中模拟提交以下表单(您可以通过在浏览器中打开带有表单的页面并右键单击来找到确切的 HTML 表单语法,查看源代码)
<form method="post" action="http://example.com/somescript">
<input type="text" name="text1" />
<input type="text" name="text2" />
<input type="hidden" name="hidden1" value="hidden1value" />
<input type="submit" name="button1" value="Submit" />
<input type="submit" name="button2" value="Other button" />
</form>
那么您需要按如下方式构建请求:
Document document = Jsoup.connect("http://example.com/somescript")
.data("text1", "yourText1Value") // Fill the first input field.
.data("text2", "yourText2Value") // Fill the second input field.
.data("hidden1", "hidden1value") // You need to keep it unmodified!
.data("button1", "Submit") // This way the server knows which button was pressed.
.post();
// ...
在某些情况下,您还需要发回 session cookie,但这是一个独立的主题(并且这个问题之前已经被问过多次;一般来说,使用真正的 HTTP 客户端更容易并通过 Jsoup#parse()
传递其响应。
另请参阅:
关于java - Jsoup 发布修改后的文档,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8986617/