app/views/opro/oauth/docs/markdown/curl.md.erb
# Curl
[Curl](http://curl.haxx.se/) is a command line tool for transferring data with a url syntax. Most systems should have curl installed. Open up terminal on OS X or command prompt on Windows and type in `curl`. There are parts of the OAuth process that were not intended for direct human interaction, such as exchanging the code from the Provider for an access_token. Because of this, it can be easier to use `curl` to talk to a server directly instead of using a web browser.
## What is it good for?
With curl, we're able to arbitrarily add parameters to our requests and send using arbitrary HTTP verbs (GET/POST/DELETE) that are difficult to simulate in the browser. If you need to `POST` data to a url, doing so with curl is much easier than constructing a form for testing.
## How do I use it?
On the command line, you should be able to get get help by typing `man curl` if your system supports man pages. Below are some simple and common use cases.
### Get Webpage
You can get the entire contents of a web document by simply calling curl with that url:
$ curl https://www.google.com
### Get Headers
You can ask for the headers of a request by adding the `-I` flag to a curl command:
$ curl https://www.google.com -I
The response may look something like this:
HTTP/1.1 200 OK
Expires: -1
Cache-Control: private, max-age=0
Content-Type: text/html; charset=ISO-8859-1
Server: gws
X-XSS-Protection: 1; mode=block
X-Frame-Options: SAMEORIGIN
Transfer-Encoding: chunked
### Set Headers
You can set a request header by using `-H`. For example, if you wanted to send an access_token in a header, you could issue this request (assuming your access token is '9693accessTokena7ca570bbaf'):
$ curl -H "Authorization: token 9693accessTokena7ca570bbaf" "<%= oauth_test_url(:show_me_the_money, :protocol => @protocol) %>"
### HTTP Verb
You can specify the type of request you make in curl (GET, POST, PUT, DELETE, etc.) by using `-X`. For example, if you wanted to POST to the /products path at <%= root_url %>, you could do so like this:
$ curl -X POST <%= root_url %>products
# Hurl
[Hurl](http://hurl.it/) is an open source browser-based `curl` implementation. If you're going to do quite a few curl requests, using it can be easier than the command line.