2011-02-04 9 views
1

私はWWW :: MechanizeでHudsonでジョブをビルドするスクリプトを実行しようとしています。スクリプトはこれです:WWW :: Mechanizeを使ってHTMLにないフォームを送信するには?

$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 

問題があり、ハドソンのビルドがパラメータ化され、そのためには、ハドソンaparently 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) 
+1

は、トラフィックのtcpdumpのを取って試してみてください、意志データがどの形式で送信されているかを識別させます。 –

答えて

2

は二つの可能性があり、一つはJavascriptをCSRF攻撃、およびボットautosubmissionから保護するために、分野の一つとして、ランダムな文字列を生成しているということです。この場合、javascript algoを逆にして文字列を解析して投稿するか、WWW::Scripterを使用する必要がありますが、これはテストしていません。

第2に、私はスクリプトが前方参照者をチェックするということです。この場合は、ヘッダーを編集してリファラーを設定するだけです。

もう1つ注目すべきことは、ブラウザーとPerlスクリプトの要求にまったく同じヘッダーとCookieがあることです。したがって、最初にgetフォームを使用してページを設定したり、クッキーセットを取得したり、スクリプト内で自分自身を設定することができます。スクリプトを使用するために、あなただけの試験で採用されている1見つける必要があり、バイパスすることができない、単一の尺度がありません

...

+0

私はrefererヘッダーを使用し、jsonへのパラメーター間の変換をスクリプト化しました(これはhudsonが必要と思われる)。出来た。ありがとう! – Rafael

関連する問題