2013-11-27 46 views
1

我正在bash shell中工作,我試圖通過URL通過html頁面傳遞給我的cgi腳本的每個參數。我不確定是否在「$ @」中使用我正在做我所需要的。我需要遍歷URL傳遞的每個參數。將URL作爲參數傳遞給CGI腳本

for site in "[email protected]" 
do 
p=`links -dump $site` 
done 

一個例子URL可能如下:

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

當兩個URL是我的參數。

我很新的深入cgi使用和網頁和腳本之間使用,所以如果這是一個簡單的修復,請原諒。

回答

1

你給的例子實際上不是一個有效的URL,因爲它不是正確轉義(見「百分比編碼」在維基百科爲例)

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中的示例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&c=d&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 
) 

(請注意,您沒有給加分隔格式的精確規範,所以這只是一個近似值)