2016-02-10 91 views
2

我嘗試如下執行卷曲聲明,對此我得到所需的響應:我怎麼能捲曲與在shell腳本頭的請求

curl -s -POST --header 'Content-Type: application/json' 'http://www.dummy.com/projectname/page_relevance' -d '{"query": "q_string", "results": [{"abstract": "abs_string", "title": "title_string"}, "mode": "value", "cache": true, "source": "value"}' 

但是,當我試圖通過變量值參數「查詢」,下面未提到的作品和捲曲陳述觀察到了一些錯誤的語句迴應:

curl -s -POST --header 'Content-Type: application/json' 'http://www.dummy.com/projectname/page_relevance' -d '{"query": "$query_string", "results": [{"abstract": "abs_string", "title": "title_string"}, "mode": "value", "cache": true, "source": "value"}' 

錯誤聲明:

未找到[CFN#0005]

它的工作原理!

這是此服務器的默認網頁。

Web服務器軟件正在運行,但尚未添加任何內容。

但是相信我構成第二可變捲曲請求類似於我在第一執行相同的捲曲請求。這是使用echo來替換$ query_string的正確值來測試的。

我還試圖在另一種方法中,其中,我還沒有用於單參數的任何變量,而不是我試圖如下:

a='{"query": "query_value", "results": [{"abstract": "abs_string", "title": "title_string"}, "mode": "value", "cache": true, "source": "value"}' 
curl -s -POST --header 'Content-Type: application/json' 'http://www.dummy.com/projectname/page_relevance' -d $a 

我還試圖使用${a}取代的值,"$a"'$a'

還觀察到同樣的錯誤。

+0

刪除「-POST」部分作爲開​​始,這是完全錯誤的,再加入'--libcurl dump.txt',並檢查到底是什麼捲曲你的命令發出,它通常給你很多線索 –

回答

2

單引號'(您使用的是-d參數)保持每個字符的字面意義,包括$(見this SO answer),這就是爲什麼你的變量query_string不被擴大。

試試這個:

~$ query_string="my query" 

~$ echo '$query_string' 
$query_string 

~$ echo "$query_string" 
my query 

所以,你需要的,如果你希望你的變量,以擴大它的值用雙引號"

然而,爲了巢雙引號(其它雙引號內),如您JSON數據,你必須:

  1. 逃生內引號,像這樣:

    ~$ echo "{\"query\": \"$query_string\"}" 
    {"query": "my query"} 
    

    但很快就會變得非常醜陋;或

  2. 串連下交替的單鍵和雙引號字符串,像這樣:

    ~$ echo '{"query": "'"$query_string"'"}"' 
    {"query": "my query"}" 
    

    其可以是用於短字符串的詳細可讀;或

  3. 使用這裏文檔

    ~$ read query <<-END 
    {"query": "$query_string"} 
    END 
    
    ~$ echo "$query" 
    {"query": "my query"} 
    

    Here-documents是要在其中進行參數/變量擴展,命令替換,算術擴展更長的文檔特別方便等

總之,在用上述方法之一(可能通過here-document)定義您的JSON查詢後,您可以編寫curl這樣的命令:

curl -s -X POST -H 'Content-Type: application/json' 'http://www.dummy.com/projectname/page_relevance' -d "$query"