私は、次のコードを経由してカールを実行しています:JavaからCURLを実行する - 適切な方法は何ですか?
私が行くように、私はそれを渡す前に、私は、カールの文字列を構築しています:私はexecの文字列に以下を追加したときに、しかし
// 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);
}
}
法上で見た:
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)'"
:私はこれを取得、余分な単一引用符で
if (userAgent.contains(" ")) {
userAgent = " --user-agent '" + Exec.escapeShellString(userAgent) + "' ";
}
単一引用符なし
は、私はこれを取得:リード単一引用符ではなく、仕上げの一つは
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とカールの間のどこかに魔法があります...
私がしたいのは、このような文字列を渡すことです:Opera/9.25(Windows NT 6.0; U;エン)
と期待して、この:
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)"
編集:
カールは200.301以外のレスポンス上のコンテンツを取得する唯一の選択肢であると思われるので、私はカールを使用しています理由は、または3022.
curlを使用しているのは、curlが200.301または302以外の応答でコンテンツを取得する唯一のオプションだと思われるからです。 – MichaelICE