Custom Headers
WebScrapingAPI allows you to add your own headers to a request and get customised results.
Custom HTTP headers are useful when you want to provide additional information to your request. If your request requires passing custom HTTP headers, all you have to do is to append WSA- to your header's name and add them to your request.
For example, the Sec-Fetch-Dest: document header will be passed as WSA-Sec-Fetch-Dest: document.
Only use this feature to get customized results, do not use this feature to avoid blocks. WebScrapingAPI has a powerful internal engine that takes care of everything for you.

Custom Headers Integration Examples

cURL
NodeJS
Python
PHP
Go
Java
.NET
Ruby
curl --request GET --url "https://api.webscrapingapi.com/v1?api_key=<YOUR_API_KEY>&url=http%3A%2F%2Fhttpbin.org%2Fheaders" --header "WSA-My-header: test" --header "WSA-User-Agent: potato"
const http = require("https");
const options = {
"method": "GET",
"hostname": "api.webscrapingapi.com",
"port": null,
"path": "/v1?api_key=%7B%7Bapi_key%7D%7D&url=http%3A%2F%2Fhttpbin.org%2Fheaders",
"headers": {
"Wsa-My-header": "test",
"Wsa-User-Agent": "potato"
}
};
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();
import requests
API_KEY = '<YOUR_API_KEY>'
SCRAPER_URL = 'https://api.webscrapingapi.com/v1'
TARGET_URL = 'https://httpbin.org/headers'
HEADERS = {
'WSA-My-header': "test",
'WSA-User-Agent': "potato"
}
PARAMS = {
"api_key":API_KEY,
"url": TARGET_URL,
"render_js":1
}
response = requests.get(SCRAPER_URL, params=PARAMS, headers=HEADERS)
print(response.text)
<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.webscrapingapi.com/v1?api_key=%7B%7Bapi_key%7D%7D&url=http%3A%2F%2Fhttpbin.org%2Fheaders",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => [
"Wsa-My-header: test",
"Wsa-User-Agent: potato"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}
package main
import (
"fmt"
"net/http"
"io/ioutil"
)
func main() {
url := "https://api.webscrapingapi.com/v1?api_key=%7B%7Bapi_key%7D%7D&url=http%3A%2F%2Fhttpbin.org%2Fheaders"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("Wsa-My-header", "test")
req.Header.Add("Wsa-User-Agent", "potato")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := ioutil.ReadAll(res.Body)
fmt.Println(res)
fmt.Println(string(body))
}
HttpResponse<String> response = Unirest.get("https://api.webscrapingapi.com/v1?api_key=%7B%7Bapi_key%7D%7D&url=http%3A%2F%2Fhttpbin.org%2Fheaders")
.header("Wsa-My-header", "test")
.header("Wsa-User-Agent", "potato")
.asString();
var client = new RestClient("https://api.webscrapingapi.com/v1?api_key=%7B%7Bapi_key%7D%7D&url=http%3A%2F%2Fhttpbin.org%2Fheaders");
var request = new RestRequest(Method.GET);
request.AddHeader("Wsa-My-header", "test");
request.AddHeader("Wsa-User-Agent", "potato");
IRestResponse response = client.Execute(request);
require 'uri'
require 'net/http'
require 'openssl'
url = URI("https://api.webscrapingapi.com/v1?api_key=%7B%7Bapi_key%7D%7D&url=http%3A%2F%2Fhttpbin.org%2Fheaders")
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)
request["Wsa-My-header"] = 'test'
request["Wsa-User-Agent"] = 'potato'
response = http.request(request)
puts response.read_body
Response Example

Keeping the Original Headers

By default, when you add custom headers to your request, WebScrapingAPI will pass the original headers alongside the ones you specified. If you do not wish to pass the original headers to your request, you will have to disable this feature by passing the keep_headers=0 parameter.
We've kept the example above and just added the keep_headers=0 parameter to the request and here is how the response differs from the original one:
keep_headers=0
Second Tab
{
"headers": {
"Accept-Encoding": "gzip, deflate, br",
"Host": "httpbin.org",
"My-Header": "test",
"User-Agent": "potato",
"X-Amzn-Trace-Id": "Root=1-6320123d-7d995c9d1c8f6cd66937f114"
}
}
{
"headers": {
"Accept": "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8",
"Accept-Encoding": "gzip, deflate, br",
"Host": "httpbin.org",
"My-Header": "test",
"Upgrade-Insecure-Requests": "1",
"User-Agent": "potato",
"X-Amzn-Trace-Id": "Root=1-63201227-389a26f76a53f31b6ed255c4"
}
}
Copy link
Outline
Custom Headers Integration Examples
Keeping the Original Headers