java - 基本 JSoup 表单提交
问题描述
我的表单提交似乎不起作用,我尝试了 Jaunt,它能够提交,所以在使用 JSoup 时我不明白它为什么会返回404
。
Connection.Response response = Jsoup.connect("https://crawlertest284814019.wordpress.com/contact/#contact-form-7")
.userAgent("Mozilla/5.0 (Windows; U; WindowsNT 5.1; en-US; rv1.8.1.6) Gecko/20070725 Firefox/2.0.0.6")
.data("name", "nameeee")
.method(Connection.Method.POST)
.execute();
<dependency>
<groupId>org.jsoup</groupId>
<artifactId>jsoup</artifactId>
<version>1.13.1</version>
</dependency>
我试过:
- 网址
https://crawlertest284814019.wordpress.com/contact/
- 数据
"name", "nameeee"
产生404状态 - 数据
"g7-name", "nameeee"
没有问题但没有提交 - 数据
"Name", "nameeee"
没有问题但没有提交 - Map<String, String> 的数据没有问题但没有提交
解决方案
正如@Pshemo 所指出的,代码还可以,但是缺少传递的数据。这些隐藏字段包含使提交有效所需的信息。在这个问题的情况下,隐藏字段是:
<input type="hidden" id="_wpnonce" name="_wpnonce" value="4d18e01372">
<input type="hidden" name="_wp_http_referer" value="/contact/">
<input type="hidden" name="contact-form-id" value="7">
<input type="hidden" name="action" value="grunion-contact-form">
<input type="hidden" name="contact-form-hash" value="07cbf543790375cf26022ad8826a8dbb8787beae">
因此,除了必填字段外,请确保也提交一次隐藏的字段。
Document document = Jsoup.connect("https://crawlertest284814019.wordpress.com/contact/#contact-form-7")
.data("g7-name", "Super sName")
.data("_wpnonce", "4d18e01372")
.data("_wp_http_referer", "/contact/")
.data("action", "grunion-contact-form")
.data("contact-form-id", "7")
.data("contact-form-hash", "07cbf543790375cf26022ad8826a8dbb8787beae")
.post();
推荐阅读
- amazon-cloudfront - 如何将 lambda 连接到 CloudFront?AWS CDK JS
- vue.js - 是否有必要为一个页面中的单个调用创建一个 ui 组件?
- flutter - VideoPlayerController Flutter 中的位置
- firebase - 登录后未导航到主页
- gradle - 现有项目的 Intellij Gradle 模块依赖项显示编译错误
- google-sheets - 谷歌表格通过具有第一个单元格地址和长度来获取范围
- python - 如何使用视频标签将视频从 localhost 流式传输到 Web 浏览器?
- php - PHP - 如何将字符串值替换为用户输入?
- postgresql - 错误文本中的列名:类型字符的值太长
- intellij-idea - 如何在 IntelliJ 中自定义局部变量的颜色