How could I curl for a request with headers in shell scripting

前端 未结 1 639
太阳男子
太阳男子 2020-12-21 13:19

I tried to execute a CURL statement as follows, for which I am getting required response:

curl -s -POST --header \'Content-Type: application/json\' \'http://         


        
相关标签:
1条回答
  • 2020-12-21 14:01

    Single quotes ' (you're using in -d argument) preserve the literal value of each character, including the $ (see this SO answer), and that's why your variable query_string is not being expanded.

    Try this:

    ~$ query_string="my query"
    
    ~$ echo '$query_string'
    $query_string
    
    ~$ echo "$query_string"
    my query
    

    So, you need to use double quotes " if you wish your variables to expand to its values.

    However, in order to nest double quotes (inside other double quotes), as in you JSON data, you must either:

    1. escape the inner quotes, like this:

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

      but that gets very ugly, very soon; or

    2. concatenate strings under alternating single and double quotes, like this:

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

      which may be more readable for shorter strings; or

    3. use a here-document:

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

      Here-documents are particularly convenient for longer documents in which you wish for parameter/variable expansion, command substitution, arithmetic expansion, etc.

    In summary, after defining your JSON query with one of the above ways (perhaps via a here-document), you can write your curl command like this:

    curl -s -X POST -H 'Content-Type: application/json' 'http://www.dummy.com/projectname/page_relevance' -d "$query"
    
    0 讨论(0)
提交回复
热议问题