使用curl与-d param1 = value1似乎无法正常工作

时间:2017-02-24 14:16:54

标签: linux shell curl

我每小时运行一次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&param2=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

1 个答案:

答案 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