Yuriy Leonov
Yuriy Leonov

Reputation: 504

Can't insert variable with two headers in curl

I have following sh script

#!/usr/bin/env bash
headers='-H "custom1: ololo1" -H "custom2: ololo2"'
value_for_header="value"
curl -X "PUT" -H "Content-Type: application/json" -H "custom_ololo:  $value_for_header" $headers http://localhost:8000/ -d '{"a": true}' -vv

Log when execute it:

* Rebuilt URL to: ololo1"/
* Hostname was NOT found in DNS cache
* Could not resolve host: ololo1"
* Closing connection 0
curl: (6) Could not resolve host: ololo1"
* Rebuilt URL to: ololo2"/
* Hostname was NOT found in DNS cache
* Could not resolve host: ololo2"
* Closing connection 1
curl: (6) Could not resolve host: ololo2"
* Hostname was NOT found in DNS cache
*   Trying 127.0.0.1...
* Connected to localhost (127.0.0.1) port 8000 (#2)
> PUT / HTTP/1.1
> User-Agent: curl/7.35.0
> Host: localhost:8000
> Accept: */*
> Content-Type: application/json
> custom_ololo: value
> Content-Length: 40
> 
* upload completely sent off: 40 out of 40 bytes
* HTTP 1.0, assume close after body
< HTTP/1.0 400
< Date: Thu, 21 Jul 2016 12:32:13 GMT
< Server: WSGIServer/0.1 Python/2.7.6
< X-Frame-Options: SAMEORIGIN
< Content-Type: application/json
< 
* Closing connection 2

As we can see -H "custom_ololo: $value_for_header" works well > custom_ololo: value

But string $headers is not inserted correctly. I've tried put "$headers" and ${headers} but no result

So, my question is: How is correctly insert strings with several headers into sh script with curl.

Upvotes: 4

Views: 629

Answers (2)

Nam Pham
Nam Pham

Reputation: 316

You need to put $headers into ""

curl -X "PUT" -H "Content-Type: application/json" -H "custom_ololo:  $value_for_header" "$headers" http://localhost:8000/ -d '{"a": true}' -vv

Upvotes: 1

chepner
chepner

Reputation: 531125

You need to use an array, at which point you can put all the headers in the array and simplify your call.

#!/usr/bin/env bash
value_for_header="value"
headers=(
  -H "custom1: ololo1"
  -H "custom2: ololo2"
  -H "Content-Type: application/json"
  -H "custom_ololo: $value_for_header"
)
curl -X "PUT" "${headers[@]}" http://localhost:8000/ -d '{"a": true}' -vv

Upvotes: 4

Related Questions