我每小时运行一次shell Unix(CentOS 7上的crontab)。
在该shell中,循环读取并继续处理在定义的文件夹中找到的所有新文件。 在每个文件处理结束时,使用一些参数发送CURL命令,例如:
curl https://aaaaaa.com/website -d param1=value1 -d param2=value2 ....
每次shell由crontab运行时,第一个CURL都会正确转换为真正的URL并由Apache / Tomcat接收,但所有其他都不好。事实上,第二个和下面的CURL似乎没有以正确的格式转换,如
https://aaaaaa.com/website?param1=value1¶m2=value2
但它们会像
一样发送https://aaaaaa.com/website -d param1=value1 -d param2=value2
因此网站无法正确处理参数。
为什么第一个命令被正确转换为正确的URL格式而不是以下内容?
编辑 - 编辑
shell的一部分:
#!/bin/bash
...
#======================================================
# FUNCTIONS
#======================================================
UpdateStatus () {
CMD_CURL="${URL_WEBSITE} -d client=CLIENT -d site=TEST -d produit=MEDIASFILES -d action=update"
CMD_CURL="${CMD_CURL} -d codecmd=UPDATE_MEDIA_STATUS"
CMD_CURL="${CMD_CURL} -d idmedia=$4"
CMD_CURL="${CMD_CURL} -d idbatch=$3"
CMD_CURL="${CMD_CURL} -d statusmedia=$2"
if [[ ! -z "$5" ]]; then
CMD_CURL="${CMD_CURL} -d filename=$5"
fi
echo " ${CMD_CURL}" >> $1
CURL_RESULT=`curl -k ${CMD_CURL}`
CURL_RESULT=`echo ${CURL_RESULT} | tr -d ' '`
echo " Result CURL = ${CURL_RESULT}" >> $1
if [ "${CURL_RESULT}" = "OK" ]; then
return 0
fi
return 1
}
#======================================================
# MAIN PROGRAM
#======================================================
echo "----- Batch in progress : `date '+%d/%m/%y - %H:%M:%S'` -----"
for file in $( ls ${DIR_FACTORY_BATCHFILES}/*.batch )
do
...
old_IFS=$IFS
while IFS=';' read <&3 F_STATUS F_FILEIN F_TYPE F_CODE F_ID F_IDPARENT F_TAGID3 F_PROF F_YEARMEDIA F_DATECOURS F_TIMEBEGINCOURS F_LANG || [[ -n "$F_STATUS $F_FILEIN $F_TYPE $F_CODE $F_ID $F_IDPARENT $F_TAGID3 $F_PROF $F_YEARMEDIA $F_DATECOURS $F_TIMEBEGINCOURS $F_LANG" && $F_STATUS ]];
do
...
UpdateStatus ${LOG_FILENAME} ${STATUS_ERROR} ${F_ID} ${F_IDPARENT}
...
done 3< $file
IFS=$Old_IFS
...
done
答案 0 :(得分:0)
你需要提供&#34; -d&#34; URL之前的标志和值:
curl -d param1=value1 -d param2=value2 https://aaaaaa.com/website
此外,此命令将发送参数/值作为POST参数,而不是查询参数。你可以使用&#34; -G&#34;标志,可能与&#34; - url-encode&#34;结合使用要作为查询参数发送,请参阅: https://unix.stackexchange.com/questions/86729/any-way-to-encode-the-url-in-curl-command