Pergunta

Quero acessar os formulários em páginas HTML através da linguagem de programação Java sem envolver o navegador real no meio.

No momento, estou fazendo isso Unidade HTML Mas leva um pouco mais de tempo para carregar uma página. Quando se trata de acessar milhões de páginas, esse tempo extra é mais importante.

Existe algum outro método para fazer isso?

Foi útil?

Solução

Eu usei algo semelhante chamado httpunit Antes, mas não tenho ideia de como ele compara o desempenho.

Se você tiver milhões de páginas para processar, eu recomendaria jogar mais alguns threads. Apenas um palpite, mas acho que se você escalar isso até vários tópicos, ficará sem largura de banda antes de ficar sem energia da CPU (nesse caso, não importa o quão mais rápido possa ser)

Outras dicas

O acesso a uma página da web usando um navegador, mesmo o htmlunit, será lento. Um método melhor é Teste a camada logo abaixo da interface da web, para que você não precise acessar milhões de páginas - em vez disso, você testará o suficiente para garantir que a interface da Web esteja usando a camada inferior corretamente.

A maior parte da interação no navegador se resume a um HTTP GET ou a uma postagem HTTP. Você precisa descobrir exatamente a operação necessária e, em seguida, pode construir os dados URL e/ou formar. Então você pode usar algo assim:

   try { 
    //Construct data 
    String data = URLEncoder.encode("key1", "UTF-8") + "=" + URLEncoder.encode("value1", "UTF-8"); data += "&" + URLEncoder.encode("key2", "UTF-8") + "=" + URLEncoder.encode("value2", "UTF-8"); 
    // Send data 
    URL url = new URL("http://hostname:80/cgi"); 
    URLConnection conn = url.openConnection(); conn.setDoOutput(true); 
    OutputStreamWriter wr = new OutputStreamWriter(conn.getOutputStream()); 
    wr.write(data); 
    wr.flush(); 

    // Get the response 
    BufferedReader rd = new BufferedReader(new InputStreamReader(conn.getInputStream())); 
    String line; while ((line = rd.readLine()) != null) { 

    // Process line... } 
    wr.close(); 
    rd.close(); 
    } catch (Exception e) { } 
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top