Я выполняю curl с помощью следующего кода:
// 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);
}
}
Однако, когда я добавляю в строку exec следующее:
Я строю строку завитка по ходу, прежде чем передать ее описанному выше методу:
if (userAgent.contains(" ")) {
userAgent = " --user-agent '" + Exec.escapeShellString(userAgent) + "' ";
}
С дополнительными одинарными кавычками я получаю это:
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)'"
Без одинарных кавычек я получаю это:
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)"
Существует лидирующая одинарная кавычка, но не завершающая. Я считаю, что не должно быть одинарных кавычек ... во всяком случае, где-то между java и curl есть магия ...
Все, что я хотел бы сделать, это передать строку вроде этой:
Opera / 9.25 (Windows NT 6.0; U; ru)
и ожидайте этого:
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)"
Edit:
Причина, по которой я использую curl, заключается в том, что curl кажется единственной опцией, которая извлекает содержимое любого ответа, кроме 200.301 или 302.