2012-02-08 53 views
0

所以我有一個字符串,我想給exec,捲曲串...當它被exec'd它屠殺我的用戶代理字符串...的Runtime.exec()不表現爲預期

這裏是我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 

下面是我用給exec它

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

什麼期望輸出 – Woot4Moo 2012-02-08 02:07:49

+0

我喜歡你的頭像... – ariefbayu 2012-02-08 02:09:23

+0

應該是192.168.1.105 - - [07 /二月/ 2012:20:59:38 -0500] 「GET/HTTP/1.1」 200 6791「 - 「」1 2 3 4 5「 – MichaelICE 2012-02-08 02:09:37

回答

3

你對分裂的空間,和 「1 2 3 4 5」 中有空格在裏面。

+0

我在空間上分開的原因,它使'輸出'逃脫了,所以沒有瘋狂的東西可以執行......例如:www.test.com && rm -rf * – MichaelICE 2012-02-08 02:11:18

+0

@ MikeCurry好的。但這就是爲什麼你得到了你所得到的結果,並且輸出證實了它。 – 2012-02-08 02:12:35

+0

得到這個信息從:http://stackoverflow.com/questions/5928225/how-to-make-pipes-work-with-runtime-exec – MichaelICE 2012-02-08 02:13:14

0

我建議以不同的方式分隔它。我會使用分號(;)或任何非易失性分隔符。並以這種方式分割字符串。這裏要記住的是,你並不關心只有你願意執行的內容纔會傳遞到你的程序中。因此,你的CMDLINE變量應該是這樣的:

必要

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

使用String.trim()。

+0

我如何轉義特殊字符(即:& | * ;)我希望能夠允許用戶代理中的這些字符,但不能被解釋。 – MichaelICE 2012-02-08 02:23:49

+0

你能舉個例子嗎?這聽起來更像是你想在這種情況下使用過濾器。我可能誤解了這個問題,但是你基本上收到了一個字符串,你需要避免惡意輸入的正確性? – Woot4Moo 2012-02-09 01:37:06