# Custom Headers > Source: https://scrape.do/documentation/headers-cookies/custom-headers/ Take full control of request headers You can interfere with all headers sent to the target website via our service. Scrape.do sends User-Agent, Accept, Cookies, etc. from you. It takes all header parameters and forwards them. You must set `customHeaders=True` to use the feature. **cURL (API mode)** ```bash curl --location --request GET 'https://api.scrape.do/?token=YOUR_TOKEN&url=https://httpbin.co/headers&customHeaders=True' --header 'Test-Header-Key: TestValue' ``` **Python (API mode)** ```python import requests import urllib.parse token = "YOUR_TOKEN" targetUrl = urllib.parse.quote("https://httpbin.co/headers") customHeaders = "true" payload = {} url = "http://api.scrape.do/?token={}&url={}&customHeaders={}".format(token, targetUrl, customHeaders) headers = { 'Test-Header-Key': 'TestValue' } response = requests.request("GET", url, headers=headers, data=payload) print(response.text) ``` **Node.js (API mode)** ```javascript const axios = require('axios'); const token = "YOUR_TOKEN"; const targetUrl = encodeURIComponent("https://httpbin.co/headers"); const config = { 'method': 'GET', 'url': `https://api.scrape.do/?token=${token}&url=${targetUrl}&customHeaders=true`, 'headers': { 'Test-Header-Key': 'TestValue', } }; axios(config) .then(function (response) { console.log(response.data); }) .catch(function (error) { console.log(error); }); ``` **cURL (Proxy mode)** ```bash curl -k -x "http://YOUR_TOKEN:customHeaders=True@proxy.scrape.do:8080" 'https://httpbin.co/headers' -v --header 'Test-Header-Key: TestValue' ``` **Python (Proxy mode)** ```python import requests import urllib3 urllib3.disable_warnings(urllib3.exceptions.InsecureRequestWarning) url = "https://httpbin.co/headers" token = "YOUR_TOKEN" proxyModeUrl = "http://{}:customHeaders=true@proxy.scrape.do:8080".format(token) headers = { 'Test-Header-Key': 'TestValue' } proxies = { "http": proxyModeUrl, "https": proxyModeUrl, } response = requests.request("GET", url, proxies=proxies, verify=False,headers = headers) print(response.text) ``` **Node.js (Proxy mode)** ```javascript const axios = require('axios'); const token = "YOUR_TOKEN"; const targetUrl = "https://httpbin.co/anything"; axios({ method:"GET", url:targetUrl, proxy: { protocol:'http', host: 'proxy.scrape.do', port: 8080, auth: { username: token, password: 'customHeaders=true' } }, headers: { 'Test': 'TestValue', } }) .then(response => { console.log(response.data); }) .catch(error => { console.error(error.message); }); ``` *(Go, Ruby, Java, C#, PHP examples are also available on the HTML version.)* > [!NOTE] > If you leave the User-Agent information blank in the header field of the requests sent via programming languages, it can be filled with a default value like 'python/httpclient'. Therefore, we strongly recommend that you use a real User-Agent with this feature. **Result** ```json { "headers": { "Accept": "*/*", "Accept-Encoding": "gzip, deflate, br", "Accept-Language": "en-US,en;q=0.9", "Authority": "httpbin.co", "Cache-Control": "no-cache,no-cache", "Host": "httpbin.co", "Referer": "https://httpbin.co", "Sec-Ch-Ua": "\"Google Chrome\";v=\"107\", \"Chromium\";v=\"107\", \"Not=A?Brand\";v=\"24\"", "Sec-Ch-Ua-Mobile": "?0", "Sec-Ch-Ua-Platform": "\"macOS\"", "Sec-Fetch-Dest": "document", "Sec-Fetch-Mode": "navigate", "Sec-Fetch-Site": "none", "Sec-Fetch-User": "?1", "Test-Header-Key": "TestValue", "Upgrade-Insecure-Requests": "1", "User-Agent": "PostmanRuntime/7.29.2", "X-Amzn-Trace-Id": "Root=1-63748965-50104cf629bc898d03188f57" } } ```