# Custom Cookies

Custom cookies are an extremely powerful feature of BrowserAPI. For example, they can be successfully used to scrape personalized content on a e-commerce site.

{% hint style="warning" %}
BrowserAPI does not allow the use of custom cookies for authentication purposes.
{% endhint %}

{% hint style="info" %}
Only the following cookies can be overwritten:
{% endhint %}

* ADSHUFFLER
* AWSALB
* AWSALBCORS
* AWSALBTG
* AWSALBTGCORS
* CF\_CLEARANCE
* CONSENT
* CUSTOMER\_CONTEXT
* LANG
* REF
* REMOVAL
* VISITS
* VISIT\_COUNT

Additional cookies may be added per domain by contacting our support.

## Custom Cookies Example

When using JavaScript rendering, custom cookies should be passed in a list in the `cookies` parameter. Each cookie object will have 3 properties: name, value and domain. Here is an example:

{% code overflow="wrap" %}

```json
[{"name":"CUSTOMER_CONTEXT", "value":"{\"customerId\":\"12345\"}", "domain":"httpbin.org"}]
```

{% endcode %}

And this is the URL encoded value from the example above:

{% code overflow="wrap" %}

```
%5B%7B%22name%22%3A%22CUSTOMER_CONTEXT%22%2C%20%22value%22%3A%22%7B%5C%22customerId%5C%22%3A%5C%2212345%5C%22%7D%22%2C%20%22domain%22%3A%22httpbin.org%22%7D%5D
```

{% endcode %}

{% hint style="warning" %} <mark style="color:orange;">**Warning!**</mark> Please make sure that you passed the correct domain value in the cookie objects. We used `"domain":"httpbin.org"` **in the examples below because we want those cookies to be set on the httpbin.org domain**.
{% endhint %}

### Integration Examples <a href="#custom-headers-integration-examples" id="custom-headers-integration-examples"></a>

{% tabs %}
{% tab title="cURL" %}
{% code overflow="wrap" fullWidth="false" %}

```bash
curl --request GET --url "https://api.webscrapingapi.com/v1?api_key=<YOUR_API_KEY>&url=http%3A%2F%2Fhttpbin.org%2Fcookies&cookies=%5B%7B%22name%22%3A%22CUSTOMER_CONTEXT%22%2C%20%22value%22%3A%22%7B%5C%22customerId%5C%22%3A%5C%2212345%5C%22%7D%22%2C%20%22domain%22%3A%22httpbin.org%22%7D%5D"
```

{% endcode %}
{% endtab %}

{% tab title="NodeJS" %}
{% code overflow="wrap" %}

```javascript
const http = require("https");

const options = {
  "method": "GET",
  "hostname": "api.webscrapingapi.com",
  "port": null,
  "path": "v1?api_key=<YOUR_API_KEY>&url=http%3A%2F%2Fhttpbin.org%2Fcookies&cookies=%5B%7B%22name%22%3A%22CUSTOMER_CONTEXT%22%2C%20%22value%22%3A%22%7B%5C%22customerId%5C%22%3A%5C%2212345%5C%22%7D%22%2C%20%22domain%22%3A%22httpbin.org%22%7D%5D"
};

const req = http.request(options, function (res) {
  const chunks = [];

  res.on("data", function (chunk) {
    chunks.push(chunk);
  });

  res.on("end", function () {
    const body = Buffer.concat(chunks);
    console.log(body.toString());
  });
});

req.end();
```

{% endcode %}
{% endtab %}

{% tab title="Python" %}
{% code overflow="wrap" %}

```python
import requests

API_KEY = '<YOUR_API_KEY>'
SCRAPER_URL = 'https://api.webscrapingapi.com/v1'
COOKIES = '%5B%7B%22name%22%3A%22CUSTOMER_CONTEXT%22%2C%20%22value%22%3A%22%7B%5C%22customerId%5C%22%3A%5C%2212345%5C%22%7D%22%2C%20%22domain%22%3A%22httpbin.org%22%7D%5D'

TARGET_URL = 'https://httpbin.org/cookies'

PARAMS = {
    "api_key": API_KEY,
    "url": TARGET_URL,
    "render_js": 1,
    "cookies": COOKIES
}

response = requests.get(SCRAPER_URL, params=PARAMS, headers=HEADERS)

print(response.text)
```

{% endcode %}
{% endtab %}

{% tab title="PHP" %}
{% code overflow="wrap" %}

```php
<?php

$curl = curl_init();

curl_setopt_array($curl, [
  CURLOPT_URL => "https://api.webscrapingapi.com/v1?api_key=<YOUR_API_KEY>&url=http%3A%2F%2Fhttpbin.org%2Fcookies&cookies=%5B%7B%22name%22%3A%22CUSTOMER_CONTEXT%22%2C%20%22value%22%3A%22%7B%5C%22customerId%5C%22%3A%5C%2212345%5C%22%7D%22%2C%20%22domain%22%3A%22httpbin.org%22%7D%5D",
  CURLOPT_RETURNTRANSFER => true,
  CURLOPT_ENCODING => "",
  CURLOPT_MAXREDIRS => 10,
  CURLOPT_TIMEOUT => 30,
  CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
  CURLOPT_CUSTOMREQUEST => "GET"
]);

$response = curl_exec($curl);
$err = curl_error($curl);

curl_close($curl);

if ($err) {
  echo "cURL Error #:" . $err;
} else {
  echo $response;
}
```

{% endcode %}
{% endtab %}

{% tab title="Go" %}
{% code overflow="wrap" %}

```go
package main

import (
	"fmt"
	"net/http"
	"io/ioutil"
)

func main() {

	url := "https://api.webscrapingapi.com/v1?api_key=<YOUR_API_KEY>&url=http%3A%2F%2Fhttpbin.org%2Fcookies&cookies=%5B%7B%22name%22%3A%22CUSTOMER_CONTEXT%22%2C%20%22value%22%3A%22%7B%5C%22customerId%5C%22%3A%5C%2212345%5C%22%7D%22%2C%20%22domain%22%3A%22httpbin.org%22%7D%5D"

	req, _ := http.NewRequest("GET", url, nil)

	res, _ := http.DefaultClient.Do(req)

	defer res.Body.Close()
	body, _ := ioutil.ReadAll(res.Body)

	fmt.Println(res)
	fmt.Println(string(body))

}
```

{% endcode %}
{% endtab %}

{% tab title="Java" %}
{% code overflow="wrap" %}

```java
HttpResponse<String> response = Unirest.get("https://api.webscrapingapi.com/v1?api_key=<YOUR_API_KEY>&url=http%3A%2F%2Fhttpbin.org%2Fcookies&cookies=%5B%7B%22name%22%3A%22CUSTOMER_CONTEXT%22%2C%20%22value%22%3A%22%7B%5C%22customerId%5C%22%3A%5C%2212345%5C%22%7D%22%2C%20%22domain%22%3A%22httpbin.org%22%7D%5D")
  .asString();
```

{% endcode %}
{% endtab %}

{% tab title=".NET" %}
{% code overflow="wrap" %}

```csharp
var client = new RestClient("https://api.webscrapingapi.com/v1?api_key=<YOUR_API_KEY>&url=http%3A%2F%2Fhttpbin.org%2Fcookies&cookies=%5B%7B%22name%22%3A%22CUSTOMER_CONTEXT%22%2C%20%22value%22%3A%22%7B%5C%22customerId%5C%22%3A%5C%2212345%5C%22%7D%22%2C%20%22domain%22%3A%22httpbin.org%22%7D%5D");
var request = new RestRequest(Method.GET);
IRestResponse response = client.Execute(request);
```

{% endcode %}
{% endtab %}

{% tab title="Ruby" %}
{% code overflow="wrap" %}

```ruby
require 'uri'
require 'net/http'
require 'openssl'

url = URI("https://api.webscrapingapi.com/v1?api_key=<YOUR_API_KEY>&url=http%3A%2F%2Fhttpbin.org%2Fcookies&cookies=%5B%7B%22name%22%3A%22CUSTOMER_CONTEXT%22%2C%20%22value%22%3A%22%7B%5C%22customerId%5C%22%3A%5C%2212345%5C%22%7D%22%2C%20%22domain%22%3A%22httpbin.org%22%7D%5D")

http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
http.verify_mode = OpenSSL::SSL::VERIFY_NONE

request = Net::HTTP::Get.new(url)

response = http.request(request)
puts response.read_body
```

{% endcode %}
{% endtab %}
{% endtabs %}

<details>

<summary>Response Example</summary>

```html
<html><head><meta name="color-scheme" content="light dark"><meta charset="utf-8"></head><body><pre>{
  "cookies": {
    "CUSTOMER_CONTEXT": "{\"customerId\":\"12345\"}"
  }
}
</pre><div class="json-formatter-container"></div></body></html>
```

</details>

{% hint style="danger" %} <mark style="color:red;">**Important!**</mark> The `url` parameter has to be encoded.

*( i.e. **\&url=https%3A%2F%2Fwww\.webscrapingapi.com%2F** )*
{% endhint %}


---

# Agent Instructions: 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:

```
GET https://docs.webscrapingapi.com/browser-api/advanced-api-features/custom-cookies.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
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.
