我在.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无法正常访问
答案 0 :(得分:0)
我认为有一些可能存在的问题,但引起我注意的一个问题是你在Content-Type: $CONTENT_TYPE
和Accept: $ACCEPT_TYPE
附近缺少引号,例如:
"-H \"Content-type: application/xml\""
第二个错误是你写的-d @/test/xyz/xml
但它应该是:
-d @/test/xyz.xml
如果它仍然不起作用,你可以发布sh脚本和StringBuffer的输出,这样我们就可以更容易地看到差异在哪里了吗?
答案 1 :(得分:0)
您可能应该用Java代码第4行的其他内容替换 Java不会插入环境变量。%{http_code}
。
另外,请查看Runtime#exec方法。这使您可以执行命令,而不必担心转义引号等。
在尝试从java调试调用之前,确保命令运行没有问题(例如服务器不接受发布的内容)可能是个好主意。一次处理一个问题要容易得多。
答案 2 :(得分:0)
如果您正在使用环境变量,那么您需要确保:
exported
curl
)/bin/bash
醇>
导出意味着变量暴露给子进程。 shell执行将在调用可执行文件之前扩展它们。
所以你的调用看起来像:
sh curl ....
这将有助于了解您如何调用Process.exec().
一个常见问题是您需要同时使用进程的stdout / stderr ,否则您的sh/curl
进程可能阻止等待父进程使用输出。有关详细信息,请参阅here。