Java中的卷曲语法模拟

时间:2009-12-12 10:48:11

标签: java curl

我在.sh文件中有一个curl语法。我需要在Java中运行curl sytnax或curl命令复制相同的语法,但我在复制时遇到问题。

$AUTH_OPTION="--basic -u testuser:testpwd"
$HTTP_METHOD=POST
$FILE_OPTION="-d @$INPUT_FILE"
$CONTENT_TYPE="application/xml"
$ACCEPT_TYPE="application/xml"

echo curl -o response.txt -w %{http_code} -k -v $AUTH_OPTION -X $HTTP_METHOD $FILE_OPTION -H \"Content-Type: $CONTENT_TYPE\" -H \"Accept: $ACCEPT_TYPE\" 

我有相应的Java代码:

StringBuffer curlCmd=new StringBuffer();
curlCmd.append("curl -o response.txt");
curlCmd.append(WHITE_SPACE);
curlCmd.append("-w %{http_code}");
curlCmd.append("-k -v -u testuser:testpwd");
curlCmd.append(WHITE_SPACE);
curlCmd.append("-X POST");
curlCmd.append(WHITE_SPACE);
curlCmd.append("-d @/test/xyz/xml" );
curlCmd.append(WHITE_SPACE);
curlCmd.append("-H"+"Content-type: application/xml");
curlCmd.append(WHITE_SPACE);
curlCmd.append("-H"+" Accept: application/xml");
curlCmd.append(WHITE_SPACE);

这似乎不起作用:它没有模拟.sh curl语法的相同行为。任何人都可以帮我解决这个问题吗?

输出 curl -o response.txt -w%{http_code} -k -v -u testuser:testpwd -X POST -d @ / path / xyz.xml -H“Content-Type:application / xml”-H“Accept:application / XML” 问题是xml无法正常访问

3 个答案:

答案 0 :(得分:0)

我认为有一些可能存在的问题,但引起我注意的一个问题是你在Content-Type: $CONTENT_TYPEAccept: $ACCEPT_TYPE附近缺少引号,例如:

"-H \"Content-type: application/xml\""

第二个错误是你写的-d @/test/xyz/xml但它应该是:

-d @/test/xyz.xml

如果它仍然不起作用,你可以发布sh脚本和StringBuffer的输出,这样我们就可以更容易地看到差异在哪里了吗?

答案 1 :(得分:0)

您可能应该用Java代码第4行的其他内容替换%{http_code} Java不会插入环境变量。

另外,请查看Runtime#exec方法。这使您可以执行命令,而不必担心转义引号等。

在尝试从java调试调用之前,确保命令运行没有问题(例如服务器不接受发布的内容)可能是个好主意。一次处理一个问题要容易得多。

答案 2 :(得分:0)

如果您正在使用环境变量,那么您需要确保:

  1. 他们是exported
  2. 您通过shell(例如curl
  3. 执行/bin/bash

    导出意味着变量暴露给子进程。 shell执行将在调用可执行文件之前扩展它们。

    所以你的调用看起来像:

    sh curl ....
    

    这将有助于了解您如何调用Process.exec().一个常见问题是您需要同时使用进程的stdout / stderr ,否则您的sh/curl进程可能阻止等待父进程使用输出。有关详细信息,请参阅here