Execução de CURL a partir de Java - qual é a maneira corret

Estou executando curl usando o seguinte código:

  // execute process
    Process pr = null;
    Runtime run = Runtime.getRuntime();
    try {
        pr = run.exec(cmdline.split(" "));

        A ret = f.f(pr);

        pr.waitFor();

        return ret;
    } catch (Exception ex) {
        throw new RuntimeException("Executing " + cmdline, ex);
    } finally {
        try {
            // close all those bloody streams
            pr.getErrorStream().close();
            pr.getInputStream().close();
            pr.getOutputStream().close();
        } catch (IOException ex) {
            Log.get().exception(Log.Level.Error, "Closing stream: ", ex);
        }
    }

No entanto, quando adiciono o seguinte na string exec:

Estou construindo a string de ondulação à medida que passo, antes de passar para o método visto acima:

        if (userAgent.contains(" ")) {
            userAgent = " --user-agent '" + Exec.escapeShellString(userAgent) + "' ";
        }

Com as aspas simples extra, recebo o seguinte:

113.30.31.137 - - [03/Feb/2012:05:26:39 +0000] "GET / HTTP/1.1" 200 6781 "-" "'Mozilla/5.0(iPad;U;CPUOS3_2_1)'"

Sem aspas simples, recebo o seguinte:

107.21.172.36 - - [03/Feb/2012:05:33:38 +0000] "GET / HTTP/1.1" 200 6781 "-" "'Mozilla/5.0(iPad;U;CPUOS3_2_1)"

Há uma única cotação principal, mas não uma final. Eu acredito que não deve haver aspas simples .. de qualquer maneira, há mágica em algum lugar entre java e curl ...

Tudo o que eu gostaria de fazer é passar uma string assim: Opera / 9.25 (Windows NT 6.0; U; en)

e espere o seguinte:

107.21.172.36 - - [03/Feb/2012:05:33:38 +0000] "GET / HTTP/1.1" 200 6781 "-" "Opera/9.25 (Windows NT 6.0; U; en)"

Editar

O motivo pelo qual estou usando o curl é porque o curl parece ser a única opção que recupera o conteúdo em qualquer resposta que não seja 200.301 ou 302.

questionAnswers(4)

yourAnswerToTheQuestion