Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/perl/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Perl 如何使用WWW::Mechanize提交一个非';HTML中没有吗?_Perl_Post_Hudson_Mechanize - Fatal编程技术网

Perl 如何使用WWW::Mechanize提交一个非';HTML中没有吗?

Perl 如何使用WWW::Mechanize提交一个非';HTML中没有吗?,perl,post,hudson,mechanize,Perl,Post,Hudson,Mechanize,我正在尝试在WWW::Mechanize中编写一个脚本,它将在哈德逊建立一个作业。脚本如下所示: $mech->post("$hudson_url/view/All/job/$job_name/build?delay=0sec", \%job_arguments); 问题是哈德逊日志抱怨说它希望提交表单。以下内容摘自哈德逊记录: Caused by: java.lang.Error: This page expects a form submission at org.kohsu

我正在尝试在WWW::Mechanize中编写一个脚本,它将在哈德逊建立一个作业。脚本如下所示:

$mech->post("$hudson_url/view/All/job/$job_name/build?delay=0sec", \%job_arguments);
问题是哈德逊日志抱怨说它希望提交表单。以下内容摘自哈德逊记录:

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。我怎样才能提出这个请求,让哈德逊认为我在张贴一份表格


更新:我有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)
请求URL:/hudson/view/All/job/ReleaseThis/build?延迟=0秒
申请方式:邮寄
状态代码:302已临时移动
请求头
接受:application/xml、application/xhtml+xml、text/html;q=0.9,文本/普通;q=0.8,图像/png,*/*;q=0.5
接受字符集:ISO-8859-1,utf-8;q=0.7,*;q=0.3
接受编码:gzip、deflate、sdch
接受语言:en-US,en;q=0.8
缓存控制:最大年龄=0
连接:保持活力
内容长度:935
内容类型:application/x-www-form-urlencoded
Cookie:屏幕分辨率=1920x1080;JSESSIONID=B3F99F6C376318AB6331AE6F27917D52;屏幕分辨率=1920x1080__utmz=250097027.1291302888.1.1.utmcsr=…| utmccn=(转诊)| utmcmd=转诊| utmcct=/sig/Home.action__utma=250097027.1666115034.1291302888.1291302888.1291302888.1
主持人:
来源:
推荐人:https:///hudson/view/All/job/ReleaseThis/build?delay=0sec
用户代理:Mozilla/5.0(Macintosh;U;Intel Mac OS X 10_6_6;en US)AppleWebKit/534.13(KHTML,类似Gecko)Chrome/9.0.597.84 Safari/534.13
查询字符串参数
延迟:0秒
表单数据
名称:URL
值:https://
值:1.12-1
名称:发布版本
值:1.12-TEST16
名称:更新\u主\u POM
名称:物业名称
价值:
名称:DEV_版本
价值:
名称:稳定版
价值:
json:{“参数”:[{“名称”:“URL”,“值”:},{“名称”:“快照版本”,“值”:“1.12-SNAPSHOT”},{“名称”:“发布版本”,“值”:“1.12-TEST16”},{“名称”:“更新主控程序POM”,“值”:false},{“名称”:“属性名称”,“值”:“},{“名称”:“开发版本”,“值”:“},{“稳定版本”,“值”:”},{“名称”:“值”:“}”
提交:构建
响应头
连接:关闭
内容长度:0
内容类型:文本/纯文本;字符集=UTF-8
日期:2011年2月4日星期五13:33:27 GMT
地点:https:///hudson/view/All/job/ReleaseThis/
服务器:ApacheCoote/1.1
Via:1.1:8890(Apache/2.2.3)

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

其次,我相信更可能的选择是脚本检查referer,在这种情况下,只需通过编辑标题设置referer,您就可以开始了

还要注意的是,浏览器和perl脚本请求中的头和cookie完全相同;因此,您可以首先
获取带有表单的页面,以获取cookies集,或者自己在脚本中设置cookies


没有一种方法是不可绕过的,要使用脚本,您只需通过测试找到使用哪一种方法…

尝试对流量进行tcpdump,然后通过tcpdump确定数据发送的格式。我使用了referer头并编写了参数到json之间的转换脚本(哈德逊似乎需要)。它成功了。谢谢!