【问题标题】:Curl POST request in java with variables带有变量的java中的Curl POST请求
【发布时间】:2016-06-30 14:34:01
【问题描述】:

所以我有这段代码,我试图使用以前开发的 Web 应用程序验证具有特定模式的 xml。在网站上,它给出了一个 curl 命令,我对尝试在 java 中执行它进行了一些研究,但无济于事。我找到了一个名为 httpclient 的 api,但找不到任何用于 POST 的内容

问题的后半部分;如果这是正确的格式,那么它一定是我在 curl 命令中呈现 xml 变量的方式。

@POST
@Path("/Validate")
//Uncomment when testing with real xml
//@Produces("application/xml")
public String validate(@FormParam("xml") String xml)
{
    System.out.println(xml);
    System.out.println("validate");
    try {
        Process process = Runtime.getRuntime().exec( "curl -X POST --data-    urlencode 'xml=<hml>xml</hml>' http://miring.b12x.org/validator/ValidateMiring/ ");
        BufferedReader input = new BufferedReader(new     InputStreamReader(process.getInputStream()));
        String cmdXML="";
        String line=null;
        while((line=input.readLine())!=null)
        {
            cmdXML+=line;
        }
    } catch (IOException e) {
        logger.error("Something went wrong in validating "+ e);
        System.out.println("Error in validation");
    }
    return "stuff";
}

【问题讨论】:

    标签: java xml rest curl


    【解决方案1】:

    首先,当您的命令包含多个元素时,runtime.exec(...) 需要 String[]

    Java API 运行时: http://docs.oracle.com/javase/7/docs/api/java/lang/Runtime.html#exec(java.lang.String[])

    其次,您必须确保该命令对您有效:

    curl -X POST --data-urlencode 'xml=&lt;hml&gt;xml&lt;/hml&gt;' http://miring.b12x.org/validator/ValidateMiring/

    最后,你必须指明命令curl的完整路径。

    示例:/usr/bin/curl 在 Unix 上或 C:/Program Files/Curl/curl 在 Windows 上

    小心

    在下面的代码中,您必须将&lt;PATH_TO_CURL&gt;替换为命令curl的实际路径

    你能试试这个代码吗?

    代码

    @POST
    @Path("/Validate")
    //Uncomment when testing with real xml
    //@Produces("application/xml")
    public String validate(@FormParam("xml") String xml)
    {
        System.out.println(xml);
        System.out.println("validate");
        try {
            Runtime runtime = Runtime.getRuntime();
            String[] command = {"<PATH_TO_CURL>/curl", "-X", "POST", "--data-urlencode", "'xml=<hml>xml</hml>'", " http://miring.b12x.org/validator/ValidateMiring/"}
            Process process = runtime.exec(command);
            BufferedReader input = new BufferedReader(new InputStreamReader(process.getInputStream()));
            String cmdXML="";
            String line=null;
            while((line=input.readLine())!=null)
            {
                cmdXML+=line;
            }
        } catch (IOException e) {
            logger.error("Something went wrong in validating "+ e);
            System.out.println("Error in validation");
        }
        return "stuff";
    }
    

    【讨论】:

    • 不幸的是,这对我不起作用。但我似乎在让 curl 命令使用文件名而不是终端中的变量时遇到问题,所以我想这将是第一次开始。
    • 这是一个带有文件的 curl 帖子示例:curl -X POST -d @file.xml http://localhost:8080/url。如果您的文件名是变量,则必须将 file.xml 替换为 ${FILENAME}(假设您在 Unix 机器上)
    猜你喜欢
    • 2017-03-04
    • 2018-03-13
    • 2013-08-03
    • 1970-01-01
    • 2016-06-11
    • 2011-04-12
    • 2011-11-01
    • 2013-06-05
    • 1970-01-01
    相关资源
    最近更新 更多