当直接从ApacheAnt调用时,为什么使用SSL的cURL不起作用
我正在用https访问一个网站。如果我在ApacheAnt的当直接从ApacheAnt调用时,为什么使用SSL的cURL不起作用,ssl,ant,curl,Ssl,Ant,Curl,我正在用https访问一个网站。如果我在ApacheAnt的exec任务中使用curl,它会失败,抱怨“libcurl中不支持或禁用https”;但是,如果我使用sh-c通过shell从Ant发出相同的调用,它就会工作 这是我的蚂蚁目标: <target name="list-milestones"> <echo>Via SH</echo> <exec executable="sh" dir="." failonerror="true"&
exec
任务中使用curl,它会失败,抱怨“libcurl中不支持或禁用https”;但是,如果我使用sh-c通过shell从Ant发出相同的调用,它就会工作
这是我的蚂蚁目标:
<target name="list-milestones">
<echo>Via SH</echo>
<exec executable="sh" dir="." failonerror="true">
<arg value='-c' />
<arg value='/bin/env' />
</exec>
<exec executable="sh" dir="." failonerror="true">
<arg value='-c' />
<arg value='/usr/bin/curl --config ${user.home}/.curlrc -k -X GET -H "Accept: application/xml" "https://www.assembla.com/spaces/milestones/all/tibant" -o "build/milestones.xml"' />
</exec>
<echo>Direct</echo>
<exec executable="/bin/env" dir="." failonerror="true">
</exec>
<exec executable="/usr/bin/curl" dir="." failonerror="true">
<arg value='--config' />
<arg value='${user.home}/.curlrc' />
<arg value='-k' />
<arg value='-X' />
<arg value='GET' />
<arg value='-H' />
<arg value='"Accept: application/xml"' />
<arg value='"https://www.assembla.com/spaces/milestones/all/tibant"' />
<arg value='-o' />
<arg value='"build/milestones.xml"' />
</exec>
</target>
我对环境进行了分类和比较,没有发现任何显著的差异
这把我难住了。救命啊 我认为这表明它运行不同的curl可执行文件(从而不同的libcurl),因为如果您尝试使用libcurl不支持的协议,libcurl会报告这条消息
确保错误文本中“https”前面没有空格,好像问题恰恰在于:URL中有一个初始空格。我认为这表明它运行不同的curl可执行文件(以及不同的libcurl),如果您尝试使用libcurl不支持的协议,那么libcurl会报告这条消息
确保错误文本中“https”前面没有空格,好像问题恰恰在于:URL中有一个初始空格。Ant出了问题。我可以用MacOs和Ant 1.8.2重现您的错误。 使用这个简单的Java main,它可以工作:
public static void main(String[] args) throws Throwable {
Process exec = Runtime.getRuntime().exec(
new String[] { "/usr/bin/curl", "-k", "-X", "GET", "-H", "Accept: application/xml",
"https://www.assembla.com/spaces/milestones/all/tibant", "-o", "build/milestones.xml" });
System.out.println(exec.waitFor());
System.err.println(IOUtils.toString(exec.getErrorStream()));
System.out.println(IOUtils.toString(exec.getInputStream()));
}
欢迎您在Ant的bugzilla中打开一个问题:Ant出了问题。我可以用MacOs和Ant 1.8.2重现您的错误。 使用这个简单的Java main,它可以工作:
public static void main(String[] args) throws Throwable {
Process exec = Runtime.getRuntime().exec(
new String[] { "/usr/bin/curl", "-k", "-X", "GET", "-H", "Accept: application/xml",
"https://www.assembla.com/spaces/milestones/all/tibant", "-o", "build/milestones.xml" });
System.out.println(exec.waitFor());
System.err.println(IOUtils.toString(exec.getErrorStream()));
System.out.println(IOUtils.toString(exec.getInputStream()));
}
欢迎您在Ant的bugzilla中打开一个问题:您不需要在
arg
值中使用额外的双引号“
。以下内容对我有用。引号被视为文本,并传递给curl-因此它认为您尝试使用的协议是”https
而不是您想要的https
<exec executable="/usr/bin/curl" dir="." failonerror="true">
<arg value='--config' />
<arg value='${user.home}/.curlrc' />
<arg value='-k' />
<arg value='-X' />
<arg value='GET' />
<arg value='-H' />
<arg value='Accept: application/xml' />
<arg value='https://www.assembla.com/spaces/milestones/all/tibant' />
<arg value='-o' />
<arg value='build/milestones.xml' />
</exec>
Accept…
、https:…
和build/milesones.xml
是更改后的arg值。您不需要额外的双引号“
在arg
值中。以下内容适合我。引号被视为文本,并传递给curl-因此它认为您尝试使用的协议是“https
,而不是您想要的https
<exec executable="/usr/bin/curl" dir="." failonerror="true">
<arg value='--config' />
<arg value='${user.home}/.curlrc' />
<arg value='-k' />
<arg value='-X' />
<arg value='GET' />
<arg value='-H' />
<arg value='Accept: application/xml' />
<arg value='https://www.assembla.com/spaces/milestones/all/tibant' />
<arg value='-o' />
<arg value='build/milestones.xml' />
</exec>
Accept…
、https:…
和build/milesones.xml
是更改后的arg值。起初我也认为它可能使用不同的可执行文件,这就是为什么我在这两种情况下都使用完整路径/usr/bin/curl
。我还可以确认上面是代码的副本和过去,并且没有任何程序g空间。即使某个讨厌我的答案的人-1,我会重复说libcurl是指协议XXX被禁用的人,如果在一种情况下它没有,在另一种情况下它不能是同一个libcurl。讨厌与否。在我看来,你的答案是错误的,没有帮助,这就是为什么我-1’使用它。这并不意味着我是一个“讨厌者”“。如果您仍然认为自己是对的,请详细说明不可见空间是如何涉及的,如何解析为不同的可执行文件,或者如何使用不同版本的libcurl。在我发帖之前,我有同样的想法(除了空间),并试图排除它们;我可以解释这种行为,因此我的帖子就是这样。那么请告诉我,不同的调用最终是如何使用不同版本的libcurl的?因为归根结底这就是问题所在。目前,您的回答只是提醒了我,我并没有声称理解或意识到它将如何调用不同的版本(我也不认为我们有足够的数据来说明),我只是将此作为一种解释,说明如何在一种情况下而不是在另一种情况下获得输出。我唯一能想到的另一个选择是,在其中一个案例中,有一个额外的选项,它限制了卷曲来考虑什么协议(用-PROTO)。最初,我也可能使用不同的可执行文件,这就是为什么我在这两种情况下都使用完整路径<代码> /Ur/bin /Curl < /代码>的原因。我还可以确认上面是代码的副本和过去,前面没有空格。即使某个讨厌我的答案的人-1,我也会重复libcurl是说协议XXX被禁用的那个,如果在一种情况下没有,在另一种情况下它不能是同一个libcurl。不管你讨厌与否,我认为你的回答是错误的,没有任何帮助,这就是我为什么选择它的原因。这并不意味着我是一个“憎恨者”。如果您仍然认为自己是对的,请详细说明不可见空间是如何涉及的,如何解析为不同的可执行文件,或者如何使用不同版本的libcurl。在我发帖之前,我有同样的想法(除了空间),并试图排除它们;我可以解释这种行为,因此我的帖子就是这样。那么请告诉我,不同的调用最终是如何使用不同版本的libcurl的?因为归根结底这就是问题所在。目前,您的回答只是提醒了我,我并没有声称理解或意识到它将如何调用不同的版本(我也不认为我们有足够的数据来说明),我只是将此作为一种解释,说明如何在一种情况下而不是在另一种情况下获得输出。我唯一能想到的另一个选择是,在其中一个案例中,有一个额外的选项,它限制了卷曲来考虑什么协议。