【问题标题】:Passing URLs as Parameters to CGI Script将 URL 作为参数传递给 CGI 脚本
【发布时间】:2013-12-12 09:45:08
【问题描述】:

我在 bash shell 中工作,我试图循环通过一个 html 页面通过 URL 传递给我的 cgi 脚本的每个参数。我不确定在“$@”中使用 for i 是否正在做我需要的事情。我需要遍历 URL 传递的每个参数。

for site in "$@"
do
p=`links -dump $site`
done

一个示例 URL 如下:

cgi/word?http://en.wikipedia.org/wiki/Wienermobile+http://en.wikipedia.org/wiki/Apple

这两个网址是我的参数。

我对深度 cgi 的使用以及网页和脚本之间的使用非常陌生,所以如果这是一个简单的修复,请原谅。

【问题讨论】:

    标签: bash shell url cgi


    【解决方案1】:

    您提供的示例实际上不是有效的 URL,因为它没有正确转义(例如,请参阅 wikipedia 上的“Percent-encoding”)

    cgi/word?http://en.wikipedia.org/wiki/Wienermobile+http://en.wikipedia.org/wiki/Apple
    

    应该更像

    cgi/word?http%3A%2F%2Fen.wikipedia.org%2Fwiki%2FWienermobile%20http%3A%2F%2Fen.wikipedia.org%2Fwiki%2FApple
    

    HTTP 不是一个微不足道的协议,您最好使用框架,而不是在 shell 中编写(这增加了 shell 附带的所有陷阱的安全风险)

    但只是为了好玩,这里有一个 shell 中的示例 CGI 脚本,用于解码查询字符串。

    #!/bin/sh
    
    percentdecode() {
        /usr/bin/printf "$(/usr/bin/printf %s "$1" | sed -e 's/%/\\x/g; s/+/ /g')"
    }
    
    qsdecode() (
        IFS=\&
        for kv in $QUERY_STRING ; do
            IFS==
            set -- $kv
            if [ $# -ne 2 ]; then
                echo "Not a valid key-value pair: $kv"
                continue
            fi
            k=$(percentdecode "$1")
            v=$(percentdecode="$2")
    
            echo "Key: $k"
            echo "Value: $v" 
        done
    }
    
    
    cat <<'EOF'
    Status: 200 OK
    Content-Type: text/plain; charset=UTF-8
    
    EOF
    
    qsdecode
    

    这会解析传统的查询字符串格式,该格式将键值存储传输为 ?a=b&amp;c=d&amp;e=f。最好也建议您遵循这种格式格式。如果您必须使用 ?value1+value2+value3 之类的东西,那么解析起来非常简单:

    decode_plusdelimited() (
        unset IFS
        # percentdecode maps '+' and '%20' to ' '
        for value in $(percentdecode "$QUERY_STRING"); do
            echo "Got value: $value"
        done
    )
    

    (请注意,您没有给出加号分隔格式的精确规范,所以这只是一个近似值)

    【讨论】:

      猜你喜欢
      • 2022-11-21
      • 1970-01-01
      • 2019-07-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-08-12
      • 1970-01-01
      相关资源
      最近更新 更多