Pergunta

Provavelmente esta é muitas vezes problema, mas eu não posso resolvê-lo. Eu preciso preencher automaticallly alguns campos no formulário web, que é dado a partir do servidor. Eu uso Apache HttpClient para fazer mais fácil a minha vida) Até agora, pode-se considerar os meus passos para conseguir o objetivo:

    1. Não tenho certificado para http://trac.edgewall.org/ então eu descarregar este programa e instalar localmente e no acabamento eu vou ter que criar newticket.
    2. I localmente usar Trac sem qualquer SSL (túnel SSL). (Não é difícil mudar o meu programa para ser capaz de usar HTTPS).
    3. Entretanto, posso autenticar e executar o pedido GET, mas não posso executar o pedido POST

    4. Por exemplo: eu executo GET solicitação para o http: // localhost: 8000 / tracenvir / newticket . Este (~ / newticket) página olha como a seguir: http://s04.radikal.ru/i177/0912/cb/d43971cebc02. png E, como resposta eu tenho: (parte dela)
    "Input type =" "id = "text campo-summary" name = "" size = "field_summary 70""

    "id textarea =" campo de descrição de "name = "field_description" class = "wikitext" linhas = "10" cols = "68"/ textarea"'
    5. Então, eu escrevo isto:

        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();
        }
    }

E eu tenho este:

    400 Erro: Bad Request
    Falta ou formulário inválido token. Você tem os cookies ativados?

O que há de errado?

    Como resposta a pedido GET fico com esta:
      código de resposta = 200 trac_auth = 38144ec2830678183afebf0b14c51721
      trac_form_token = e9648f17987551b8f97e1953

Provavelmente eu nedd alterar esta:

    client.getParams () setCookiePolicy (CookiePolicy.BROWSER_COMPATIBILITY).;
Foi útil?

Solução

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

Eu acho link acima irá ajudá-u sobre este tema. seu vídeo dão também .. eu espero que sua consulta será resolvido

http://www.formautofill.com/

Este site lhe dará um software que irá fornecer formulário de auto enchimento. fornecida pela Microsoft.

Outras dicas

Ok. Este link abaixo é sobre o método post. Eu acho que poderia ajudar u.

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

dá-me responder. se isso não acontecer.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top