我通過下面的代碼執行卷曲:從Java執行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和捲曲之間有某種魔力...
我想要做的就是傳遞一個像這樣的字符串: Opera/9.25(Windows NT 6.0; U; EN)
,並希望這樣的:
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以外的任何響應內容的唯一選擇或302.
我使用curl的原因是因爲curl似乎是檢索除200.301或302之外的任何響應內容的唯一選項。 – MichaelICE 2012-02-03 13:08:12