Runtime.exec () не работает должным образом - PullRequest
0 голосов
/ 08 февраля 2012

Итак, у меня есть строка, которую я хочу exec, строка скручивания ... когда она получает exec'd, она забивает мою строку агента пользователя ...

Вот строка, которую я exec 'ing ...

/usr/bin/curl  -L --no-keepalive --max-time 30 --connect-timeout 30 --insecure --max-redirs 10 --stderr /var/folders/+j/+jqu+V1eEoSalBbXTff74U+++TI/-Tmp-/output7756019899402490058.tmp --cookie-jar /var/folders/+j/+jqu+V1eEoSalBbXTff74U+++TI/-Tmp-/cookies4551380191209065239.tmp --user-agent "1 2 3 4 5" --dump-header /var/folders/+j/+jqu+V1eEoSalBbXTff74U+++TI/-Tmp-/headers159122813500476027.tmp http://test.com

Вот код, который я использую для его исполнения

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

Вот журналы apache с испорченным пользовательским агентом ...

192.168.1.105 - - [07/Feb/2012:20:59:38 -0500] "GET / HTTP/1.1" 200 6791 "-" "\"1"

Ожидаемый результат в apache должен показывать ПОЛНЫЙ пользовательский агент (в данном случае 1 2 3 4 5)

192.168.1.105 - - [07/Feb/2012:20:59:38 -0500] "GET / HTTP/1.1" 200 6791 "-" "1 2 3 4 5"

Ответы [ 2 ]

3 голосов
/ 08 февраля 2012

Вы разделяетесь на пробелы, и в "1 2 3 4 5" есть пробелы.

0 голосов
/ 08 февраля 2012

Рекомендую передавать его по-разному.Я бы использовал точку с запятой (;) или любой нелетучий разделитель.и разделить строку таким образом.Здесь следует помнить, что вас не волнует, что в вашу программу передается только то, что вы готовы выполнить.Поэтому ваша переменная cmdLine должна выглядеть следующим образом:

--user-agent; "1 2 3 4 5"; --dump-header;

при необходимости используйте String.trim ().

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...