> For the complete documentation index, see [llms.txt](https://docs.skrape.it/docs/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://docs.skrape.it/docs/1.0.x/http-client/overview.md).

# 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](/docs/1.0.x/http-client/parse-html-from-web.md) 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](/docs/1.0.x/http-client/pre-configure-client.md) 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](/docs/1.0.x/http-client/browserfetcher.md) (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](/docs/1.0.x/http-client/overview.md#the-different-fetchers) and make further[ request option](/docs/1.0.x/http-client/parse-html-from-web.md) available in the clojure.

```kotlin
skrape(HttpFetcher) { // <-- pass any Fetcher, e.g. HttpFetcher, BrowserFetcher, ...
    // ... request options goes here, e.g the most basic would be url
    url = "https://docs.skrape.it"
    
    expect {}
    extract {}
}
```

{% hint style="info" %}
The http-request is only executed after either the [**`extract`**](/docs/1.0.x/dsl/extracting-data-from-websites.md) or [**`expect`**](/docs/1.0.x/dsl/basic-test-scenario.md) function has been called. This behaviour also allows to[ preconfigure the http-client](/docs/1.0.x/http-client/pre-configure-client.md) for multiple calls. If you use expect as well as extract it will only make 1 request.
{% endhint %}

### The Different Fetchers

Skrape{it} provides different types of Fetchers (aka Http-Clients) that can be passed to its DSL. All of them will execute http requests but each of them handles a different use-case.&#x20;

#### You want to scrape a simple HTML page, easy, as fast as possible, but with deactivated Javascript?

{% content-ref url="/pages/-MXYEil07evZ1rCjanN8" %}
[HttpFetcher](/docs/1.0.x/http-client/httpfetcher.md)
{% endcontent-ref %}

#### You want to scrape a complex website, maybe a SPA app that has been written with frameworks like React.js, Angular or Vue.js or at least rely on javascript a lot?

{% content-ref url="/pages/-MXYEsPty7Wu7XbfoBsF" %}
[BrowserFetcher](/docs/1.0.x/http-client/browserfetcher.md)
{% endcontent-ref %}

#### You want to scrape multiple HTML pages in parallel from inside a coroutine?

{% content-ref url="/pages/-MXYEqJcsvMzKYnghEq3" %}
[AsyncFetcher](/docs/1.0.x/http-client/asyncfetcher.md)
{% endcontent-ref %}


---

# Agent Instructions
This documentation is published with GitBook. GitBook is the documentation platform designed so that both humans and AI agents can read, navigate, and reason over technical content effectively. Learn more at gitbook.com.

## Querying This Documentation
If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter, and the optional `goal` query parameter:

```
GET https://docs.skrape.it/docs/1.0.x/http-client/overview.md?ask=<question>&goal=<endgoal>
```

`ask` is the immediate question: it should be specific, self-contained, and written in natural language.
`goal` is optional and describes the broader end goal you are ultimately trying to accomplish on behalf of the user. GitBook uses it to tailor the answer towards what is most useful for that goal.

The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
