0

おそらくこれはしばしば問題ですが、私はそれを解決できません。サーバーから渡された Web フォームのいくつかのフィールドに自動的に入力する必要があります。私は Apache HttpClient を使用して生活を楽にしています) ここまでで、目的を達成するための手順を検討できます。

    1. http://trac.edgewall.org/ への証明書がないため、このソフトウェアをダウンロードしてローカルにインストールし、最後に NewTicket を作成する必要があります。
    2. SSL (SSL トンネル) なしで Trac をローカルで使用しています。(HTTPS を使用できるようにプログラムを変更することは難しくありません)。
    3. これで、GET 要求を認証して実行できますが、POST 要求を実行できません。

    4. 例: http://localhost:8000/tracenvir/newticketに対して GET リクエストを実行します。この (~/newticket) ページは次のようになります : http://s04.radikal.ru/i177/0912/cb/d43971cebc02.png
    "input type="text" id="field-summary" name="field_summary" size="70" "

    "textarea id="field-description" name="field_description" class="wikitext" rows="10" cols="68"/textarea"'
    5. だから、私はこれを書きます:

        int status = 0;
        int cookLength=0;
        Cookie[] cookies = null;

        HttpClient client = new HttpClient();
        client.getParams().setCookiePolicy(CookiePolicy.BROWSER_COMPATIBILITY);
        HttpState initialState = new HttpState();
        client.setState(initialState);

        //**********//
        //**Log in**//
        //**********//

        GetMethod login = new GetMethod("http://localhost:8000/tracenvir/login");
        client.getState().setCredentials(AuthScope.ANY,
                new UsernamePasswordCredentials("rauch", "qwert"));
        login.setDoAuthentication(true);
        System.setProperty("javax.net.ssl.trustStore", "/home/rauch/NetBeansProjects/jssecacerts");

        try {
            status = client.executeMethod(login);

        System.out.println("response code = "+status);
        cookies = client.getState().getCookies();
        cookLength = cookies.length;

        for(int i=0;i (less than) cookLength;i++) {
            System.out.println(cookies[i].toString());
        }
        login.releaseConnection();
        } catch(IOException ex) {
            ex.printStackTrace();
        }

        //*********************//
        //**Create New Ticket**//
        //*********************//

        PostMethod post = new PostMethod("http://localhost:8000/tracenvir/newticket");

        NameValuePair[] data = {
            new NameValuePair("field-summary","second error"),
            new NameValuePair("field-descryption","Some stupid descryption..."),
            new NameValuePair("field-type","defect"),
            new NameValuePair("field-priority","major"),
            new NameValuePair("field-version","1.0"),
            new NameValuePair("field-owner","moscow server"),
            new NameValuePair("submit","create ticket"),
        };


        //post.setRequestBody(data);
        post.addParameters(data);
        post.addRequestHeader("Referer","http://localhost:8000/tracenvir/login");
        for(int i=0;i (less than) cookLength;i++) {
            initialState.addCookie(cookies[i]);
        }
        client.setState(initialState);


        try {
            status = client.executeMethod(post);

        System.out.println("response code = "+status);

        byte[] buf = new byte[10];
        int r=0;
        BufferedInputStream is = new BufferedInputStream(post.getResponseBodyAsStream());

        while((r = is.read(buf)) > 0) {
            System.out.write(buf, 0, r);
        }
        post.releaseConnection();
        } catch(IOException ex) {
            ex.printStackTrace();
        }
    }

そして、私はこれを持っています:

    400 エラー: 不正なリクエスト
    フォーム トークンがないか無効です。クッキーを有効にしていますか?

どうしたの?

    GET リクエストの応答として、次のように取得します。
      応答コード = 200 trac_auth=38144ec2830678183afebf0b14c51721
      trac_form_token=e9648f17987551b8f97e1953

おそらく私はこれを変更する必要があります:

    client.getParams().setCookiePolicy(CookiePolicy.BROWSER_COMPATIBILITY);
4

2 に答える 2

1

http://www.google.com/support/toolbar/bin/answer.py?hl=ja&answer=47972

上記のリンクがこのトピックに役立つと思います。その提供ビデオも..私はあなたのクエリが解決されることを願っています

http://www.formautofill.com/

このサイトは、自動フォーム フィラーを提供するソフトウェアを提供します。マイクロソフト提供。

于 2009-12-11T19:06:39.083 に答える
0

Ok。この下のリンクは投稿方法に関するものです。私はそれがあなたを助けるかもしれないと思う.

http://www.willmaster.com/library/manage-forms/automatic-form-submission-to-a-cgi-program.php

返事をくれ。そうでない場合。

于 2009-12-11T20:38:13.610 に答える