Forming Requests
Read detailed guides on how to get started and make requests using Web Scraper API for different websites.
Search Engines
Getting started
Select the search engine you want to scrape: Google, Bing, Other Search Engines.
Request sample
curl 'https://realtime.oxylabs.io/v1/queries' \
--user 'USERNAME:PASSWORD' \
-H 'Content-Type: application/json' \
-d '{
"source": "google_search",
"query": "adidas"
}'
import requests
from pprint import pprint
# Structure payload.
payload = {
'source': 'google_search',
'query': 'adidas',
}
# Get response.
response = requests.request(
'POST',
'https://realtime.oxylabs.io/v1/queries',
auth=('USERNAME', 'PASSWORD'),
json=payload,
)
# Print prettified response to stdout.
pprint(response.json())
const https = require("https");
const username = "USERNAME";
const password = "PASSWORD";
const body = {
source: "google_search",
query: "adidas",
};
const options = {
hostname: "realtime.oxylabs.io",
path: "/v1/queries",
method: "POST",
headers: {
"Content-Type": "application/json",
Authorization:
"Basic " + Buffer.from(`${username}:${password}`).toString("base64"),
},
};
const request = https.request(options, (response) => {
let data = "";
response.on("data", (chunk) => {
data += chunk;
});
response.on("end", () => {
const responseData = JSON.parse(data);
console.log(JSON.stringify(responseData, null, 2));
});
});
request.on("error", (error) => {
console.error("Error:", error);
});
request.write(JSON.stringify(body));
request.end();
<?php
$params = array(
'source' => 'google_search',
'query' => 'adidas',
);
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, "https://realtime.oxylabs.io/v1/queries");
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($params));
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_USERPWD, "USERNAME" . ":" . "PASSWORD");
$headers = array();
$headers[] = "Content-Type: application/json";
curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
$result = curl_exec($ch);
echo $result;
if (curl_errno($ch)) {
echo 'Error:' . curl_error($ch);
}
curl_close($ch);
using System;
using System.Net.Http;
using System.Net.Http.Json;
using System.Threading.Tasks;
namespace OxyApi
{
class Program
{
static async Task Main()
{
const string Username = "USERNAME";
const string Password = "PASSWORD";
var parameters = new {
source = "google_search",
query = "adidas",
};
var client = new HttpClient();
Uri baseUri = new Uri("https://realtime.oxylabs.io");
client.BaseAddress = baseUri;
var requestMessage = new HttpRequestMessage(HttpMethod.Post, "/v1/queries");
requestMessage.Content = JsonContent.Create(parameters);
var authenticationString = $"{Username}:{Password}";
var base64EncodedAuthenticationString = Convert.ToBase64String(System.Text.Encoding.ASCII.GetBytes(authenticationString));
requestMessage.Headers.Add("Authorization", "Basic " + base64EncodedAuthenticationString);
var response = await client.SendAsync(requestMessage);
var contents = await response.Content.ReadAsStringAsync();
Console.WriteLine(contents);
}
}
}
package main
import (
"bytes"
"encoding/json"
"fmt"
"io/ioutil"
"net/http"
)
func main() {
const Username = "USERNAME"
const Password = "PASSWORD"
payload := map[string]interface{}{
"source": "google_search",
"query": "adidas",
}
jsonValue, _ := json.Marshal(payload)
client := &http.Client{}
request, _ := http.NewRequest("POST",
"https://realtime.oxylabs.io/v1/queries",
bytes.NewBuffer(jsonValue),
)
request.SetBasicAuth(Username, Password)
request.Header.Set("Content-Type", "application/json")
response, _ := client.Do(request)
responseText, _ := ioutil.ReadAll(response.Body)
fmt.Println(string(responseText))
}
https://realtime.oxylabs.io/v1/queries?source=google_search&query=adidas&access_token=12345abcde
package org.example;
import okhttp3.*;
import org.json.JSONObject;
import java.util.concurrent.TimeUnit;
public class Main implements Runnable {
private static final String AUTHORIZATION_HEADER = "Authorization";
public static final String USERNAME = "USERNAME";
public static final String PASSWORD = "PASSWORD";
public void run() {
JSONObject jsonObject = new JSONObject();
jsonObject.put("source", "google_search");
jsonObject.put("query", "adidas");
Authenticator authenticator = (route, response) -> {
String credential = Credentials.basic(USERNAME, PASSWORD);
return response
.request()
.newBuilder()
.header(AUTHORIZATION_HEADER, credential)
.build();
};
var client = new OkHttpClient.Builder()
.authenticator(authenticator)
.readTimeout(180, TimeUnit.SECONDS)
.build();
var mediaType = MediaType.parse("application/json; charset=utf-8");
var body = RequestBody.create(jsonObject.toString(), mediaType);
var request = new Request.Builder()
.url("https://realtime.oxylabs.io/v1/queries")
.post(body)
.build();
try (var response = client.newCall(request).execute()) {
if (response.body() != null) {
try (var responseBody = response.body()) {
System.out.println(responseBody.string());
}
}
} catch (Exception exception) {
System.out.println("Error: " + exception.getMessage());
}
System.exit(0);
}
public static void main(String[] args) {
new Thread(new Main()).start();
}
}
{
"source": "google_search",
"query": "adidas"
}
We use synchronous Realtime integration method in our examples. If you would like to use Proxy Endpoint or asynchronous Push-Pull integration, refer to the integration methods section.
Forming a request
Pick your integration method: synchronous (Realtime, Proxy Endpoint) or asynchronous (Push-Pull).
When forming a request, include the following elements:
Endpoint:
POST https://realtime.oxylabs.io/v1/queries
Username and password (HTTP authentication). Create API user credentials either during your trial sign-up or product purchase.
USERNAME:PASSWORD
If you need more than one API user for your account, please contact our customer support or message our 24/7 live chat support.
Content-type. When submitting jobs, always add this header:
Content-Type: application/json
Payload:
source
- This parameter sets the scraper that will be used to process your request.URL
orquery
- Provide theURL
orquery
for the type of page you want to scrape. Refer to the table below and the corresponding target sub-pages for detailed guidance on when to use each parameter.Additional parameters: Optionally, you can include additional parameters such as
geo_location
,user_agent_type
,parse
,render
and more to customize your scraping request.
{
"source": "google_search",
"query": "adidas",
"geo_location": "California,United States",
"parse": true
}
Endpoint:
GET realtime.oxylabs.io:60000
Ignore certificates. In
cURL
, it's-k
or--insecure
.Username and password (HTTP authentication). Create API user credentials either during your trial sign-up or product purchase.
USERNAME:PASSWORD
If you need more than one API user for your account, please contact our customer support or message our 24/7 live chat support.
Payload:
URL
- Provide theURL
for the page you want to scrape.Additional parameters: Optionally, you can include additional parameters such as
geo_location
,user_agent_type
,parse
, and send them as headers.
curl -k -x realtime.oxylabs.io:60000 \
-U "USERNAME:PASSWORD" \
'https://www.google.com/search?q=adidas' \
-H "x-oxylabs-geo-location: California,United States" \
-H "x-oxylabs-parse: 1"
Endpoint:
POST https://data.oxylabs.io/v1/queries
Username and password (HTTP authentication). Create API user credentials either during your trial sign-up or product purchase.
USERNAME:PASSWORD
If you need more than one API user for your account, please contact our customer support or message our 24/7 live chat support.
Content-type. When submitting jobs, always add this header:
Content-Type: application/json
Payload:
source
- This parameter sets the scraper that will be used to process your request.URL
orquery
- Provide theURL
orquery
for the type of page you want to scrape. Refer to the table below and the corresponding target sub-pages for detailed guidance on when to use each parameter.Additional parameters: Optionally, you can include additional parameters such as
geo_location
,user_agent_type
,parse
, and more to customize your scraping request.
{
"source": "google_search",
"query": "adidas",
"geo_location": "California,United States",
"parse": true
}
Upon submitting a request, you will promptly receive a JSON response containing all job details, including job parameters, job ID, and URLs for downloading job results:
GET https://data.oxylabs.io/v1/queries/{job_id}/results
GET https://data.oxylabs.io/v1/queries/{job_id}/results?type=raw
GET https://data.oxylabs.io/v1/queries/{job_id}/results?type=parsed
GET https://data.oxylabs.io/v1/queries/{job_id}/results?type=png
Marketplaces
Getting started
Select the online marketplace you want to scrape: Amazon, Google Shopping, Walmart, Best Buy, Etsy, Target, Other Websites.
Request sample
curl 'https://realtime.oxylabs.io/v1/queries' \
--user "USERNAME:PASSWORD" \
-H "Content-Type: application/json" \
-d '{
"source": "amazon_product",
"query": "B07FZ8S74R",
"geo_location": "90210",
"parse": true
}'
import requests
from pprint import pprint
# Structure payload.
payload = {
'source': 'amazon_product',
'query': 'B07FZ8S74R',
'geo_location': '90210',
'parse': True
}
# Get response.
response = requests.request(
'POST',
'https://realtime.oxylabs.io/v1/queries',
auth=('USERNAME', 'PASSWORD'),
json=payload,
)
# Print prettified response to stdout.
pprint(response.json())
const https = require("https");
const username = "USERNAME";
const password = "PASSWORD";
const body = {
source: "amazon_product",
query: "B07FZ8S74R",
geo_location: "90210",
parse: true,
};
const options = {
hostname: "realtime.oxylabs.io",
path: "/v1/queries",
method: "POST",
headers: {
"Content-Type": "application/json",
Authorization:
"Basic " + Buffer.from(`${username}:${password}`).toString("base64"),
},
};
const request = https.request(options, (response) => {
let data = "";
response.on("data", (chunk) => {
data += chunk;
});
response.on("end", () => {
const responseData = JSON.parse(data);
console.log(JSON.stringify(responseData, null, 2));
});
});
request.on("error", (error) => {
console.error("Error:", error);
});
request.write(JSON.stringify(body));
request.end();
<?php
$params = array(
'source' => 'amazon_product',
'query' => 'B07FZ8S74R',
'geo_location' => '90210',
'parse' => true,
);
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, "https://realtime.oxylabs.io/v1/queries");
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($params));
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_USERPWD, "USERNAME" . ":" . "PASSWORD");
$headers = array();
$headers[] = "Content-Type: application/json";
curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
$result = curl_exec($ch);
echo $result;
if (curl_errno($ch)) {
echo 'Error:' . curl_error($ch);
}
curl_close($ch);
?>
using System;
using System.Net.Http;
using System.Net.Http.Json;
using System.Threading.Tasks;
namespace OxyApi
{
class Program
{
static async Task Main()
{
const string Username = "USERNAME";
const string Password = "PASSWORD";
var parameters = new {
source = "amazon_product",
query = "B07FZ8S74R",
geo_location = "90210",
parse = true
};
var client = new HttpClient();
Uri baseUri = new Uri("https://realtime.oxylabs.io");
client.BaseAddress = baseUri;
var requestMessage = new HttpRequestMessage(HttpMethod.Post, "/v1/queries");
requestMessage.Content = JsonContent.Create(parameters);
var authenticationString = $"{Username}:{Password}";
var base64EncodedAuthenticationString = Convert.ToBase64String(System.Text.Encoding.ASCII.GetBytes(authenticationString));
requestMessage.Headers.Add("Authorization", "Basic " + base64EncodedAuthenticationString);
var response = await client.SendAsync(requestMessage);
var contents = await response.Content.ReadAsStringAsync();
Console.WriteLine(contents);
}
}
}
package main
import (
"bytes"
"encoding/json"
"fmt"
"io/ioutil"
"net/http"
)
func main() {
const Username = "USERNAME"
const Password = "PASSWORD"
payload := map[string]interface{}{
"source": "amazon_product",
"query": "B07FZ8S74R",
"geo_location": "90210",
"parse": true,
}
jsonValue, _ := json.Marshal(payload)
client := &http.Client{}
request, _ := http.NewRequest("POST",
"https://realtime.oxylabs.io/v1/queries",
bytes.NewBuffer(jsonValue),
)
request.SetBasicAuth(Username, Password)
request.Header.Set("Content-Type", "application/json")
response, _ := client.Do(request)
responseText, _ := ioutil.ReadAll(response.Body)
fmt.Println(string(responseText))
}
https://realtime.oxylabs.io/v1/queries?source=amazon_product&query=B07FZ8S74R&geo_location=90210&parse=true&access_token=12345abcde
package org.example;
import okhttp3.*;
import org.json.JSONObject;
import java.util.concurrent.TimeUnit;
public class Main implements Runnable {
private static final String AUTHORIZATION_HEADER = "Authorization";
public static final String USERNAME = "USERNAME";
public static final String PASSWORD = "PASSWORD";
public void run() {
JSONObject jsonObject = new JSONObject();
jsonObject.put("source", "amazon_product");
jsonObject.put("query", "B07FZ8S74R");
jsonObject.put("geo_location", "90210");
jsonObject.put("parse", true);
Authenticator authenticator = (route, response) -> {
String credential = Credentials.basic(USERNAME, PASSWORD);
return response
.request()
.newBuilder()
.header(AUTHORIZATION_HEADER, credential)
.build();
};
var client = new OkHttpClient.Builder()
.authenticator(authenticator)
.readTimeout(180, TimeUnit.SECONDS)
.build();
var mediaType = MediaType.parse("application/json; charset=utf-8");
var body = RequestBody.create(jsonObject.toString(), mediaType);
var request = new Request.Builder()
.url("https://realtime.oxylabs.io/v1/queries")
.post(body)
.build();
try (var response = client.newCall(request).execute()) {
if (response.body() != null) {
try (var responseBody = response.body()) {
System.out.println(responseBody.string());
}
}
} catch (Exception exception) {
System.out.println("Error: " + exception.getMessage());
}
System.exit(0);
}
public static void main(String[] args) {
new Thread(new Main()).start();
}
}
{
"source": "amazon_product",
"query": "B07FZ8S74R",
"geo_location": "90210",
"parse": true
}
We use synchronous Realtime integration method in our examples. If you would like to use Proxy Endpoint or asynchronous Push-Pull integration, refer to the integration methods section.
Forming a request
Pick your integration method: synchronous (Realtime, Proxy Endpoint) or asynchronous (Push-Pull).
When forming a request, include the following elements:
Endpoint:
POST https://realtime.oxylabs.io/v1/queries
Username and password (HTTP authentication). Create API user credentials either during your trial sign-up or product purchase.
USERNAME:PASSWORD
If you need more than one API user for your account, please contact our customer support or message our 24/7 live chat support.
Content-type. When submitting jobs, always add this header:
Content-Type: application/json
Payload:
source
- This parameter sets the scraper that will be used to process your request.URL
orquery
- Provide theURL
orquery
for the type of page you want to scrape. Refer to the table below and the corresponding target sub-pages for detailed guidance on when to use each parameter.Additional parameters: Optionally, you can include additional parameters such as
geo_location
,user_agent_type
,parse
,render
and more to customize your scraping request.
{
"source": "amazon_product",
"query": "B07FZ8S74R",
"geo_location": "90210",
"parse": true
}
Endpoint:
GET realtime.oxylabs.io:60000
Ignore certificates. In
cURL
, it's-k
or--insecure
.Username and password (HTTP authentication). Create API user credentials either during your trial sign-up or product purchase.
USERNAME:PASSWORD
If you need more than one API user for your account, please contact our customer support or message our 24/7 live chat support.
Payload:
URL
- Provide theURL
for the page you want to scrape.Additional parameters: Optionally, you can include additional parameters such as
geo_location
,user_agent_type
,parse
, and send them as headers.
curl -k -x realtime.oxylabs.io:60000 \
-U "USERNAME:PASSWORD" \
'https://www.amazon.com/dp/b07fz8s74r' \
-H "x-oxylabs-geo-location: 90210" \
-H "x-oxylabs-parse: 1"
Endpoint:
POST https://data.oxylabs.io/v1/queries
Username and password (HTTP authentication). Create API user credentials either during your trial sign-up or product purchase.
USERNAME:PASSWORD
If you need more than one API user for your account, please contact our customer support or message our 24/7 live chat support.
Content-type. When submitting jobs, always add this header:
Content-Type: application/json
Payload:
source
- This parameter sets the scraper that will be used to process your request.URL
orquery
- Provide theURL
orquery
for the type of page you want to scrape. Refer to the table below and the corresponding target sub-pages for detailed guidance on when to use each parameter.Additional parameters: Optionally, you can include additional parameters such as
geo_location
,user_agent_type
,parse
, and more to customize your scraping request.
{
"source": "amazon_product",
"query": "B07FZ8S74R",
"geo_location": "90210",
"parse": true
}
Upon submitting a request, you will promptly receive a JSON response containing all job details, including job parameters, job ID, and URLs for downloading job results:
GET https://data.oxylabs.io/v1/queries/{job_id}/results
GET https://data.oxylabs.io/v1/queries/{job_id}/results?type=raw
GET https://data.oxylabs.io/v1/queries/{job_id}/results?type=parsed
GET https://data.oxylabs.io/v1/queries/{job_id}/results?type=pn
Other websites
Getting started
Scrape any URL with our universal
source. You can also add additional parameters.
Request sample
curl 'https://realtime.oxylabs.io/v1/queries' \
--user 'USERNAME:PASSWORD' \
-H 'Content-Type: application/json' \
-d '{
"source": "universal",
"url": "https://sandbox.oxylabs.io/"
}'
import requests
from pprint import pprint
# Structure payload.
payload = {
'source': 'universal',
'url': 'https://sandbox.oxylabs.io/',
# 'render': 'html', # If page type requires
}
# Get response.
response = requests.request(
'POST',
'https://realtime.oxylabs.io/v1/queries',
auth=('USERNAME', 'PASSWORD'), # Your credentials go here
json=payload,
)
# Instead of response with job status and results url, this will return the
# JSON response with results.
pprint(response.json())
const https = require("https");
const username = "USERNAME";
const password = "PASSWORD";
const body = {
source: "universal",
url: "https://sandbox.oxylabs.io/",
// 'render': 'html' // If page type requires
};
const options = {
hostname: "realtime.oxylabs.io",
path: "/v1/queries",
method: "POST",
headers: {
"Content-Type": "application/json",
Authorization: "Basic " + Buffer.from(`${username}:${password}`).toString("base64"),
},
};
const request = https.request(options, (response) => {
let data = "";
response.on("data", (chunk) => {
data += chunk;
});
response.on("end", () => {
const responseData = JSON.parse(data);
console.log(JSON.stringify(responseData, null, 2));
});
});
request.on("error", (error) => {
console.error("Error:", error);
});
request.write(JSON.stringify(body));
request.end();
# The whole string you submit has to be URL-encoded.