有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

从Java执行shell CURL的正确方法是什么?

我通过以下代码执行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和curl之间有一种魔力

我想做的就是传递这样一个字符串: 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)"

编辑:

我之所以使用curl,是因为curl似乎是在200.301或302之外的任何响应上检索内容的唯一选项


共 (2) 个答案

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

    这只是一个小例子