#ssl #ant #curl
#ssl #ant #curl
Вопрос:
Я делаю get на сайте с https. Если я использую curl в exec
задаче Apache Ant, он не работает, жалуясь на то, что «https не поддерживается или отключен в libcurl»; однако, если я выполняю тот же вызов из Ant через оболочку, используя sh -c, это работает.
Вот моя цель 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>
и вот результат:
-sh-4.2$ ant list-milestones
Picked up _JAVA_OPTIONS: -Dawt.useSystemAAFontSettings=lcd
Buildfile: /usr/share/jenkins/jobs/TIBant-07-Upload/workspace/build.xml
[TIBant-Build] LOADING: /usr/share/jetty/TIBant-Build.properties
[TIBant-Build] LOADING: /usr/share/jetty/build.properties
[TIBant-Build] LOADING: config/ci.properties
[TIBant-Build] LOADING: config/default.properties
[TIBant] IMPORTED: tibant.xml
[TIBant] TIBant Home: /usr/share/jenkins/jobs/TIBant-07-Upload/workspace/src/ant
list-milestones:
[echo] Via SH
[exec] HOSTNAME=ve.mbqblqmj.vesrv.com
[exec] ANT_BIN=/usr/lib/apache-ant-1.8.2/bin
[exec] SHELL=/bin/sh
[exec] TERM=xterm-256color
[exec] HISTSIZE=1000
[exec] TIBCO_HOME=/opt/tibco
[exec] ANT_HOME=/usr/lib/apache-ant-1.8.2
[exec] ANT_OPTS=-Xmx128m -Djava.awt.headless=true
[exec] JAVA_OPTS=-Xmx128m -Djava.awt.headless=true
[exec] USER=jetty
[exec] LD_LIBRARY_PATH=/usr/lib/jvm/jdk1.6.0_27/jre/lib/amd64/server:/usr/lib/jvm/jdk1.6.0_27/jre/lib/amd64:/usr/lib/jvm/jdk1.6.0_27/jre/../lib/amd64
[exec] JETTY_PORT=8080
[exec] JAVA_BIN=/usr/lib/jvm/jdk1.6.0_27/bin
[exec] LS_COLORS=rs=0:di=38;5;27:ln=38;5;51:mh=44;38;5;15:pi=40;38;5;11:so=38;5;13:do=38;5;5:bd=48;5;232;38;5;11:cd=48;5;232;38;5;3:or=48;5;232;38;5;9:mi=05;48;5;232;38;5;15:su=48;5;196;38;5;15:sg=48;5;11;38;5;16:ca=48;5;196;38;5;226:tw=48;5;10;38;5;16:ow=48;5;10;38;5;21:st=48;5;21;38;5;15:ex=38;5;34:*.tar=38;5;9:*.tgz=38;5;9:*.arj=38;5;9:*.taz=38;5;9:*.lzh=38;5;9:*.lzma=38;5;9:*.tlz=38;5;9:*.txz=38;5;9:*.zip=38;5;9:*.z=38;5;9:*.Z=38;5;9:*.dz=38;5;9:*.gz=38;5;9:*.lz=38;5;9:*.xz=38;5;9:*.bz2=38;5;9:*.tbz=38;5;9:*.tbz2=38;5;9:*.bz=38;5;9:*.tz=38;5;9:*.deb=38;5;9:*.rpm=38;5;9:*.jar=38;5;9:*.war=38;5;9:*.ear=38;5;9:*.sar=38;5;9:*.rar=38;5;9:*.ace=38;5;9:*.zoo=38;5;9:*.cpio=38;5;9:*.7z=38;5;9:*.rz=38;5;9:*.jpg=38;5;13:*.jpeg=38;5;13:*.gif=38;5;13:*.bmp=38;5;13:*.pbm=38;5;13:*.pgm=38;5;13:*.ppm=38;5;13:*.tga=38;5;13:*.xbm=38;5;13:*.xpm=38;5;13:*.tif=38;5;13:*.tiff=38;5;13:*.png=38;5;13:*.svg=38;5;13:*.svgz=38;5;13:*.mng=38;5;13:*.pcx=38;5;13:*.mov=38;5;13:*.mpg=38;5;13:*.mpeg=38;5;13:*.m2v=38;5;13:*.mkv=38;5;13:*.ogm=38;5;13:*.mp4=38;5;13:*.m4v=38;5;13:*.mp4v=38;5;13:*.vob=38;5;13:*.qt=38;5;13:*.nuv=38;5;13:*.wmv=38;5;13:*.asf=38;5;13:*.rm=38;5;13:*.rmvb=38;5;13:*.flc=38;5;13:*.avi=38;5;13:*.fli=38;5;13:*.flv=38;5;13:*.gl=38;5;13:*.dl=38;5;13:*.xcf=38;5;13:*.xwd=38;5;13:*.yuv=38;5;13:*.cgm=38;5;13:*.emf=38;5;13:*.axv=38;5;13:*.anx=38;5;13:*.ogv=38;5;13:*.ogx=38;5;13:*.aac=38;5;45:*.au=38;5;45:*.flac=38;5;45:*.mid=38;5;45:*.midi=38;5;45:*.mka=38;5;45:*.mp3=38;5;45:*.mpc=38;5;45:*.ogg=38;5;45:*.ra=38;5;45:*.wav=38;5;45:*.axa=38;5;45:*.oga=38;5;45:*.spx=38;5;45:*.xspf=38;5;45:
[exec] JETTY_USER=jenkins
[exec] _JAVA_OPTIONS=-Dawt.useSystemAAFontSettings=lcd
[exec] NLSPATH=/usr/dt/lib/nls/msg/%L/%N.cat
[exec] JENKINS_HOME=/usr/share/jenkins
[exec] DESIGNER_BIN=/opt/tibco/designer/5.7/bin
[exec] MAIL=/var/spool/mail/jetty
[exec] PATH=/usr/local/bin:/bin:/usr/bin:/usr/local/sbin:/usr/sbin:/sbin:/var/cfengine/bin
[exec] PWD=/usr/share/jenkins/jobs/TIBant-07-Upload/workspace
[exec] JAVA_HOME=/usr/lib/jvm/jdk1.6.0_27
[exec] LANG=en_US.UTF-8
[exec] XFILESEARCHPATH=/usr/dt/app-defaults/%L/Dt
[exec] HISTCONTROL=ignoredups
[exec] SHLVL=2
[exec] HOME=/usr/share/jetty
[exec] LOGNAME=jetty
[exec] LESSOPEN=||/usr/bin/lesspipe.sh %s
[exec] DISPLAY=:0.0
[exec] G_BROKEN_FILENAMES=1
[exec] _=/bin/env
[exec] % Total % Received % Xferd Average Speed Time Time Time Current
[exec] Dload Upload Total Spent Left Speed
[exec]
[exec] 0 0 0 0 0 0 0 0 --:--:-- --:--:-- --:--:-- 0
[exec] 100 22852 0 22852 0 0 33357 0 --:--:-- --:--:-- --:--:-- 34835
[echo] Direct
[exec] HOSTNAME=ve.mbqblqmj.vesrv.com
[exec] ANT_BIN=/usr/lib/apache-ant-1.8.2/bin
[exec] TERM=xterm-256color
[exec] SHELL=/bin/sh
[exec] HISTSIZE=1000
[exec] ANT_HOME=/usr/lib/apache-ant-1.8.2
[exec] TIBCO_HOME=/opt/tibco
[exec] ANT_OPTS=-Xmx128m -Djava.awt.headless=true
[exec] USER=jetty
[exec] JAVA_OPTS=-Xmx128m -Djava.awt.headless=true
[exec] LS_COLORS=rs=0:di=38;5;27:ln=38;5;51:mh=44;38;5;15:pi=40;38;5;11:so=38;5;13:do=38;5;5:bd=48;5;232;38;5;11:cd=48;5;232;38;5;3:or=48;5;232;38;5;9:mi=05;48;5;232;38;5;15:su=48;5;196;38;5;15:sg=48;5;11;38;5;16:ca=48;5;196;38;5;226:tw=48;5;10;38;5;16:ow=48;5;10;38;5;21:st=48;5;21;38;5;15:ex=38;5;34:*.tar=38;5;9:*.tgz=38;5;9:*.arj=38;5;9:*.taz=38;5;9:*.lzh=38;5;9:*.lzma=38;5;9:*.tlz=38;5;9:*.txz=38;5;9:*.zip=38;5;9:*.z=38;5;9:*.Z=38;5;9:*.dz=38;5;9:*.gz=38;5;9:*.lz=38;5;9:*.xz=38;5;9:*.bz2=38;5;9:*.tbz=38;5;9:*.tbz2=38;5;9:*.bz=38;5;9:*.tz=38;5;9:*.deb=38;5;9:*.rpm=38;5;9:*.jar=38;5;9:*.war=38;5;9:*.ear=38;5;9:*.sar=38;5;9:*.rar=38;5;9:*.ace=38;5;9:*.zoo=38;5;9:*.cpio=38;5;9:*.7z=38;5;9:*.rz=38;5;9:*.jpg=38;5;13:*.jpeg=38;5;13:*.gif=38;5;13:*.bmp=38;5;13:*.pbm=38;5;13:*.pgm=38;5;13:*.ppm=38;5;13:*.tga=38;5;13:*.xbm=38;5;13:*.xpm=38;5;13:*.tif=38;5;13:*.tiff=38;5;13:*.png=38;5;13:*.svg=38;5;13:*.svgz=38;5;13:*.mng=38;5;13:*.pcx=38;5;13:*.mov=38;5;13:*.mpg=38;5;13:*.mpeg=38;5;13:*.m2v=38;5;13:*.mkv=38;5;13:*.ogm=38;5;13:*.mp4=38;5;13:*.m4v=38;5;13:*.mp4v=38;5;13:*.vob=38;5;13:*.qt=38;5;13:*.nuv=38;5;13:*.wmv=38;5;13:*.asf=38;5;13:*.rm=38;5;13:*.rmvb=38;5;13:*.flc=38;5;13:*.avi=38;5;13:*.fli=38;5;13:*.flv=38;5;13:*.gl=38;5;13:*.dl=38;5;13:*.xcf=38;5;13:*.xwd=38;5;13:*.yuv=38;5;13:*.cgm=38;5;13:*.emf=38;5;13:*.axv=38;5;13:*.anx=38;5;13:*.ogv=38;5;13:*.ogx=38;5;13:*.aac=38;5;45:*.au=38;5;45:*.flac=38;5;45:*.mid=38;5;45:*.midi=38;5;45:*.mka=38;5;45:*.mp3=38;5;45:*.mpc=38;5;45:*.ogg=38;5;45:*.ra=38;5;45:*.wav=38;5;45:*.axa=38;5;45:*.oga=38;5;45:*.spx=38;5;45:*.xspf=38;5;45:
[exec] JAVA_BIN=/usr/lib/jvm/jdk1.6.0_27/bin
[exec] JETTY_PORT=8080
[exec] JETTY_USER=jenkins
[exec] _JAVA_OPTIONS=-Dawt.useSystemAAFontSettings=lcd
[exec] JENKINS_HOME=/usr/share/jenkins
[exec] PATH=/usr/local/bin:/bin:/usr/bin:/usr/local/sbin:/usr/sbin:/sbin:/var/cfengine/bin
[exec] MAIL=/var/spool/mail/jetty
[exec] DESIGNER_BIN=/opt/tibco/designer/5.7/bin
[exec] PWD=/usr/share/jenkins/jobs/TIBant-07-Upload/workspace
[exec] JAVA_HOME=/usr/lib/jvm/jdk1.6.0_27
[exec] LANG=en_US.UTF-8
[exec] HISTCONTROL=ignoredups
[exec] HOME=/usr/share/jetty
[exec] SHLVL=1
[exec] LOGNAME=jetty
[exec] LESSOPEN=||/usr/bin/lesspipe.sh %s
[exec] DISPLAY=:0.0
[exec] G_BROKEN_FILENAMES=1
[exec] LD_LIBRARY_PATH=/usr/lib/jvm/jdk1.6.0_27/jre/lib/amd64/server:/usr/lib/jvm/jdk1.6.0_27/jre/lib/amd64:/usr/lib/jvm/jdk1.6.0_27/jre/../lib/amd64
[exec] NLSPATH=/usr/dt/lib/nls/msg/%L/%N.cat
[exec] XFILESEARCHPATH=/usr/dt/app-defaults/%L/Dt
[exec]
[exec] curl: (1) Protocol "https not supported or disabled in libcurl
BUILD FAILED
/usr/share/jenkins/jobs/TIBant-07-Upload/workspace/build.xml:509: exec returned: 1
Я отсортировал и сравнил среды и не смог найти каких-либо существенных различий.
Это поставило меня в тупик. Помогите!
Ответ №1:
Вам не нужны дополнительные двойные кавычки "
в 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
— это измененные значения аргументов.
Ответ №2:
Что-то идет не так с 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: http://issues.apache.org/bugzilla/enter_bug.cgi?product=Ant
Ответ №3:
Я бы сказал, что это указывает на то, что он запускает разные исполняемые файлы curl (и, следовательно, разные libcurls), поскольку это сообщение — это то, что сообщает libcurl, если вы пытаетесь использовать протокол, для поддержки которого он не был создан.
Убедитесь, что перед «https» в тексте ошибки нет предшествующего пробела, как будто проблема именно в этом: начальный пробел в URL.
Комментарии:
1. Изначально я также думал, что он может использовать разные исполняемые файлы, поэтому
/usr/bin/curl
в обоих случаях я использую полный путь. Я также могу подтвердить, что приведенное выше — это копия и прошлое кода, и предшествующего пробела нет.2. Даже если какой-то ненавистник -1 мой ответ, я повторю, что libcurl — это тот, который говорит, что протокол XXX отключен, и если это не так в одном случае, а в другом, это НЕ МОЖЕТ быть тот же libcurl. Ненавижу это или нет.
3. IMO, ваш ответ неправильный и бесполезный, поэтому я -1’это. Это не делает меня «ненавистником». Если вы все еще считаете, что вы правы, пожалуйста, поясните, как задействовано невидимое пространство, как
/usr/bin/curl
разрешаются разные исполняемые файлы или как используются разные версии libcurl. У меня были те же мысли, когда (за исключением пробела), прежде чем я опубликовал и попытался их исключить; Я мог бы объяснить поведение, отсюда и мой пост.4. итак, пожалуйста, скажите мне, как разные вызовы в конечном итоге используют разные версии libcurl? потому что, в конечном счете, в этом и заключается вопрос. На данный момент ваш ответ просто напоминает мне шутку Microsoft о вертолете в тумане
5. Я не утверждаю, что понимаю или понимаю, как это приведет к вызову разных версий (и я не думаю, что у нас достаточно данных, чтобы сказать), я просто представляю это как объяснение того, как вы можете получить результат в одном случае, а не в другом. Единственным другим вариантом, о котором я могу подумать, было бы то, что в одном из случаев используется дополнительная опция, которая ограничивает curl тем, какие протоколы следует учитывать (с помощью —proto ).