--- title: About the http Resource --- # http Use the `http` InSpec audit resource to test an http endpoint.

In InSpec 1.40 and earlier, this resource always executes on the host on which inspec exec is run, even if you use the --target option to remotely scan a different host.

Beginning with InSpec 1.41, you can enable the ability to have the HTTP test execute on the remote target, provided curl is available. See the "Local vs. Remote" section below.

Executing the HTTP test on the remote target will be the default behavior in InSpec 2.0.


## Syntax An `http` resource block declares the configuration settings to be tested: describe http('url', auth: {user: 'user', pass: 'test'}, params: {params}, method: 'method', headers: {headers}, data: data, open_timeout: 60, read_timeout: 60, ssl_verify: true) do its('status') { should eq number } its('body') { should eq 'body' } its('headers.name') { should eq 'header' } end where * `('url')` is the url to test * `auth: { user: 'user', pass: 'test' }` may be specified for basic auth request * `{params}` may be specified for http request parameters * `'method'` may be specified for http request method (default to 'GET') * `{headers}` may be specified for http request headers * `data` may be specified for http request body * `open_timeout` may be specified for a timeout for opening connections (default to 60) * `read_timeout` may be specified for a timeout for reading connections (default to 60) * `ssl_verify` may be specified to enable or disable verification of SSL certificates (default to `true`)
## Local vs. Remote Beginning with InSpec 1.41, you can enable the ability to have the HTTP test execute on the remote target: describe http('http://www.example.com', enable_remote_worker: true) do its('body') { should cmp 'awesome' } end In InSpec 2.0, the HTTP test will automatically execute remotely whenever InSpec is testing a remote node. ## Examples The following examples show how to use this InSpec audit resource. ### Simple http test For example, a service is listening on default http port can be tested like this: describe http('http://localhost') do its('status') { should cmp 200 } end ### Complex http test describe http('http://localhost:8080/ping', auth: {user: 'user', pass: 'test'}, params: {format: 'html'}, method: 'POST', headers: {'Content-Type' => 'application/json'}, data: '{"data":{"a":"1","b":"five"}}') do its('status') { should cmp 200 } its('body') { should cmp 'pong' } its('headers.Content-Type') { should cmp 'text/html' } end
### body The `body` matcher tests body content of http response: its('body') { should eq 'hello\n' } ### headers The `headers` matcher returns an hash of all http headers: its('headers') { should eq {} } Individual headers can be tested via: its('headers.Content-Type') { should cmp 'text/html' } ### status The `status` matcher tests status of the http response: its('status') { should eq 200 }