## Common Options `-#, --progress-bar` Make curl display a simple progress bar instead of the more informational standard meter. `-b, --cookie ` Supply cookie with request. If no `=`, then specifies the cookie file to use (see `-c`). `-c, --cookie-jar ` File to save response cookies to. `-d, --data ` Send specified data in POST request. Details provided below. `-f, --fail` Fail silently (don't output HTML error form if returned). `-F, --form ` Submit form data. `-H, --header
` Headers to supply with request. `-i, --include` Include HTTP headers in the output. `-I, --head` Fetch headers only. `-k, --insecure` Allow insecure connections to succeed. `-L, --location` Follow redirects. `-o, --output ` Write output to . Can use `--create-dirs` in conjunction with this to create any directories specified in the `-o` path. `-O, --remote-name` Write output to file named like the remote file (only writes to current directory). `-s, --silent` Silent (quiet) mode. Use with `-S` to force it to show errors. `-v, --verbose` Provide more information (useful for debugging). `-w, --write-out ` Make curl display information on stdout after a completed transfer. See man page for more details on available variables. Convenient way to force curl to append a newline to output: `-w "\n"` (can add to `~/.curlrc`). `-X, --request` The request method to use. ## POST When sending data via a POST or PUT request, two common formats (specified via the `Content-Type` header) are: * `application/json` * `application/x-www-form-urlencoded` Many APIs will accept both formats, so if you're using `curl` at the command line, it can be a bit easier to use the form urlencoded format instead of json because * the json format requires a bunch of extra quoting * curl will send form urlencoded by default, so for json the `Content-Type` header must be explicitly set This gist provides examples for using both formats, including how to use sample data files in either format with your `curl` requests. ## curl usage For sending data with POST and PUT requests, these are common `curl` options: * request type * `-X POST` * `-X PUT` * content type header * `-H "Content-Type: application/x-www-form-urlencoded"` * `-H "Content-Type: application/json"` * data * form urlencoded: `-d "param1=value1¶m2=value2"` or `-d @data.txt` * json: `-d '{"key1":"value1", "key2":"value2"}'` or `-d @data.json` ## Examples ### POST application/x-www-form-urlencoded `application/x-www-form-urlencoded` is the default: curl -d "param1=value1¶m2=value2" -X POST http://localhost:3000/data explicit: curl -d "param1=value1¶m2=value2" -H "Content-Type: application/x-www-form-urlencoded" -X POST http://localhost:3000/data with a data file curl -d "@data.txt" -X POST http://localhost:3000/data ### POST application/json curl -d '{"key1":"value1", "key2":"value2"}' -H "Content-Type: application/json" -X POST http://localhost:3000/data with a data file curl -d "@data.json" -X POST http://localhost:3000/data