2012-02-08 26 views
0

を動作しません...ここでのRuntime.exec()ここで... ...だから私は、私は、カールの文字列をexecしたい文字列を持っている</p> <p>を

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

をexecしするために使用するコードは、ユーザーエージェントとApacheのログが台無しである私はexec'ingていた文字列です...

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

期待される結果あなたは、スペースで分割している完全なユーザーエージェント(この場合は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

+0

あなたのアバターが好き... – ariefbayu

+0

それは192.168.1.105 - - [2012年7月2日:20:59:38 -0500] "GET/HTTP/1.1" 200 6791 " " - " "1 2 3 4 5" – MichaelICE

答えて

3

を示し、 "1 2 3 4 5" すべきは、スペースを持っていますその中に。

+0

私がスペースを分割した理由は、出力をエスケープして、狂ったものが実行されないようにするためです。つまり:www.test.com && rm -rf * – MichaelICE

+0

@マイク・カリー。しかし、それがあなたが得ているものを手に入れている理由で、出力がそれを確認します。 –

+0

この情報は以下から入手できます:http://stackoverflow.com/questions/5928225/how-to-make-pipes-work-with-runtime-exec – MichaelICE

0

区切りで別々に渡すことをお勧めします。私はセミコロン(;)または任意の非揮発性デリミタを使用します。そのように文字列を分割します。ここで覚えておくべきことは、あなたが実行しようとしているものだけがあなたのプログラムに渡されることに気にしないことです。必要に応じて

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

使用String.trim():したがって、あなたのCMDLINE変数は、次のようになります。

+0

特殊文字(例:& | * ;)をエスケープするにはどうすればよいですか?ユーザーエージェントでこれらの文字を許可したいが、解釈されないようにしたい。 – MichaelICE

+0

私に例を挙げてもらえますか?このシナリオでは、フィルタを使いたいと思うように聞こえます。私は問題を誤解しているかもしれませんが、本質的に文字列を受け取り、あなたは悪質な入力を避ける必要がありますか? – Woot4Moo

関連する問題