2012-02-03 60 views
1

我通過下面的代碼執行卷曲:從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.

回答

2

我不知道爲什麼當你有一個名爲Apache httpcleint的庫來處理java中的這些東西時,你正試圖從java中使用curl。

看看這個example

或者,您也可以使用java的內置URLConnectionHttpURLConnection類用於這些目的。

如果您是來自PHP背景,並且如果您使用cURL嘗試libcurl Java bindings,並且您的堅持要求

+0

我使用curl的原因是因爲curl似乎是檢索除200.301或302之外的任何響應內容的唯一選項。 – MichaelICE 2012-02-03 13:08:12

1

你可以使用的HttpClient從Apache到送你想要的所有必要的標頭:

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

這只是一個小例子。

相關問題