2012-02-03 18 views
1

私は、次のコードを経由してカールを実行しています: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.

答えて

2

javaでこれらのことを処理するためにApache httpcleintというライブラリがある場合、なぜJavaからcurlを使用しようとしているのかわかりません。

このexampleをご覧ください。

また、javaの組み込みURLConnectionまたはHttpURLConnectionクラスをこれらの目的に使用することもできます。あなたがPHPの背景からであり、あなたはを使用してを主張すればカールがlibcurl Java bindingsをしようとした場合

+0

curlを使用しているのは、curlが200.301または302以外の応答でコンテンツを取得する唯一のオプションだと思われるからです。 – MichaelICE

1

あなたが望むすべての必要なヘッダを送信するためにApacheからのHttpClientを使用することができます。

import org.apache.commons.httpclient.HttpClient; 
import org.apache.commons.httpclient.HttpException; 
import org.apache.commons.httpclient.methods.GetMethod; 



public static void main(String[] args) throws HttpException, IOException { 

    HttpClient httpClient = new HttpClient(); 
    GetMethod getMethod = new GetMethod("http://cetatenie.just.ro/Home/ORDINEANC.aspx"); 
    getMethod.addRequestHeader("Host", "cetatenie.just.ro"); 
    getMethod.addRequestHeader("User-Agent", "Mozilla/5.0 (X11; Linux i686; rv:7.0.1) Gecko/20100101 Firefox/7.0.1"); 

    httpClient.executeMethod(getMethod); 
    String response = getMethod.getResponseBodyAsString(); 
    } 
} 

これは単なる小さな一例です。

関連する問題