gpt4 book ai didi

perl - 如何使用 WWW::Mechanize 提交 HTML 中没有的表单?

转载 作者:行者123 更新时间:2023-12-04 16:18:48 24 4
gpt4 key购买 nike

我正在尝试在 WWW::Mechanize 中编写一个脚本,该脚本将在 Hudson 中创建一份工作。脚本是这样的:

$mech->post("$hudson_url/view/All/job/$job_name/build?delay=0sec", \%job_arguments);

问题是 Hudson 日志提示它期望表单提交。以下是从 hudson 日志中提取的:
Caused by: java.lang.Error: This page expects a form submission
at org.kohsuke.stapler.RequestImpl.getSubmittedForm(RequestImpl.java:769)
at hudson.model.ParametersDefinitionProperty._doBuild(ParametersDefinitionProperty.java:116)
at hudson.model.AbstractProject.doBuild(AbstractProject.java:1531)
... 69 more

问题是,Hudson 中的构建是参数化的,因此 Hudson 显然使用 JavaScript 生成表单。最终,Hudson 将调用此 URL。我怎样才能提出这个请求,让 Hudson 认为我在发布表格?

更新:我有 Chrome 中显示的请求数据。这是有效的:
Request URL:<url>/hudson/view/All/job/ReleaseThis/build?delay=0sec
Request Method:POST
Status Code:302 Moved Temporarily
Request Headers
Accept:application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5
Accept-Charset:ISO-8859-1,utf-8;q=0.7,*;q=0.3
Accept-Encoding:gzip,deflate,sdch
Accept-Language:en-US,en;q=0.8
Cache-Control:max-age=0
Connection:keep-alive
Content-Length:935
Content-Type:application/x-www-form-urlencoded
Cookie:screenResolution=1920x1080; JSESSIONID=B3F99F6C376318AB6331AE6F27917D52; screenResolution=1920x1080; __utmz=250097027.1291302888.1.1.utmcsr=...|utmccn=(referral)|utmcmd=referral|utmcct=/sig/Home.action; __utma=250097027.1666115034.1291302888.1291302888.1291302888.1
Host:<hudson_url>
Origin:<huson_url>
Referer:https://<hudson_url>/hudson/view/All/job/ReleaseThis/build?delay=0sec
User-Agent:Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10_6_6; en-US) AppleWebKit/534.13 (KHTML, like Gecko) Chrome/9.0.597.84 Safari/534.13
Query String Parameters
delay:0sec
Form Data
name:URL
value:https://<url>
value:1.12-SNAPSHOT
name:RELEASE_VERSION
value:1.12-TEST16
name:UPDATE_MASTER_POM
name:PROPERTY_NAME
value:
name:DEV_VERSION
value:
name:STABLE_VERSION
value:
json:{"parameter": [{"name": "URL", "value": <url>}, {"name": "SNAPSHOT_VERSION", "value": "1.12-SNAPSHOT"}, {"name": "RELEASE_VERSION", "value": "1.12-TEST16"}, {"name": "UPDATE_MASTER_POM", "value": false}, {"name": "PROPERTY_NAME", "value": ""}, {"name": "DEV_VERSION", "value": ""}, {"name": "STABLE_VERSION", "value": ""}]}
Submit:Build
Response Headers
Connection:close
Content-Length:0
Content-Type:text/plain; charset=UTF-8
Date:Fri, 04 Feb 2011 13:33:27 GMT
Location:https://<hudson.url>/hudson/view/All/job/ReleaseThis/
Server:Apache-Coyote/1.1
Via:1.1 <hudson.url>:8890 (Apache/2.2.3)

最佳答案

有两种可能,一种是有一个javascript生成的随机字符串作为字段之一,以防止CSRF攻击和bot自动提交。在这种情况下,您需要反转 javascript 算法来解析和发布字符串,或使用 WWW::Scripter ,但是我还没有测试过。

其次,我相信更有可能的选择是脚本检查引用者,在这种情况下,只需通过编辑标题来设置引用者,您可能会很高兴。

还要注意的另一件事是浏览器和 perl 脚本请求中的 header 和 cookie 完全相同;因此你可能先get带有表单的页面,以获取 cookie 设置,或自己在脚本中设置它们。

没有一个措施是不能绕过的,对于你使用脚本,你只需要通过测试找到使用哪一个......

关于perl - 如何使用 WWW::Mechanize 提交 HTML 中没有的表单?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4899932/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com