# Overview

Skrape{it} offers an unified, intuitive and DSL-controlled way to make parsing of websites as comfortable as possible.&#x20;

* [x] [Http-Client DSL](https://docs.skrape.it/docs/http-client/request-options) without verbosity and ceremony to make requests and corresponding request options like headers, cookies etc. in a fluent style interface.&#x20;
* [x] [Pre-configure a client](https://docs.skrape.it/docs/http-client/pre-configure-client) once to either reuse it or adjust only the things that differ at certain requests - especially handy while working with authentication flows or custom headers.
* [x] Can [handle client side rendered web pages](https://docs.skrape.it/docs/http-client/fetchers/browserfetcher) (e.g. pages created with frameworks like React.js, Angular or Vue.js or pages manipulated with jQuery or other javascript)

A Http request is done as easy as in the given example. Just call the `skrape` function wherever you want in your code. It will force you to pass a [fetcher](https://docs.skrape.it/docs/http-client/fetchers) and makes further[ request option](https://docs.skrape.it/docs/http-client/request-options) available in the clojure.&#x20;

```kotlin
skrape(HttpFetcher) { // <-- pass any Fetcher, e.g. HttpFetcher, BrowserFetcher, ...
    request {
        // ... request options goes here, e.g the most basic would be url
    }
    response {
        // do stuff with the response like parsing the response body ...
    }
}
```

{% hint style="info" %}
The http-request is only executed after either the `response` function has been called. This behaviour also allows to[ preconfigure the http-client](https://docs.skrape.it/docs/http-client/pre-configure-client) and reusing request settings for multiple calls.
{% endhint %}
