<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	
	xmlns:georss="http://www.georss.org/georss"
	xmlns:geo="http://www.w3.org/2003/01/geo/wgs84_pos#"
	>

<channel>
	<title>Manuals &#8211; ProxySP</title>
	<atom:link href="https://proxysp.com/manuals/feed/" rel="self" type="application/rss+xml" />
	<link>https://proxysp.com</link>
	<description>The Best Proxy Service Provider Reviewed for 2025</description>
	<lastBuildDate>Thu, 10 Oct 2024 03:55:46 +0000</lastBuildDate>
	<language>en-US</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=6.4.8</generator>

<image>
	<url>https://proxysp.com/wp-content/uploads/2021/01/icon-90x90.jpeg</url>
	<title>Manuals &#8211; ProxySP</title>
	<link>https://proxysp.com</link>
	<width>32</width>
	<height>32</height>
</image> 
<site xmlns="com-wordpress:feed-additions:1">149675634</site>	<item>
		<title>How to Use Proxy-IPV4 API</title>
		<link>https://proxysp.com/how-to-use-proxy-ipv4-api/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=how-to-use-proxy-ipv4-api</link>
					<comments>https://proxysp.com/how-to-use-proxy-ipv4-api/#respond</comments>
		
		<dc:creator><![CDATA[proxysp]]></dc:creator>
		<pubDate>Fri, 16 Jun 2023 09:14:05 +0000</pubDate>
				<category><![CDATA[APIs]]></category>
		<guid isPermaLink="false">https://www.proxysp.com/?p=11249</guid>

					<description><![CDATA[Proxy-IPV4 API will allow you to integrate the purchase and renewal of a proxy into your service or application. The interaction of the partner with the &#8230;<p class="read-more"> <a class="ast-button" href="https://proxysp.com/how-to-use-proxy-ipv4-api/"> <span class="screen-reader-text">How to Use Proxy-IPV4 API</span> Read More &#187;</a></p>]]></description>
										<content:encoded><![CDATA[<p class="documentation-descriptions documentation-mb"><a href="https://proxy-zone.net/pz/proxy-ipv4" target="_blank" rel="nofollow noopener">Proxy-IPV4 API</a> will allow you to integrate the purchase and renewal of a proxy into your service or application. The interaction of the partner with the system, as well as the system with the partner, occurs through “application / json” requests and responses. All communication takes place in UTF-8 encoding. The system implements protection against DOS attacks; no more than one request per second is allowed. If more than one request per second is sent, the response will be <span class="documentation-red">error_id=2</span>, in which case we recommend sending the request again.</p>
<h2>General requests</h2>
<h3></h3>
<h3>To get the balance information</h3>
<p class="descriptions"><img decoding="async" src="https://proxy-ipv4.com/img/ui/infoApi.svg" alt="icon" width="16" height="16" />The request allows to see the current balance</p>
<div class="api-item-request">
<div class="type">GET</div>
<p>/client-api/v1/<span class="key">&lt;apiKey&gt;</span>/get/balance</p>
</div>
<p><span class="sub-title">Example body answer:</span></p>
<pre>{
"success":true,
"user":"client@gmail.com",
"balance":13.09,
"currency":"USD"
}
</pre>
<div class="api-item-contain mb-48">
<p><span class="sub-title">Response params:</span></p>
<ul class="api-item-list mb-24">
<li class="list-item"><span class="list-item-params params">&#8220;success&#8221;</span><span class="descriptions"> &#8211; operation status</span> &#8211;<span class="data">&#8220;true/false&#8221;</span>,</li>
<li class="list-item"><span class="list-item-params params">&#8220;balance&#8221;</span><span class="descriptions"> &#8211; the current balance</span>.</li>
</ul>
</div>
<div class="api-item-contain mb-48">
<hr />
<h3><strong><span class="title">To get the full list of the bought proxies</span></strong></h3>
<div class="line"><span style="font-size: 16px;">GET</span></div>
<div class="api-item-request">
<p>/client-api/v1/<span class="key">&lt;apiKey&gt;</span>/get/proxies</p>
</div>
<p><span class="sub-title">Example body answer:</span></p>
<pre>{
"success":true,
"user":"client@gmail.com",
"balance":13.09,
"currency":"USD",
"countOfProxy":6,
"ipv4":
[
{
"id":"id1",
"ip":"185.81.112.215",
"country":"GBR",
"dateStart":"2022-08-29T14:55:38.293+00:00",
"dateEnd":"2022-08-30T23:59:38.293+00:00",
"httpsPort":"49162",
"socks5Port":"49163",
"authInfo":
{
"login":"authLogin123",
"password":"authPassword"
}
},
{
"id":"id2",
"ip":"107.181.142.223",
"country":"GBR",
"dateStart":"2022-08-29T14:55:38.293+00:00",
"dateEnd":"2022-08-30T23:59:38.293+00:00",
"httpsPort":"49162",
"socks5Port":"49163",
"authInfo":
{
"login":"authLogin123",
"password":"authPassword"
}
}
],
"ipv6":
[
{
"orderId":"orderId1",
"ips":
[
{
"id":"id3",
"ip":"140.82.53.23:10002",
"country":"FRA",
"dateStart":"2022-08-03T14:04:59.131+00:00",
"dateEnd":"2022-10-02T14:04:59.159+00:00",
"protocol":"SOCKS5",
"authInfo":
{
"login":"authLogin123",
"password":"authPassword"
}
},
{
"id":"id4",
"ip":"140.82.53.23:10004",
"country":"FRA",
"dateStart":"2022-08-03T14:04:59.131+00:00",
"dateEnd":"2022-10-02T14:04:59.159+00:00",
"protocol":"SOCKS5",
"authInfo":
{
"login":"authLogin123",
"password":"authPassword"
}
}
]
}
],
"mobile":
[
{
"id":"id5",
"ip":"61.62.63.64",
"country":"FRA",
"dateStart":"2022-08-30T14:54:25.414+00:00",
"dateEnd":"2022-09-29T23:59:25.414+00:00",
"httpsPort":"7781",
"socks5Port":"8891",
"mobileOperator":"freemobilesas_france",
"rotationTime":0,
"rebootLink":"https://proxy-ipv4.com/modem/reboot/448eac96-8546-4389-8f56-54b2sb4798d12",
"authInfo":
{
"login":"authLogin123",
"password":"authPassword"
}
},
{
"id":"id6",
"ip":"61.62.63.64",
"country":"FRA",
"dateStart":"2022-08-30T14:54:25.414+00:00",
"dateEnd":"2022-09-29T23:59:25.414+00:00",
"httpsPort":"7782",
"socks5Port":"8892",
"mobileOperator":"freemobilesas_france",
"rotationTime":0,
"rebootLink":"https://proxy-ipv4.com/modem/reboot/44cf7d39-b682-4296-8909-7038ba99008b5",
"authInfo":
{
"login":"authLogin123",
"password":"authPassword"
}
}
]
}
</pre>
</div>
<div>
<div class="api-item-contain mb-48">
<p><span class="sub-title">Response params:</span></p>
<ul class="api-item-list mb-24">
<li class="list-item"><span class="list-item-params params">&#8220;ipv4&#8221;</span><span class="descriptions"> &#8211; the list of active ipv4 proxies</span>,</li>
<li class="list-item"><span class="list-item-params params">&#8220;ipv6&#8221;</span><span class="descriptions"> &#8211; the list of active ipv6 proxies</span>,</li>
<li class="list-item"><span class="list-item-params params">&#8220;mobile&#8221;</span><span class="descriptions"> &#8211; the list of active mobile proxies</span>,</li>
<li class="list-item"><span class="list-item-params params">&#8220;id&#8221;</span><span class="descriptions"> &#8211; proxy ID. This parameter is needed for extending proxy</span>,</li>
<li class="list-item"><span class="list-item-params params">&#8220;orderId&#8221;</span><span class="descriptions"> &#8211; order ID. Ipv6, unlike the rest of the proxy types, allows to extend all the proxies in the order only</span>,</li>
<li class="list-item"><span class="list-item-params params">&#8220;country&#8221;</span><span class="descriptions"> &#8211; alfa3 country code</span>,</li>
<li class="list-item"><span class="list-item-params params">&#8220;dateStart&#8221;</span><span class="descriptions"> &#8211; the rent start date</span>,</li>
<li class="list-item"><span class="list-item-params params">&#8220;dateEnd&#8221;</span><span class="descriptions"> &#8211; the rent end date</span>,</li>
<li class="list-item"><span class="list-item-params params">&#8220;authInfo&#8221;</span><span class="descriptions"> &#8211; the data for authorization</span>,</li>
<li class="list-item"><span class="list-item-params params">&#8220;protocol&#8221;</span><span class="descriptions"> &#8211; protocol</span> &#8211;<span class="data">&#8220;HTTPS/SOCKS5&#8221;</span>,</li>
<li class="list-item"><span class="list-item-params params">&#8220;rotationTime&#8221;</span><span class="descriptions"> &#8211; rotation time of IP address in minutes. 0 is rotation by link at any moment</span>,</li>
<li class="list-item"><span class="list-item-params params">&#8220;rebootLink&#8221;</span><span class="descriptions"> &#8211; link for IP reboot</span>,</li>
<li class="list-item"><span class="list-item-params params">&#8220;mobileOperator&#8221;</span><span class="descriptions"> &#8211; mobile operator</span>.</li>
</ul>
</div>
<hr />
<h3 class="api-item-contain mb-48"><strong><span class="title">To get the available number of days for a proxy purchase/renewal</span></strong></h3>
</div>
<div></div>
<div>
<p class="descriptions"><img decoding="async" src="https://proxy-ipv4.com/img/ui/infoApi.svg" alt="icon" width="16" height="16" />An available number of days can differ depending on the proxy type</p>
<div class="api-item-request">
<div class="type">GET</div>
<p>/client-api/v1/<span class="key">&lt;apiKey&gt;</span>/get/days</p>
</div>
<p><span class="sub-title">Reqwest parameters:</span></p>
<ul class="api-item-list mb-24">
<li class="list-item"><span class="list-item-params params">&#8220;proxyType&#8221;</span><span class="descriptions"> &#8211; type of proxy. Value can be of three types</span> &#8211;<span class="data">&#8220;ipv4/ipv6/mobile&#8221;</span>.</li>
</ul>
<p><span class="sub-title">Example reqwest:</span></p>
<div class="api-item-request">/client-api/v1/<span class="key">&lt;apiKey&gt;</span>/get/days?proxyType=ipv4</div>
<p><span class="sub-title">Example body answer:</span></p>
</div>
<pre>{
"success":true,
"user":"client@gmail.com",
"balance":13.09,
"currency":"USD",
"days":
[
1,
7,
14,
30,
60,
90
]
}
</pre>
<div>
<hr />
<h3><span class="title">To get the list of the countries available for purchase</span></h3>
<p class="descriptions"><img decoding="async" src="https://proxy-ipv4.com/img/ui/infoApi.svg" alt="icon" width="16" height="16" />The list of available countries can differ depending on the proxy type</p>
<div class="api-item-request">
<div class="type">GET</div>
<p>/client-api/v1/<span class="key">&lt;apiKey&gt;</span>/get/countries</p>
</div>
<p><span class="sub-title">Reqwest parameters:</span></p>
<ul class="api-item-list mb-24">
<li class="list-item"><span class="list-item-params params">&#8220;proxyType&#8221;</span><span class="descriptions"> &#8211; type of proxy. Value can be of three types</span> &#8211;<span class="data">&#8220;ipv4/ipv6/mobile&#8221;</span>.</li>
</ul>
<p><span class="sub-title">Example reqwest:</span></p>
<div class="api-item-request">/client-api/v1/<span class="key">&lt;apiKey&gt;</span>/get/countries?proxyType=ipv4</div>
<p><span class="sub-title">Example body answer:</span></p>
<pre>{
"success":true,
"user":"client@gmail.com",
"balance":13.09,
"currency":"USD",
"countries":
[
{
"name":"ENGLAND",
"alpha3code":"GBR"
},
{
"name":"USA",
"alpha3code":"USA"
},
{
"name":"FRANCE",
"alpha3code":"FRA"
}
]
}</pre>
</div>
<div>
<div class="api-item-contain mb-48">
<p><span class="sub-title">Response params:</span></p>
<ul class="api-item-list mb-24">
<li class="list-item"><span class="list-item-params params">&#8220;name&#8221;</span><span class="descriptions"> &#8211; name of country</span>,</li>
<li class="list-item"><span class="list-item-params params">&#8220;alpha3code&#8221;</span><span class="descriptions"> &#8211; alfa3 country code. Value of this field will be used for placing an order</span>.</li>
</ul>
</div>
<hr />
<h3 class="api-item-contain "><span class="title">To get the list of the available goals for purchase</span></h3>
<div class="api-item-contain ">
<p><span style="font-size: 16px;">GET</span></p>
<div class="api-item-request">/client-api/v1/<span class="key">&lt;apiKey&gt;</span>/get/goals</div>
<p><span class="sub-title">Example body answer:</span></p>
</div>
<pre>{
"success":true,
"user":"client@gmail.com",
"balance":13.09,
"currency":"USD",
"goals":
[
"instagram",
"facebook",
"vk",
"bookmakers",
"avito",
"amazon",
"cs go",
"tiktok"
]
}
</pre>
<div>
<p><span class="sub-title">Response params:</span></p>
<ul class="api-item-list mb-24">
<li class="list-item"><span class="list-item-params params">&#8220;goals&#8221;</span><span class="descriptions"> &#8211; The list of available goals. This parameter is necessary for placing an order. If the list does not contain what you need, you can use the field &#8216;customGoal' when placing an order</span>.</li>
</ul>
<hr />
</div>
</div>
<h2>IPv4 requests</h2>
<h3><span class="title">To get the ipv4 list of the bought proxies</span></h3>
<p>GET<br />
/client-api/v1/<span class="key">&lt;apiKey&gt;</span>/get/proxies</p>
<p><span class="sub-title">Reqwest parameters:</span></p>
<ul class="api-item-list mb-24">
<li class="list-item"><span class="list-item-params params">&#8220;proxyType&#8221;</span><span class="descriptions"> &#8211; type of proxy</span> &#8211;<span class="data">&#8220;ipv4&#8221;</span>.</li>
</ul>
<p><span class="sub-title">Example reqwest:</span></p>
<div class="api-item-request">/client-api/v1/<span class="key">&lt;apiKey&gt;</span>/get/proxies?proxyType=ipv4</div>
<p><span class="sub-title">Example body answer:</span></p>
<pre>{
"success":true,
"user":"client@gmail.com",
"balance":13.09,
"currency":"USD",
"proxyType":"ipv4",
"countOfProxy":2,
"proxies":
[
{
"id":"id1",
"ip":"185.81.112.215",
"country":"GBR",
"dateStart":"2022-08-29T14:55:38.293+00:00",
"dateEnd":"2022-08-30T23:59:38.293+00:00",
"httpsPort":"49162",
"socks5Port":"49163",
"authInfo":
{
"login":"authLogin123",
"password":"authPassword"
}
},
{
"id":"id2",
"ip":"107.181.142.223",
"country":"GBR",
"dateStart":"2022-08-29T14:55:38.293+00:00",
"dateEnd":"2022-08-30T23:59:38.293+00:00",
"httpsPort":"49162",
"socks5Port":"49163",
"authInfo":
{
"login":"authLogin123",
"password":"authPassword"
}
}
]
}
</pre>
<div class="api-item-contain mb-48">
<p><span class="sub-title">Response params:</span></p>
<ul class="api-item-list mb-24">
<li class="list-item"><span class="list-item-params params">&#8220;proxies&#8221;</span><span class="descriptions"> &#8211; the list of active ipv4 proxies</span>,</li>
<li class="list-item"><span class="list-item-params params">&#8220;id&#8221;</span><span class="descriptions"> &#8211; proxy ID. This parameter is needed for extending proxy</span>,</li>
<li class="list-item"><span class="list-item-params params">&#8220;country&#8221;</span><span class="descriptions"> &#8211; alfa3 country code</span>,</li>
<li class="list-item"><span class="list-item-params params">&#8220;dateStart&#8221;</span><span class="descriptions"> &#8211; the rent start date</span>,</li>
<li class="list-item"><span class="list-item-params params">&#8220;dateEnd&#8221;</span><span class="descriptions"> &#8211; the rent end date</span>,</li>
<li class="list-item"><span class="list-item-params params">&#8220;authInfo&#8221;</span><span class="descriptions"> &#8211; the data for authorization</span>.</li>
</ul>
</div>
<hr />
<h3 class="api-item-contain mb-48"><span class="title">Calculate purchase price</span></h3>
<div></div>
<div class="api-item-contain mb-48">
<p><span style="font-size: 16px;">GET</span></p>
<div class="api-item-request">/client-api/v1/<span class="key">&lt;apiKey&gt;</span>/get/order/price</div>
<p><span class="sub-title">Reqwest parameters:</span></p>
<ul class="api-item-list mb-24">
<li class="list-item"><span class="list-item-params params">&#8220;proxyType&#8221;</span><span class="descriptions"> &#8211; type of proxy</span> &#8211;<span class="data">&#8220;ipv4&#8221;</span>,</li>
<li class="list-item"><span class="list-item-params params">&#8220;days&#8221;</span><span class="descriptions"> &#8211; the number of rental days (available values can be got by other request)</span>,</li>
<li class="list-item"><span class="list-item-params params">&#8220;goal&#8221;</span><span class="descriptions"> &#8211; goal of using proxy (available values can be got by other request)</span>,</li>
<li class="list-item"><span class="list-item-params params">&#8220;customGoal&#8221;</span><span class="descriptions"> &#8211; if the goal you need is not present in the goal list, you can indicate your own goal. Length of field must be 5 characters or more (one of the parameters &#8211; goal or customGoal &#8211; must be in the request)</span>,</li>
<li class="list-item"><span class="list-item-params params">&#8220;country&#8221;</span><span class="descriptions"> &#8211; alfa3 country code (available values can be got by other request)</span>,</li>
<li class="list-item"><span class="list-item-params params">&#8220;count&#8221;</span><span class="descriptions"> &#8211; the number of proxies</span>.</li>
</ul>
<p><span class="sub-title">Example reqwest:</span></p>
<div class="api-item-request">/client-api/v1/<span class="key">&lt;apiKey&gt;</span>/get/order/price?proxyType=ipv4&days=7&goal=instagram&country=FRA&count=2</div>
<p><span class="sub-title">Example body answer:</span></p>
</div>
<pre>{
"success":true,
"user":"client@gmail.com",
"balance":13.09,
"currency":"USD",
"proxyType":"ipv4",
"days":7,
"count":2,
"goal":"instagram",
"amount":2.78,
"price":1.39
}
</pre>
<div>
<div class="api-item-contain mb-48">
<p><span class="sub-title">Response params:</span></p>
<ul class="api-item-list mb-24">
<li class="list-item"><span class="list-item-params params">&#8220;amount&#8221;</span><span class="descriptions"> &#8211; total amount</span>,</li>
<li class="list-item"><span class="list-item-params params">&#8220;price&#8221;</span><span class="descriptions"> &#8211; price for one proxy</span>.</li>
</ul>
</div>
<hr />
<h3 class="api-item-contain mb-48"><span class="title">Calculate extending price</span></h3>
<div class="api-item-contain mb-48">
<p><span style="font-size: 16px;">GET</span></p>
<div class="api-item-request">/client-api/v1/<span class="key">&lt;apiKey&gt;</span>/get/extend/price</div>
<p><span class="sub-title">Reqwest parameters:</span></p>
<ul class="api-item-list mb-24">
<li class="list-item"><span class="list-item-params params">&#8220;proxyType&#8221;</span><span class="descriptions"> &#8211; type of proxy</span> &#8211;<span class="data">&#8220;ipv4&#8221;</span>,</li>
<li class="list-item"><span class="list-item-params params">&#8220;days&#8221;</span><span class="descriptions"> &#8211; the number of renewal days (the available values are the same as for the purchase)</span>,</li>
<li class="list-item"><span class="list-item-params params">&#8220;IpId&#8221;</span><span class="descriptions"> &#8211; proxy IDs that require renewal (it is allowed to indicate several IDs separated by commas)</span>.</li>
</ul>
<p><span class="sub-title">Example reqwest:</span></p>
<div class="api-item-request">/client-api/v1/<span class="key">&lt;apiKey&gt;</span>/get/extend/price?proxyType=ipv4&days=7&IpId=id1,id2,id3</div>
<p><span class="sub-title">Example body answer:</span></p>
</div>
<pre>{
"success":true,
"user":"client@gmail.com",
"balance":13.09,
"currency":"USD",
"proxyType":"ipv4",
"days":7,
"count":3,
"amount":9.13,
"price":3.04,
"ipId":
[
"id1",
"id2",
"id3"
]
}
</pre>
</div>
<div>
<div class="api-item-contain mb-48">
<p><span class="sub-title">Response params:</span></p>
<ul class="api-item-list mb-24">
<li class="list-item"><span class="list-item-params params">&#8220;amount&#8221;</span><span class="descriptions"> &#8211; total amount</span>,</li>
<li class="list-item"><span class="list-item-params params">&#8220;price&#8221;</span><span class="descriptions"> &#8211; price for extending one proxy</span>,</li>
<li class="list-item"><span class="list-item-params params">&#8220;ipId&#8221;</span><span class="descriptions"> &#8211; the list of proxy IDs for extending</span>.</li>
</ul>
</div>
<hr />
<h3 class="api-item-contain mb-48"><span class="title">Placing an order</span></h3>
<div> <span style="font-size: 16px;">POST</span></div>
<div class="api-item-contain mb-48">
<div class="api-item-request">/client-api/v1/<span class="key">&lt;apiKey&gt;</span>/order</div>
<p><span class="sub-title">Reqwest parameters:</span></p>
<ul class="api-item-list mb-24">
<li class="list-item"><span class="list-item-params params">&#8220;proxyType&#8221;</span><span class="descriptions"> &#8211; type of proxy</span> &#8211;<span class="data">&#8220;ipv4&#8221;</span>,</li>
<li class="list-item"><span class="list-item-params params">&#8220;days&#8221;</span><span class="descriptions"> &#8211; the number of rental days (available values can be got by other request)</span>,</li>
<li class="list-item"><span class="list-item-params params">&#8220;goal&#8221;</span><span class="descriptions"> &#8211; goal of using proxy (available values can be got by other request)</span>,</li>
<li class="list-item"><span class="list-item-params params">&#8220;customGoal&#8221;</span><span class="descriptions"> &#8211; if the goal you need is not present in the goal list, you can indicate your own goal. Length of field must be 5 characters or more (one of the parameters &#8211; goal or customGoal &#8211; must be in the request)</span>,</li>
<li class="list-item"><span class="list-item-params params">&#8220;country&#8221;</span><span class="descriptions"> &#8211; alfa3 country code</span>,</li>
<li class="list-item"><span class="list-item-params params">&#8220;count&#8221;</span><span class="descriptions"> &#8211; the number of proxies</span>,</li>
<li class="list-item"><span class="list-item-params params">&#8220;authType&#8221;</span><span class="descriptions"> &#8211; authorization type</span> &#8211;<span class="data">&#8220;login/ip&#8221;</span>,</li>
<li class="list-item"><span class="list-item-params params">&#8220;authIp&#8221;</span><span class="descriptions"> &#8211; authorization IP address. This field is required only if authType = ip</span>.</li>
</ul>
<p><span class="sub-title">Example reqwest:</span></p>
<div class="api-item-request">/client-api/v1/<span class="key">&lt;apiKey&gt;</span>/order</div>
<p><span class="sub-title">Example body reqwest:</span></p>
</div>
<pre>{
"proxyType":"ipv4",
"days":90,
"goal":"instagram",
"country":"GBR",
"count":2,
"authType":"login"
}
</pre>
</div>
<div>Example body answer:</div>
<pre>{
"success":true,
"user":"client@gmail.com",
"balance":4.09,
"currency":"USD",
"proxyType":"ipv4",
"orderNumber":"DV-16620211552356-jA"
}
</pre>
<div>
<div class="api-item-contain mb-48">
<p><span class="sub-title">Response params:</span></p>
<ul class="api-item-list mb-24">
<li class="list-item"><span class="list-item-params params">&#8220;orderNumber&#8221;</span><span class="descriptions"> &#8211; order number</span>,</li>
<li class="list-item"><span class="list-item-params params">&#8220;balance&#8221;</span><span class="descriptions"> &#8211; the balance after the purchase</span>.</li>
</ul>
</div>
<hr />
<h3 class="api-item-contain "><span class="title">Extending proxy</span></h3>
<div class="api-item-contain ">
<p><span style="font-size: 16px;">POST</span></p>
<div class="api-item-request">/client-api/v1/<span class="key">&lt;apiKey&gt;</span>/extend</div>
<p><span class="sub-title">Reqwest parameters:</span></p>
<ul class="api-item-list mb-24">
<li class="list-item"><span class="list-item-params params">&#8220;proxyType&#8221;</span><span class="descriptions"> &#8211; type of proxy</span> &#8211;<span class="data">&#8220;ipv4&#8221;</span>,</li>
<li class="list-item"><span class="list-item-params params">&#8220;days&#8221;</span><span class="descriptions"> &#8211; the number of renewal days (the available values are the same as for the purchase)</span>,</li>
<li class="list-item"><span class="list-item-params params">&#8220;IpId&#8221;</span><span class="descriptions"> &#8211; the list of proxy IDs to be extended</span>.</li>
</ul>
<p><span class="sub-title">Example reqwest:</span></p>
<div class="api-item-request">/client-api/v1/<span class="key">&lt;apiKey&gt;</span>/extend</div>
<p><span class="sub-title">Example body reqwest:</span></p>
</div>
<pre>{
"proxyType":"ipv4",
"days":30,
"IpId":
[
"id1",
"id2"
]
}
</pre>
<p>Example body answer:</p>
<pre>{
"success":true,
"user":"client@gmail.com",
"balance":4.09,
"currency":"USD"
}
</pre>
<div>
<p><span class="sub-title">Response params:</span></p>
<ul class="api-item-list mb-24">
<li class="list-item"><span class="list-item-params params">&#8220;balance&#8221;</span><span class="descriptions"> &#8211; the balance after extending</span>.</li>
</ul>
<hr />
</div>
</div>
<h2>IPv6 requests</h2>
<h3>To get the ipv4 list of the bought proxies</h3>
<p><span style="font-size: 16px;">GET</span></p>
<div class="api-item-request">/client-api/v1/<span class="key">&lt;apiKey&gt;</span>/get/proxies</div>
<p><span class="sub-title">Reqwest parameters:</span></p>
<ul class="api-item-list mb-24">
<li class="list-item"><span class="list-item-params params">&#8220;proxyType&#8221;</span><span class="descriptions"> &#8211; type of proxy</span> &#8211;<span class="data">&#8220;ipv6&#8221;</span>.</li>
</ul>
<p><span class="sub-title">Example reqwest:</span></p>
<div class="api-item-request">/client-api/v1/<span class="key">&lt;apiKey&gt;</span>/get/proxies?proxyType=ipv6</div>
<p><span class="sub-title">Example body answer:</span></p>
<pre>{
"success":true,
"user":"client@gmail.com",
"balance":13.09,
"currency":"USD",
"proxyType":"ipv6",
"countOfProxy":2,
"proxies":
[
{
"orderId":"orderId1",
"ips":
[
{
"id":"id1",
"ip":"140.82.53.23:10002",
"country":"FRA",
"dateStart":"2022-08-03T14:04:59.131+00:00",
"dateEnd":"2022-10-02T14:04:59.159+00:00",
"protocol":"SOCKS5",
"authInfo":
{
"login":"authLogin123",
"password":"authPassword"
}
},
{
"id":"id2",
"ip":"140.82.53.23:10004",
"country":"FRA",
"dateStart":"2022-08-03T14:04:59.131+00:00",
"dateEnd":"2022-10-02T14:04:59.159+00:00",
"protocol":"SOCKS5",
"authInfo":
{
"login":"authLogin123",
"password":"authPassword"
}
}
]
}
]
}
</pre>
<div>
<div class="api-item-contain mb-48">
<p><span class="sub-title">Response params:</span></p>
<ul class="api-item-list mb-24">
<li class="list-item"><span class="list-item-params params">&#8220;proxies&#8221;</span><span class="descriptions"> &#8211; the list of active ipv4 proxies</span>,</li>
<li class="list-item"><span class="list-item-params params">&#8220;orderId&#8221;</span><span class="descriptions"> &#8211; //too</span>,</li>
<li class="list-item"><span class="list-item-params params">&#8220;id&#8221;</span><span class="descriptions"> &#8211; proxy ID</span>,</li>
<li class="list-item"><span class="list-item-params params">&#8220;country&#8221;</span><span class="descriptions"> &#8211; alfa3 country code</span>,</li>
<li class="list-item"><span class="list-item-params params">&#8220;dateStart&#8221;</span><span class="descriptions"> &#8211; the rent start date</span>,</li>
<li class="list-item"><span class="list-item-params params">&#8220;dateEnd&#8221;</span><span class="descriptions"> &#8211; the rent end date</span>,</li>
<li class="list-item"><span class="list-item-params params">&#8220;protocol&#8221;</span><span class="descriptions"> &#8211; protocol</span> &#8211;<span class="data">&#8220;HTTPS/SOCKS5&#8221;</span>,</li>
<li class="list-item"><span class="list-item-params params">&#8220;authInfo&#8221;</span><span class="descriptions"> &#8211; the data for authorization</span>.</li>
</ul>
</div>
<hr />
<h3 class="api-item-contain mb-48"><span class="title">Calculate purchase price</span></h3>
<div class="api-item-request">
<div class="type">GET</div>
<p>/client-api/v1/<span class="key">&lt;apiKey&gt;</span>/get/order/price</p>
</div>
<p><span class="sub-title">Reqwest parameters:</span></p>
<ul class="api-item-list mb-24">
<li class="list-item"><span class="list-item-params params">&#8220;proxyType&#8221;</span><span class="descriptions"> &#8211; type of proxy</span> &#8211;<span class="data">&#8220;ipv6&#8221;</span>,</li>
<li class="list-item"><span class="list-item-params params">&#8220;days&#8221;</span><span class="descriptions"> &#8211; the number of rental days (available values can be got by other request)</span>,</li>
<li class="list-item"><span class="list-item-params params">&#8220;goal&#8221;</span><span class="descriptions"> &#8211; goal of using proxy (available values can be got by other request)</span>,</li>
<li class="list-item"><span class="list-item-params params">&#8220;customGoal&#8221;</span><span class="descriptions"> &#8211; if the goal you need is not present in the goal list, you can indicate your own goal. Length of field must be 5 characters or more (one of the parameters &#8211; goal or customGoal &#8211; must be in the request)</span>,</li>
<li class="list-item"><span class="list-item-params params">&#8220;country&#8221;</span><span class="descriptions"> &#8211; alfa3 country code (available values can be got by other request)</span>,</li>
<li class="list-item"><span class="list-item-params params">&#8220;count&#8221;</span><span class="descriptions"> &#8211; the number of proxy. The value must be more then 10</span>.</li>
</ul>
<p><span class="sub-title">Example reqwest:</span></p>
<div class="api-item-request">/client-api/v1/<span class="key">&lt;apiKey&gt;</span>/get/order/price?proxyType=ipv6&days=30&goal=instagram&country=FRA&count=10</div>
<p><span class="sub-title">Example body answer:</span></p>
<pre>{
"success":true,
"user":"client@gmail.com",
"balance":13.09,
"currency":"USD",
"proxyType":"ipv6",
"days":30,
"count":10,
"goal":"instagram",
"amount":7.25,
"price":0.72
}
</pre>
</div>
<div>
<div class="api-item-contain mb-48">
<p><span class="sub-title">Response params:</span></p>
<ul class="api-item-list mb-24">
<li class="list-item"><span class="list-item-params params">&#8220;amount&#8221;</span><span class="descriptions"> &#8211; total amount</span>,</li>
<li class="list-item"><span class="list-item-params params">&#8220;price&#8221;</span><span class="descriptions"> &#8211; price for one proxy</span>.</li>
</ul>
</div>
<hr />
<h3 class="api-item-contain mb-48"><span class="title">Calculate extending price</span></h3>
<div class="api-item-contain mb-48">
<p><span style="font-size: 16px;">GET</span></p>
<div class="api-item-request">/client-api/v1/<span class="key">&lt;apiKey&gt;</span>/get/extend/price</div>
<p><span class="sub-title">Reqwest parameters:</span></p>
<ul class="api-item-list mb-24">
<li class="list-item"><span class="list-item-params params">&#8220;proxyType&#8221;</span><span class="descriptions"> &#8211; type of proxy</span> &#8211;<span class="data">&#8220;ipv6&#8221;</span>,</li>
<li class="list-item"><span class="list-item-params params">&#8220;days&#8221;</span><span class="descriptions"> &#8211; the number of renewal days (the available values are the same as for the purchase)</span>,</li>
<li class="list-item"><span class="list-item-params params">&#8220;orderId&#8221;</span><span class="descriptions"> &#8211; order IDs that require renewal (it is allowed to indicate several IDs separated by commas)</span>.</li>
</ul>
<p><span class="sub-title">Example reqwest:</span></p>
<div class="api-item-request">/client-api/v1/<span class="key">&lt;apiKey&gt;</span>/get/extend/price?proxyType=ipv6&days=30&orderId=orderId1,orderId2</div>
<p><span class="sub-title">Example body answer:</span></p>
</div>
<pre>{
"success":true,
"user":"client@gmail.com",
"balance":13.09,
"currency":"USD",
"proxyType":"ipv6",
"days":30,
"count":20,
"amount":123.42,
"price":6.17,
"ordersId":
[
"orderId1",
"orderId2"
],
"ipId":
[
"id1",
"id2",
"id3",
"id4",
"id5",
"id6",
"id7",
"id8",
"id9",
"id10",
"id11",
"id12",
"id13",
"id14",
"id15",
"id16",
"id17",
"id18",
"id19",
"id20"
]
}
</pre>
</div>
<div>
<div class="api-item-contain mb-48">
<p><span class="sub-title">Response params:</span></p>
<ul class="api-item-list mb-24">
<li class="list-item"><span class="list-item-params params">&#8220;amount&#8221;</span><span class="descriptions"> &#8211; total amount</span>,</li>
<li class="list-item"><span class="list-item-params params">&#8220;price&#8221;</span><span class="descriptions"> &#8211; price for extending one proxy</span>,</li>
<li class="list-item"><span class="list-item-params params">&#8220;ordersId&#8221;</span><span class="descriptions"> &#8211; the list of order IDs for extending</span>,</li>
<li class="list-item"><span class="list-item-params params">&#8220;ipId&#8221;</span><span class="descriptions"> &#8211; the list of proxy IDs for extending</span>.</li>
</ul>
</div>
<hr />
<h3 class="api-item-contain mb-48"><span class="title">Placing an order</span></h3>
<div class="api-item-contain mb-48">
<p><span style="font-size: 16px;">POST</span></p>
<div class="api-item-request">/client-api/v1/<span class="key">&lt;apiKey&gt;</span>/order</div>
<p><span class="sub-title">Reqwest parameters:</span></p>
<ul class="api-item-list mb-24">
<li class="list-item"><span class="list-item-params params">&#8220;proxyType&#8221;</span><span class="descriptions"> &#8211; type of proxy</span> &#8211;<span class="data">&#8220;ipv6&#8221;</span>,</li>
<li class="list-item"><span class="list-item-params params">&#8220;days&#8221;</span><span class="descriptions"> &#8211; the number of rental days (available values can be got by other request)</span>,</li>
<li class="list-item"><span class="list-item-params params">&#8220;goal&#8221;</span><span class="descriptions"> &#8211; goal of using proxy (available values can be got by other request)</span>,</li>
<li class="list-item"><span class="list-item-params params">&#8220;customGoal&#8221;</span><span class="descriptions"> &#8211; if the goal you need is not present in the goal list, you can indicate your own goal. Length of field must be 5 characters or more (one of the parameters &#8211; goal or customGoal &#8211; must be in the request)</span>,</li>
<li class="list-item"><span class="list-item-params params">&#8220;country&#8221;</span><span class="descriptions"> &#8211; alfa3 country code</span>,</li>
<li class="list-item"><span class="list-item-params params">&#8220;count&#8221;</span><span class="descriptions"> &#8211; the number of proxies. Value can be more then 10</span>,</li>
<li class="list-item"><span class="list-item-params params">&#8220;authType&#8221;</span><span class="descriptions"> &#8211; authorization type</span> &#8211;<span class="data">&#8220;login/ip&#8221;</span>,</li>
<li class="list-item"><span class="list-item-params params">&#8220;authIp&#8221;</span><span class="descriptions"> &#8211; authorization IP address. This field is required only if authType = ip</span>,</li>
<li class="list-item"><span class="list-item-params params">&#8220;protocol&#8221;</span><span class="descriptions"> &#8211; protocol</span> &#8211;<span class="data">&#8220;HTTPS/SOCKS5&#8221;</span>.</li>
</ul>
<p><span class="sub-title">Example reqwest:</span></p>
<div class="api-item-request">/client-api/v1/<span class="key">&lt;apiKey&gt;</span>/order</div>
<p><span class="sub-title">Example body reqwest:</span></p>
<pre>{
"proxyType":"ipv6",
"days":30,
"goal":"instagram",
"country":"GBR",
"count":10,
"authType":"login",
"protocol":"SOCKS5"
}</pre>
</div>
<div>Example body answer:</div>
<pre>{
"success":true,
"user":"client@gmail.com",
"balance":4.09,
"currency":"USD",
"proxyType":"ipv6",
"orderNumber":"DV-211552356-jA"
}
</pre>
<div>
<div class="api-item-contain mb-48">
<p><span class="sub-title">Response params:</span></p>
<ul class="api-item-list mb-24">
<li class="list-item"><span class="list-item-params params">&#8220;orderNumber&#8221;</span><span class="descriptions"> &#8211; order number</span>,</li>
<li class="list-item"><span class="list-item-params params">&#8220;balance&#8221;</span><span class="descriptions"> &#8211; the balance after the purchase</span>.</li>
</ul>
</div>
<hr />
<h3 class="api-item-contain "><span class="title">Extending proxy</span></h3>
<div></div>
<div class="api-item-contain ">
<p><span style="font-size: 16px;">POST</span></p>
<div class="api-item-request">/client-api/v1/<span class="key">&lt;apiKey&gt;</span>/extend</div>
<p><span class="sub-title">Reqwest parameters:</span></p>
<ul class="api-item-list mb-24">
<li class="list-item"><span class="list-item-params params">&#8220;proxyType&#8221;</span><span class="descriptions"> &#8211; type of proxy</span> &#8211;<span class="data">&#8220;ipv6&#8221;</span>,</li>
<li class="list-item"><span class="list-item-params params">&#8220;days&#8221;</span><span class="descriptions"> &#8211; the number of renewal days (the available values are the same as for the purchase)</span>,</li>
<li class="list-item"><span class="list-item-params params">&#8220;orderId&#8221;</span><span class="descriptions"> &#8211; the list of order IDs to be extended</span>.</li>
</ul>
<p><span class="sub-title">Example reqwest:</span></p>
<div class="api-item-request">/client-api/v1/<span class="key">&lt;apiKey&gt;</span>/extend</div>
<p><span class="sub-title">Example body reqwest:</span></p>
</div>
<pre>{
"proxyType":"ipv6",
"days":30,
"orderId":
[
"orderId1"
]
}
</pre>
</div>
<div>Example body answer:</div>
<pre>{
"success":true,
"user":"client@gmail.com",
"balance":4.09,
"currency":"USD"
}
</pre>
<div>
<p><span class="sub-title">Response params:</span></p>
<ul class="api-item-list mb-24">
<li class="list-item"><span class="list-item-params params">&#8220;balance&#8221;</span><span class="descriptions"> &#8211; the balance after extending</span>.</li>
</ul>
<hr />
</div>
<div>
<div class="api-item documentation-mb">
<div class="api-item-dropdown">
<div class="api-item-dropdown-container">
<div class="api-item-contain ">
<h2>Mobile requests</h2>
<h3></h3>
<h3><span class="title">To get the list of available mobile tariffs</span></h3>
<div class="line"><span style="font-size: 16px;">GET</span></div>
<div class="api-item-request">/client-api/v1/<span class="key">&lt;apiKey&gt;</span>/get/tariffs</div>
<p><span class="sub-title">Example body answer:</span></p>
<pre>{
"success":true,
"user":"client@gmail.com",
"balance":13.09,
"currency":"USD",
"tariffs":
[
{
"country":"GBR",
"mobileOperator":
[
{
"name":"Three",
"rotationTime":
[
0,
5,
10
]
},
{
"name":"O2",
"rotationTime":
[
5,
10
]
}
]
},
{
"country":"USA",
"mobileOperator":
[
{
"name":"AT&T Wireless",
"rotationTime":
[
0,
5,
10
]
}
]
}
]
}
</pre>
<div class="api-item-contain mb-48">
<p><span class="sub-title">Response params:</span></p>
<ul class="api-item-list mb-24">
<li class="list-item"><span class="list-item-params params">&#8220;tariffs&#8221;</span><span class="descriptions"> &#8211; the list of tariffs</span>,</li>
<li class="list-item"><span class="list-item-params params">&#8220;country&#8221;</span><span class="descriptions"> &#8211; alfa3 country code</span>,</li>
<li class="list-item"><span class="list-item-params params">&#8220;mobileOperator&#8221;</span><span class="descriptions"> &#8211; the list of available operators for this country</span>,</li>
<li class="list-item"><span class="list-item-params params">&#8220;rotationTime&#8221;</span><span class="descriptions"> &#8211; available rotation times of IP address in minutes. 0 is rotation by link at any moment</span>.</li>
</ul>
</div>
<hr />
<h3 class="api-item-contain mb-48"><span class="title">the list of active mobile proxies</span></h3>
<div></div>
<div class="api-item-contain mb-48">
<p><span style="font-size: 16px;">GET</span></p>
<div class="api-item-request">/client-api/v1/<span class="key">&lt;apiKey&gt;</span>/get/proxies</div>
<p><span class="sub-title">Reqwest parameters:</span></p>
<ul class="api-item-list mb-24">
<li class="list-item"><span class="list-item-params params">&#8220;proxyType&#8221;</span><span class="descriptions"> &#8211; type of proxy</span> &#8211;<span class="data">&#8220;mobile&#8221;</span>.</li>
</ul>
<p><span class="sub-title">Example reqwest:</span></p>
<div class="api-item-request">/client-api/v1/<span class="key">&lt;apiKey&gt;</span>/get/proxies?proxyType=mobile</div>
<p><span class="sub-title">Example body answer:</span></p>
</div>
<pre>{
"success":true,
"user":"client@gmail.com",
"balance":13.09,
"currency":"USD",
"proxyType":"mobile",
"countOfProxy":2,
"proxies":
[
{
"id":"id1",
"ip":"61.62.63.64",
"country":"FRA",
"dateStart":"2022-08-30T14:54:25.414+00:00",
"dateEnd":"2022-09-29T23:59:25.414+00:00",
"httpsPort":"7781",
"socks5Port":"8891",
"mobileOperator":"freemobilesas_france",
"rotationTime":0,
"rebootLink":"https://proxy-ipv4.com/modem/reboot/448eac96-8546-4389-8f56-54b2sb4798d12",
"authInfo":
{
"login":"authLogin123",
"password":"authPassword"
}
},
{
"id":"id2",
"ip":"61.62.63.64",
"country":"FRA",
"dateStart":"2022-08-30T14:54:25.414+00:00",
"dateEnd":"2022-09-29T23:59:25.414+00:00",
"httpsPort":"7782",
"socks5Port":"8892",
"mobileOperator":"freemobilesas_france",
"rotationTime":0,
"rebootLink":"https://proxy-ipv4.com/modem/reboot/44cf7d39-b682-4296-8909-7038ba99008b5",
"authInfo":
{
"login":"authLogin123",
"password":"authPassword"
}
}
]
}</pre>
</div>
</div>
</div>
</div>
</div>
<div>
<div class="api-item-contain mb-48">
<p><span class="sub-title">Response params:</span></p>
<ul class="api-item-list mb-24">
<li class="list-item"><span class="list-item-params params">&#8220;proxies&#8221;</span><span class="descriptions"> &#8211; the list of active proxies</span>,</li>
<li class="list-item"><span class="list-item-params params">&#8220;id&#8221;</span><span class="descriptions"> &#8211; proxy ID. This parameter is needed for extending proxy</span>,</li>
<li class="list-item"><span class="list-item-params params">&#8220;country&#8221;</span><span class="descriptions"> &#8211; alfa3 country code</span>,</li>
<li class="list-item"><span class="list-item-params params">&#8220;dateStart&#8221;</span><span class="descriptions"> &#8211; the rent start date</span>,</li>
<li class="list-item"><span class="list-item-params params">&#8220;dateEnd&#8221;</span><span class="descriptions"> &#8211; the rent end date</span>,</li>
<li class="list-item"><span class="list-item-params params">&#8220;rotationTime&#8221;</span><span class="descriptions"> &#8211; the rotation time of IP address in minutes. 0 is rotation by link at any moment</span>,</li>
<li class="list-item"><span class="list-item-params params">&#8220;rebootLink&#8221;</span><span class="descriptions"> &#8211; the link for rotation IP</span>,</li>
<li class="list-item"><span class="list-item-params params">&#8220;authInfo&#8221;</span><span class="descriptions"> &#8211; the data for authorization</span>.</li>
</ul>
</div>
<hr />
<h3 class="api-item-contain mb-48"><span class="title">Calculate purchase price</span></h3>
<div></div>
<div class="api-item-contain mb-48">
<p><span style="font-size: 16px;">GET</span></p>
<div class="api-item-request">/client-api/v1/<span class="key">&lt;apiKey&gt;</span>/get/order/price</div>
<p><span class="sub-title">Reqwest parameters:</span></p>
<ul class="api-item-list mb-24">
<li class="list-item"><span class="list-item-params params">&#8220;proxyType&#8221;</span><span class="descriptions"> &#8211; type of proxy</span> &#8211;<span class="data">&#8220;mobile&#8221;</span>,</li>
<li class="list-item"><span class="list-item-params params">&#8220;days&#8221;</span><span class="descriptions"> &#8211; the number of rental days (available values can be got by other request)</span>,</li>
<li class="list-item"><span class="list-item-params params">&#8220;goal&#8221;</span><span class="descriptions"> &#8211; goal of using proxy (available values can be got by other request)</span>,</li>
<li class="list-item"><span class="list-item-params params">&#8220;customGoal&#8221;</span><span class="descriptions"> &#8211; if the goal you need is not present in the goal list, you can indicate your own goal. Length of field must be 5 characters or more (one of the parameters &#8211; goal or customGoal &#8211; must be in the request)</span>,</li>
<li class="list-item"><span class="list-item-params params">&#8220;country&#8221;</span><span class="descriptions"> &#8211; alfa3 country code (available values can be got by other request)</span>,</li>
<li class="list-item"><span class="list-item-params params">&#8220;count&#8221;</span><span class="descriptions"> &#8211; the number of proxies</span>,</li>
<li class="list-item"><span class="list-item-params params">&#8220;mobileOperator&#8221;</span><span class="descriptions"> &#8211; the mobile operator (available values can be got by other request)</span>,</li>
<li class="list-item"><span class="list-item-params params">&#8220;rotationTime&#8221;</span><span class="descriptions"> &#8211; the rotation time of IP address in minutes (available values can be got by other request)</span>.</li>
</ul>
<p><span class="sub-title">Example reqwest:</span></p>
<div class="api-item-request">/client-api/v1/<span class="key">&lt;apiKey&gt;</span>/get/order/price?proxyType=mobile&days=7&goal=instagram&country=FRA&count=1&mobileOperator=freemobilesas_france&rotationTime=5</div>
<p><span class="sub-title">Example body answer:</span></p>
</div>
<pre>{
"success":true,
"user":"client@gmail.com",
"balance":13.09,
"currency":"USD",
"proxyType":"mobile",
"rotationTime":5,
"mobileOperator":"freemobilesas_france",
"days":7,
"count":1,
"goal":"instagram",
"amount":1.78,
"price":1.78
}
</pre>
</div>
</div>
<div>
<div class="api-item-contain mb-48">
<p><span class="sub-title">Response params:</span></p>
<ul class="api-item-list mb-24">
<li class="list-item"><span class="list-item-params params">&#8220;amount&#8221;</span><span class="descriptions"> &#8211; total amount</span>,</li>
<li class="list-item"><span class="list-item-params params">&#8220;price&#8221;</span><span class="descriptions"> &#8211; price for one proxy</span>.</li>
</ul>
</div>
<hr />
<h3 class="api-item-contain mb-48"><span class="title">Calculate extending price</span></h3>
<div></div>
<div class="api-item-contain mb-48">
<p><span style="font-size: 16px;">GET</span></p>
<div class="api-item-request">/client-api/v1/<span class="key">&lt;apiKey&gt;</span>/get/extend/price</div>
<p><span class="sub-title">Reqwest parameters:</span></p>
<ul class="api-item-list mb-24">
<li class="list-item"><span class="list-item-params params">&#8220;proxyType&#8221;</span><span class="descriptions"> &#8211; type of proxy</span> &#8211;<span class="data">&#8220;mobile&#8221;</span>,</li>
<li class="list-item"><span class="list-item-params params">&#8220;days&#8221;</span><span class="descriptions"> &#8211; the number of renewal days (the available values are the same as for the purchase)</span>,</li>
<li class="list-item"><span class="list-item-params params">&#8220;IpId&#8221;</span><span class="descriptions"> &#8211; proxy IDs that require renewal (it is allowed to indicate several IDs separated by commas)</span>.</li>
</ul>
<p><span class="sub-title">Example reqwest:</span></p>
<div class="api-item-request">/client-api/v1/<span class="key">&lt;apiKey&gt;</span>/get/extend/price?proxyType=mobile&days=7&IpId=id1,id2,id3</div>
<p><span class="sub-title">Example body answer:</span></p>
</div>
<pre>{
"success":true,
"user":"client@gmail.com",
"balance":13.09,
"currency":"USD",
"proxyType":"mobile",
"days":7,
"count":3,
"amount":9.13,
"price":3.04,
"ipId":
[
"id1",
"id2",
"id3"
]
}
</pre>
</div>
<div>
<div class="api-item-contain mb-48">
<p><span class="sub-title">Response params:</span></p>
<ul class="api-item-list mb-24">
<li class="list-item"><span class="list-item-params params">&#8220;amount&#8221;</span><span class="descriptions"> &#8211; total amount</span>,</li>
<li class="list-item"><span class="list-item-params params">&#8220;price&#8221;</span><span class="descriptions"> &#8211; price for extending one proxy</span>,</li>
<li class="list-item"><span class="list-item-params params">&#8220;ipId&#8221;</span><span class="descriptions"> &#8211; the list of proxy IDs for extending</span>.</li>
</ul>
</div>
<hr />
<h3 class="api-item-contain mb-48"><span class="title">Placing an order</span></h3>
<div></div>
<div class="api-item-contain mb-48">
<p><span style="font-size: 16px;">POST</span></p>
<div class="api-item-request">/client-api/v1/<span class="key">&lt;apiKey&gt;</span>/order</div>
<p><span class="sub-title">Reqwest parameters:</span></p>
<ul class="api-item-list mb-24">
<li class="list-item"><span class="list-item-params params">&#8220;proxyType&#8221;</span><span class="descriptions"> &#8211; type of proxy</span> &#8211;<span class="data">&#8220;mobile&#8221;</span>,</li>
<li class="list-item"><span class="list-item-params params">&#8220;days&#8221;</span><span class="descriptions"> &#8211; the number of rental days (available values can be got by other request)</span>,</li>
<li class="list-item"><span class="list-item-params params">&#8220;goal&#8221;</span><span class="descriptions"> &#8211; goal of using proxy (available values can be got by other request)</span>,</li>
<li class="list-item"><span class="list-item-params params">&#8220;customGoal&#8221;</span><span class="descriptions"> &#8211; if the goal you need is not present in the goal list, you can indicate your own goal. Length of field must be 5 characters or more (one of the parameters &#8211; goal or customGoal &#8211; must be in the request)</span>,</li>
<li class="list-item"><span class="list-item-params params">&#8220;country&#8221;</span><span class="descriptions"> &#8211; alfa3 country code</span>,</li>
<li class="list-item"><span class="list-item-params params">&#8220;count&#8221;</span><span class="descriptions"> &#8211; the number of proxies</span>,</li>
<li class="list-item"><span class="list-item-params params">&#8220;authType&#8221;</span><span class="descriptions"> &#8211; authorization type</span> &#8211;<span class="data">&#8220;login/ip&#8221;</span>,</li>
<li class="list-item"><span class="list-item-params params">&#8220;authIp&#8221;</span><span class="descriptions"> &#8211; authorization IP address. This field is required only if authType = ip</span>,</li>
<li class="list-item"><span class="list-item-params params">&#8220;mobileOperator&#8221;</span><span class="descriptions"> &#8211; the mobile operator (available values can be got by other request)</span>,</li>
<li class="list-item"><span class="list-item-params params">&#8220;rotationTime&#8221;</span><span class="descriptions"> &#8211; the rotation time of IP address in minutes (available values can be got by other request)</span>.</li>
</ul>
<p><span class="sub-title">Example reqwest:</span></p>
<div class="api-item-request">/client-api/v1/<span class="key">&lt;apiKey&gt;</span>/order</div>
<p><span class="sub-title">Example body reqwest:</span></p>
</div>
<pre>{
"proxyType":"mobile",
"days":30,
"goal":"instagram",
"country":"FRA",
"count":1,
"authType":"login",
"mobileOperator":"freemobilesas_france",
"rotationTime":5
}
</pre>
</div>
<div>Example body answer:</div>
<pre>{
"success":true,
"user":"client@gmail.com",
"balance":4.09,
"currency":"USD",
"proxyType":"mobile",
"orderNumber":"DV-21x1552356-jA"
}
</pre>
<div>
<div class="api-item-contain mb-48">
<p><span class="sub-title">Response params:</span></p>
<ul class="api-item-list mb-24">
<li class="list-item"><span class="list-item-params params">&#8220;orderNumber&#8221;</span><span class="descriptions"> &#8211; order number</span>,</li>
<li class="list-item"><span class="list-item-params params">&#8220;balance&#8221;</span><span class="descriptions"> &#8211; the balance after the purchase</span>.</li>
</ul>
</div>
<hr />
<h3 class="api-item-contain "><span class="title">Extending proxy</span></h3>
<div></div>
<div class="api-item-contain ">
<p><span style="font-size: 16px;">POST</span></p>
<div class="api-item-request">/client-api/v1/<span class="key">&lt;apiKey&gt;</span>/extend</div>
<p><span class="sub-title">Reqwest parameters:</span></p>
<ul class="api-item-list mb-24">
<li class="list-item"><span class="list-item-params params">&#8220;proxyType&#8221;</span><span class="descriptions"> &#8211; type of proxy</span> &#8211;<span class="data">&#8220;mobile&#8221;</span>,</li>
<li class="list-item"><span class="list-item-params params">&#8220;days&#8221;</span><span class="descriptions"> &#8211; the number of renewal days (the available values are the same as for the purchase)</span>,</li>
<li class="list-item"><span class="list-item-params params">&#8220;IpId&#8221;</span><span class="descriptions"> &#8211; the list of proxy IDs to be extended</span>.</li>
</ul>
<p><span class="sub-title">Example reqwest:</span></p>
<div class="api-item-request">/client-api/v1/<span class="key">&lt;apiKey&gt;</span>/extend</div>
<p><span class="sub-title">Example body reqwest:</span></p>
</div>
<pre>{
"proxyType":"mobile",
"days":30,
"IpId":
[
"id1",
"id2"
]
}
</pre>
</div>
<div>Example body answer:</div>
<pre>{
"success":true,
"user":"client@gmail.com",
"balance":4.09,
"currency":"USD"
}
</pre>
<div>
<p><span class="sub-title">Response params:</span></p>
<ul class="api-item-list mb-24">
<li class="list-item"><span class="list-item-params params">&#8220;balance&#8221;</span><span class="descriptions"> &#8211; the balance after extending</span>.</li>
</ul>
<hr />
</div>
<div>
<div class="api-item documentation-mb">
<div class="api-item-dropdown">
<div class="api-item-dropdown-container">
<div class="api-item-contain ">
<h2>Possible mistakes</h2>
<p class="descriptions"><img decoding="async" src="https://proxy-ipv4.com/img/ui/infoApi.svg" alt="icon" width="16" height="16" />In case of failed query, you will get an error message</p>
<p><span class="sub-title">Error Example:</span></p>
<pre>{
"success":false,
"error_id":2,
"error":"You are sending requests too often. No more than one per second is allowed"
}
</pre>
</div>
</div>
</div>
</div>
</div>
<div>
<ul class="api-item-list mb-24">
<li class="list-item"><span class="list-item-params params">&#8220;error_id&#8221;</span><span class="descriptions"> &#8211; error ID</span>,</li>
<li class="list-item"><span class="list-item-params params">&#8220;error&#8221;</span><span class="descriptions"> &#8211; error message</span>.</li>
</ul>
<p><span class="sub-title">ID errors:</span></p>
<ul class="api-item-list mb-24">
<li class="list-item"><span class="list-item-params params">&#8220;1&#8221;</span><span class="descriptions"> &#8211; API disabled on the server</span>,</li>
<li class="list-item"><span class="list-item-params params">&#8220;2&#8221;</span><span class="descriptions"> &#8211; You are sending requests too often. No more than one per second is allowed</span>,</li>
<li class="list-item"><span class="list-item-params params">&#8220;3&#8221;</span><span class="descriptions"> &#8211; Error auth. Your IP doesn't have access</span>,</li>
<li class="list-item"><span class="list-item-params params">&#8220;4&#8221;</span><span class="descriptions"> &#8211; Method not supported</span>,</li>
<li class="list-item"><span class="list-item-params params">&#8220;5&#8221;</span><span class="descriptions"> &#8211; Incorrect proxy type</span>,</li>
<li class="list-item"><span class="list-item-params params">&#8220;6&#8221;</span><span class="descriptions"> &#8211; Ipv4 proxies disabled on the server</span>,</li>
<li class="list-item"><span class="list-item-params params">&#8220;7&#8221;</span><span class="descriptions"> &#8211; Ipv6 proxies disabled on the server</span>,</li>
<li class="list-item"><span class="list-item-params params">&#8220;8&#8221;</span><span class="descriptions"> &#8211; Mobile proxies disabled on the server</span>,</li>
<li class="list-item"><span class="list-item-params params">&#8220;9&#8221;</span><span class="descriptions"> &#8211; Incorrect field [days]</span>,</li>
<li class="list-item"><span class="list-item-params params">&#8220;10&#8221;</span><span class="descriptions"> &#8211; Incorrect field [country]</span>,</li>
<li class="list-item"><span class="list-item-params params">&#8220;11&#8221;</span><span class="descriptions"> &#8211; Incorrect field [goal]</span>,</li>
<li class="list-item"><span class="list-item-params params">&#8220;12&#8221;</span><span class="descriptions"> &#8211; Incorrect field [authType]</span>,</li>
<li class="list-item"><span class="list-item-params params">&#8220;13&#8221;</span><span class="descriptions"> &#8211; Incorrect field [protocol]. Field must be [HTTPS] or [SOCKS5]</span>,</li>
<li class="list-item"><span class="list-item-params params">&#8220;14&#8221;</span><span class="descriptions"> &#8211; Incorrect field [authIp]</span>,</li>
<li class="list-item"><span class="list-item-params params">&#8220;15&#8221;</span><span class="descriptions"> &#8211; Incorrect field [count]</span>,</li>
<li class="list-item"><span class="list-item-params params">&#8220;16&#8221;</span><span class="descriptions"> &#8211; Incorrect field [mobileOperator]</span>,</li>
<li class="list-item"><span class="list-item-params params">&#8220;17&#8221;</span><span class="descriptions"> &#8211; Incorrect field [rotationTime]</span>,</li>
<li class="list-item"><span class="list-item-params params">&#8220;18&#8221;</span><span class="descriptions"> &#8211; Incorrect field [IpId]</span>,</li>
<li class="list-item"><span class="list-item-params params">&#8220;19&#8221;</span><span class="descriptions"> &#8211; Incorrect field [orderId]</span>,</li>
<li class="list-item"><span class="list-item-params params">&#8220;20&#8221;</span><span class="descriptions"> &#8211; OrderId {orderId} don't have active IPs!</span>,</li>
<li class="list-item"><span class="list-item-params params">&#8220;21&#8221;</span><span class="descriptions"> &#8211; ID {ip} not found!</span>,</li>
<li class="list-item"><span class="list-item-params params">&#8220;22&#8221;</span><span class="descriptions"> &#8211; Request must contain [goal] or [customGoal]</span>,</li>
<li class="list-item"><span class="list-item-params params">&#8220;23&#8221;</span><span class="descriptions"> &#8211; Unknown error</span>,</li>
<li class="list-item"><span class="list-item-params params">&#8220;24&#8221;</span><span class="descriptions"> &#8211; Insufficient balance</span>,</li>
<li class="list-item"><span class="list-item-params params">&#8220;25&#8221;</span><span class="descriptions"> &#8211; Error key</span>,</li>
<li class="list-item"><span class="list-item-params params">&#8220;26&#8221;</span><span class="descriptions"> &#8211; Length of field [customGoal] must be 5 characters or more</span>.</li>
</ul>
</div>
<blockquote>
<div><strong>Click here to get <a href="https://proxy-zone.net/pz/proxy-ipv4" target="_blank" rel="nofollow noopener">Proxy-IPV4 API</a></strong></div>
</blockquote>
]]></content:encoded>
					
					<wfw:commentRss>https://proxysp.com/how-to-use-proxy-ipv4-api/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">11249</post-id>	</item>
		<item>
		<title>Dedicated Proxies (By BlazingSEO) : Learn Manuals Before You Buy</title>
		<link>https://proxysp.com/dedicated-proxies-blazingseo/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=dedicated-proxies-blazingseo</link>
					<comments>https://proxysp.com/dedicated-proxies-blazingseo/#respond</comments>
		
		<dc:creator><![CDATA[admin]]></dc:creator>
		<pubDate>Thu, 01 Jan 1970 00:00:00 +0000</pubDate>
				<category><![CDATA[BlazingSEO Proxies]]></category>
		<guid isPermaLink="false">https://www.proxysp.com/?p=7664</guid>

					<description><![CDATA[Want to learn more about Blazing SEO's dedicated proxies? This article discusses their advantages and how they differ from other types of proxies, so let's reading! &#8230;<p class="read-more"> <a class="ast-button" href="https://proxysp.com/dedicated-proxies-blazingseo/"> <span class="screen-reader-text">Dedicated Proxies (By BlazingSEO) : Learn Manuals Before You Buy</span> Read More &#187;</a></p>]]></description>
										<content:encoded><![CDATA[<blockquote><p>Want to learn more about Blazing SEO's dedicated proxies? This article discusses their advantages and how they differ from other types of proxies, so let's reading!</p></blockquote>
<h2>About BlazingSEO's Dedicated Proxies</h2>
<h3 class="heading">What are Dedicated Proxies?</h3>
<p>Dedicated Proxies are proxies that are only used by one single person. Which is why they are called &#8220;Dedicated&#8221;. They are dedicated to the one person using them.</p>
<h4><strong>Advantages:</strong></h4>
<ul>
<li>A dedicated proxy is a proxy that is used only by you.</li>
<li>It hides your IP(or MAC) address while adding security and protecting your privacy.</li>
<li>Dedicated proxies deliver fully anonymous surfing on the internet. It is important to remember that you leave a digital footprint in the form of your IP address when using the web. This means that almost anyone can see you online, including hackers and spammers. A dedicated proxy server can almost guarantee your IP address will be invisible.</li>
<li>Higher speed since no one else is working with the same proxy.</li>
<li>Ability to bypass filters and firewalls since a proxy server can circumvent these types of blocked websites.</li>
<li>Ability to unblock numerous applications and bypass numerous internet restrictions (i.e. unblock <a href="https://www.proxysp.com/youtube-proxies/" target="_blank" rel="noopener">YouTube</a>, <a href="https://www.proxysp.com/best-facebook-proxy/" target="_blank" rel="noopener">Facebook</a>, <a href="https://www.proxysp.com/twitter-proxies/" target="_blank" rel="noopener">Twitter</a> at work or school where the “IT administrator” has restricted your access to these and similar sites).</li>
<li>Protect privacy for minimal worry about your personal information being exposed or compromised when you make purchases or surf on the web.</li>
<li>Deliver a higher level of security on the internet since a dedicated proxy provides a unique internet address dedicated to only you.</li>
<li>Avoid and block spam successfully.</li>
<li>Get around geographic restrictions (Restricted content based on country).</li>
</ul>
<p>These proxies are best used for account use because the proxy never changes (Unless you would like the proxies to change).</p>
<p>Dedicated can also be used for games as well. People can create a game account through the proxy and play the game using the proxy.</p>
<p>Dedicated is best because only one person is using it. This means faster speeds, and better reliability site wise for the proxy. To compare, if the proxy was shared (Semi-Dedicated/Rotating), the other person using the proxy might've already created an account for a certain site. As result, the other users on the proxy will not be able to use that same proxy on the same site and create another account.</p>
<p>You might ask why you wouldn't be able to use dedicated proxies for sneaker sites. Please read this article the reasoning behind this.</p>
<h4><strong>Typical Uses of Dedicated Proxies:</strong></h4>
<ul>
<li>Social Media</li>
<li>Games</li>
<li>Account Creation/Use</li>
<li>General Browsing</li>
<li>SEO</li>
</ul>
<h4><strong>Locations:</strong></h4>
<ul>
<li>USA</li>
<li>Brazil</li>
<li>Germany</li>
<li>UK</li>
<li>India</li>
<li>Canada</li>
<li>Japan</li>
</ul>
<hr />
<h3>What are Semi-dedicated Proxies?</h3>
<p>Semi-Dedicated Proxies are proxies that are used by up to 3 people (<a href="https://www.proxysp.com/shared-proxy/" target="_blank" rel="noopener">Shared Proxy</a>). This is why they are called &#8220;Semi-Dedicated&#8221;. They are shared by up to 2 other people. However, this allows the proxy the ability to be more affordable. You may not need a proxy entirely dedicated to only you, and this would be a good option if so.</p>
<h4><strong>Advantages:</strong></h4>
<ul>
<li>Inexpensive</li>
<li>Sharing the proxy server allows you to share in the cost of that server</li>
<li>They are useful for the user who requires several proxies but uses each proxy only for a few hours</li>
<li>Proxies can be helpful with some of SEO software that need harvest data from internet (like keyword ranking or page rank).</li>
<li>They can support both an HTTP and SOCKS service</li>
<li>Proxies can also be used with web browsers and other apps that support proxy use</li>
<li>Get around geographic restrictions (Restricted content based on country)</li>
</ul>
<blockquote><p>These proxies are best used for general browsing and they are not recommended for account creation/management on social media sites.</p></blockquote>
<h4><strong>Authorization Types:</strong></h4>
<ul>
<li>IP Authorization &#8211; HTTP (3128), SOCKS (1080)</li>
<li>Username/Password &#8211; (4444)</li>
</ul>
<h4><strong>Locations:</strong></h4>
<ul>
<li>USA</li>
<li>Brazil</li>
<li>Germany</li>
</ul>
<hr />
<h3>What is the Difference Between Dedicated Proxies and Sneaker Proxies?</h3>
<p>What is the difference between Blazing SEO USA Dedicated proxies and their sneaker proxies? A lot &#8212; if you're a sneaker buyer. Dedicated proxies DO allow you to choose your &#8220;location&#8221; after purchasing, however, what most people do not realize is that the location is the GEOLOCATION, not the HOSTED LOCATION of the proxy.</p>
<p>The geolocation is an arbitrary location to appear as if you're from somewhere you're not, but your proxies will be located all around the USA in various datacenters. <a href="https://www.proxysp.com/sneaker-proxies-blazingseo/" target="_blank" rel="noopener">Sneaker proxies</a> allow you to choose the HOSTED LOCATION after purchasing: either LA or NY. This allows you to select the city that is CLOSEST to your server/computer.</p>
<p>Having a proxy server closest to your server is the ideal situation for the fastest speeds possible. We do recommend you to use their sneaker proxies that are specifically purposed and optimized for shoe sites instead.</p>
<hr />
<h2>Dedicated Proxies Vs Rotating Proxies</h2>
<p>BlazingSEO also provide the <a href="https://www.proxysp.com/backconnect-proxies/" target="_blank" rel="noopener">Rotating proxies</a>, To learn the difference between dedicated Proxies and Rotating-proxies, I would suggest you learn this part at first,</p>
<h3 class="heading">What are Rotating Proxies?</h3>
<p>Rotating proxies are proxies that are shared, but the IPs change every set number of minutes to another proxy IP from a larger pool of IPs. This is why they are called &#8220;Rotating&#8221;. They rotate IPs after a set number of minutes (10-120 minutes) to a different IP. These IPs are shared between other users through which can mean slower speeds and potential website blocks.</p>
<p>Blazing SEO rotating proxies are proxies that switch it's public IP address within an interval of 10 minutes between the switch. Once you have successfully purchased the rotating proxy package, you will be given a single IP address with different port numbers like the following</p>
<p>108.46.12.64:1081</p>
<p>108.46.12.64:1082</p>
<p>108.46.12.64:1083</p>
<p>108.46.12.64:1084</p>
<p>108.46.12.64:1085</p>
<p>The proxy IP has different port numbers and will show a different public IP address. When you load the proxy onto Firefox for testing, and when you browse to whatismyipaddress.com, you will not see 108.46.12.64 as your public IP, but rather something like this 106.39.12.61.</p>
<p>If you purchased 10 rotating proxy ports, that will grant you access to a pool of IPs that has 200 unique IPs. If you purchased 100 rotating proxy ports, that will grant you access to 2000 unique IPs in your pool. The pool of IP will remain the same throughout the entire billing cycle.</p>
<p>If you let your rotating proxy subscription expire at the end of the billing cycle, and re-purchase after that, this should grant you access to another pool of IP &#8211; do take note that the IPs are allocated randomly, thus we can't guarantee that all the IPs will be different from your previous pool.</p>
<h4><strong>Locations</strong></h4>
<ul>
<li>USA</li>
<li>Brazil</li>
<li>Germany</li>
</ul>
<div class="icon">
<div class="icon"></div>
</div>
<div>
<p><strong><div class="su-heading su-heading-style-modern-2-orange su-heading-align-center" id="" style="font-size:30px;margin-bottom:20px"><div class="su-heading-inner">FAQs</div></div></strong></p>
<p class="heading"><strong>1. What Limits do You have for Bandwidth and Threads?</strong></p>
<p>NONE! That’s right, Blazing SEO allows unlimited threads and unmetered/unthrottled bandwidth. Most proxy providers cut costs by openly limiting your threads or bandwidth, but a lot of them do it secretly without you knowing. For example, if they cut your bandwidth speed by half just for an hour each day they would cut a significant amount of their costs… and you wouldn’t even know!</p>
<hr />
<p class="heading"><strong>2. Does Blazing SEO has Proxies that Can be Used for Social Media?</strong></p>
<p>Blazing SEO proxies can be used in a variety of ways. Social media account management is one of the biggest uses for their proxies. We highly recommend using Blazing SEO dedicated proxies. Their dedicated proxies are only used by a single user and are best used for social media. Where as semi-dedicated and rotating proxies are shared among 3 total users.</p>
<p>We highly recommend using 1 proxy per account. Anything more than that will increase the chances of getting blocked/banned. You can check out Blazing SEO proxy subscriptions on Blazing SEO website <a href="https://www.proxysp.com/redirect/blazingseollc" target="_blank" rel="nofollow noopener">here</a>.</p>
<hr />
<p class="heading"><strong>3. Can I Use My Proxies on Multiple Computers?</strong></p>
<p>Blazing SEO allows multiple computer access for Blazing SEO proxies – kindly ensure to Authorize<span dir="ltr"> the IP address of the computer that wants access to the proxies via your proxy dashboard.</span></p>
<div class="su-youtube su-u-responsive-media-yes"><iframe width="600" height="400" src="https://www.youtube.com/embed/Q-NSzU1GDp8?" frameborder="0" allowfullscreen allow="autoplay; encrypted-media; picture-in-picture" title=""></iframe></div>
<hr />
<p><strong>4. How Fast Are Blazing SEO Proxies?</strong></p>
<p>All Blazing SEO proxies are on 1 Gbps DEDICATED network lines. Unlike most other providers, they do not oversell their proxies and ensure all speeds test to the full 1 Gbps.</p>
<hr />
<h4 id="references" class="ftwp-heading">References,</h4>
<ul>
<li><a href="https://portal.blazingseollc.com/en/support/solutions/articles/64000256598-what-are-dedicated-proxies-" target="_blank" rel="nofollow noopener">https://portal.blazingseollc.com/en/support/solutions/articles/64000256598-what-are-dedicated-proxies-</a></li>
<li><a href="https://portal.blazingseollc.com/en/support/solutions/articles/64000256622-what-are-semi-dedicated-proxies-" target="_blank" rel="nofollow noopener">https://portal.blazingseollc.com/en/support/solutions/articles/64000256622-what-are-semi-dedicated-proxies-</a></li>
<li><a href="https://portal.blazingseollc.com/en/support/solutions/articles/64000256675-what-is-the-difference-between-dedicated-proxies-and-sneaker-proxies-" target="_blank" rel="nofollow noopener">https://portal.blazingseollc.com/en/support/solutions/articles/64000256675-what-is-the-difference-between-dedicated-proxies-and-sneaker-proxies-</a></li>
<li><a href="https://portal.blazingseollc.com/en/support/solutions/articles/64000262796-what-limits-do-you-have-for-bandwidth-and-threads-" target="_blank" rel="nofollow noopener">https://portal.blazingseollc.com/en/support/solutions/articles/64000262796-what-limits-do-you-have-for-bandwidth-and-threads-</a></li>
<li><a href="https://portal.blazingseollc.com/en/support/solutions/articles/64000256633-do-you-have-proxies-that-can-be-used-for-social-media-" target="_blank" rel="nofollow noopener">https://portal.blazingseollc.com/en/support/solutions/articles/64000256633-do-you-have-proxies-that-can-be-used-for-social-media-</a></li>
<li><a href="https://portal.blazingseollc.com/en/support/solutions/articles/64000262805-can-i-use-my-proxies-on-multiple-computers-" target="_blank" rel="nofollow noopener">https://portal.blazingseollc.com/en/support/solutions/articles/64000262805-can-i-use-my-proxies-on-multiple-computers-</a></li>
<li><a href="https://portal.blazingseollc.com/en/support/solutions/articles/64000262797-how-fast-are-your-proxies-" target="_blank" rel="nofollow noopener">https://portal.blazingseollc.com/en/support/solutions/articles/64000262797-how-fast-are-your-proxies-</a></li>
<li><a href="https://portal.blazingseollc.com/en/support/solutions/articles/64000256631-what-are-rotating-proxies-" target="_blank" rel="nofollow noopener">https://portal.blazingseollc.com/en/support/solutions/articles/64000256631-what-are-rotating-proxies-</a></li>
</ul>
<p>&nbsp;</p>
</div>
<hr />
<blockquote><p><strong>Disclaimer</strong>: This part of the content is mainly from the merchant. If the merchant does not want it to be displayed on my website, please <a href="https://www.proxysp.com/contact-us/">contact us</a> to delete your content.</p></blockquote>
]]></content:encoded>
					
					<wfw:commentRss>https://proxysp.com/dedicated-proxies-blazingseo/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">7664</post-id>	</item>
		<item>
		<title>How to Use PrivateProxy.me API</title>
		<link>https://proxysp.com/how-to-use-privateproxy-me-api/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=how-to-use-privateproxy-me-api</link>
					<comments>https://proxysp.com/how-to-use-privateproxy-me-api/#respond</comments>
		
		<dc:creator><![CDATA[proxysp]]></dc:creator>
		<pubDate>Wed, 22 Feb 2023 04:59:15 +0000</pubDate>
				<category><![CDATA[Manuals]]></category>
		<guid isPermaLink="false">https://www.proxysp.com/?p=10980</guid>

					<description><![CDATA[Do you know how to use PrivateProxy.me API? This is the most comprehensive introduction from PrivateProxy.me official. Basic Information Package needs to be active for API &#8230;<p class="read-more"> <a class="ast-button" href="https://proxysp.com/how-to-use-privateproxy-me-api/"> <span class="screen-reader-text">How to Use PrivateProxy.me API</span> Read More &#187;</a></p>]]></description>
										<content:encoded><![CDATA[<blockquote><p>Do you know how to use <a href="https://app.privateproxy.me/from/662" target="_blank" rel="nofollow noopener">PrivateProxy.me</a> API? This is the most comprehensive introduction from PrivateProxy.me official.</p></blockquote>
<h2>Basic Information</h2>
<div>
<p>Package needs to be active for API to work.</p>
<p>Your API key: <b>08c5fa8dd63c8adc4b08803df5f68f9d</b></p>
<p>API base URL: <b>https://app.privateproxy.me/api/v1</b></p>
<p>Authorization is standard basic auth with api as username and api key as password, or you can use a key query parameter.</p>
<pre>curl -u api:08c5fa8dd63c8adc4b08803df5f68f9d https://app.privateproxy.me/api/v1/package_subscriptions/1/...
curl https://app.privateproxy.me/api/v1/package_subscriptions/1/...?key=08c5fa8dd63c8adc4b08803df5f68f9d</pre>
<p>Inactive subscriptions can't be used in API requests.</p>
<p>All further examples use basic authorization.</p>
</div>
<hr />
<h2>Common Code for All Further Examples</h2>
<div class="su-tabs su-tabs-style-default su-tabs-mobile-stack" data-active="5" data-scroll-offset="0" data-anchor-in-url="no"><div class="su-tabs-nav"><span class="" data-url="" data-target="blank" tabindex="0" role="button"><strong>Python 3 + requests</strong></span><span class="" data-url="" data-target="blank" tabindex="0" role="button"><strong>PHP + libcurl</strong></span><span class="" data-url="" data-target="blank" tabindex="0" role="button"><strong>Node.js + stdlib</strong></span><span class="" data-url="" data-target="blank" tabindex="0" role="button"><strong>Ruby + stdlib</strong></span><span class="" data-url="" data-target="blank" tabindex="0" role="button"><strong>Golang + stdlib</strong></span></div><div class="su-tabs-panes"><div class="su-tabs-pane su-u-clearfix su-u-trim" data-title="&lt;strong&gt;Python 3 + requests&lt;/strong&gt;">
<pre># filename proxy_api.py
import json
import requests
import pprint

class ProxyAPIException(Exception):
  pass

class RequestError(ProxyAPIException):
  pass

class ResponseError(ProxyAPIException):
  pass

class ResponseParseError(ProxyAPIException):
  pass

class ProxyAPI:
  def __init__(self, base, api_key):
    if base.endswith('/'):
      self.base = base
    else:
      self.base = base + '/'
    self.api_key = api_key

  def __is_json_response(self, response):
    if 'Content-Type' not in response.headers:
      return False
    for part in response.headers['Content-Type'].split(';'):
      if part == "application/json":
        return True

    return False

  def __process_response(self, response):
    if response.status_code == 200:
      error = None
      if self.__is_json_response(response):
        try:
          obj = json.loads(response.text)
        except Exception as e:
          error = e
        if error:
          raise ResponseParseError("Error parsing JSON response from the server: %s" % str(error))
        return obj
      else:
        return response.text
    else:
      if self.__is_json_response(response):
        failed = False
        try:
          error_json = json.loads(response.text)
        except Exception as e:
          failed = True
        if failed:
          raise ResponseError("Received non-200 code from the server, but failed to parse json response: %s" % response.text)
        else:
          raise ResponseError("Received error from server: %s" % error_json['error'])
      else:
        raise ResponseError("Received non-200 code from the server")


  def get(self, endpoint, query_params = {}):
    if endpoint[0] == '/':
      endpoint = endpoint[1:]
    fin_url = self.base + endpoint
    error = None
    try:
      response = requests.get(fin_url, auth=('api', self.api_key), params = query_params)
    except requests.exceptions.RequestException as e:
      error = e

    if error:
      raise RequestError("An error occurred while making a request: %s" % str(error))

    return self.__process_response(response)

  def put(self, endpoint, body = {}):
    if endpoint[0] == '/':
      endpoint = endpoint[1:]
    fin_url = self.base + endpoint
    error = None
    try:
      response = requests.put(
        fin_url,
        auth=('api', self.api_key),
        data = json.dumps(body),
        headers = {'Content-Type': 'application/json'}
      )
    except requests.exceptions.RequestException as e:
      error = e

    if error:
      raise RequestError("An error occurred while making a request: %s" % str(error))

    return self.__process_response(response)</pre>
</div>
<div class="su-tabs-pane su-u-clearfix su-u-trim" data-title="&lt;strong&gt;PHP + libcurl&lt;/strong&gt;">
<pre>&lt;?php
// filename proxy_api.php
class ProxyAPIException extends Exception {}
class RequestError extends ProxyAPIException {}
class ResponseError extends ProxyAPIException {}
class ResponseParseError extends ProxyAPIException {}

class ProxyAPI {
  private $api_base, $api_key;

  public function __construct($api_base, $api_key) {
    $this-&gt;api_base = preg_replace("/\/+$/", "", $api_base);
    $this-&gt;api_key = $api_key;
  }

  public function get($endpoint, $query_params = null) {
    $endpoint = "/".preg_replace("/^\/+/", "", $endpoint);
    $url = $this-&gt;api_base.$endpoint;

    $query_string = "";
    if ($query_params !== null) {
      $q = null;
      if (is_string($query_params)) {
        $q = explode($url, '&');
      } elseif (is_array($query_params)) {
        $q = $query_params;
      }
      $tmp = [];
      foreach ($q as $key =&gt; $value) {
        $tmp[] = urlencode($key) . "=" . urlencode($value);
      }
      $query_string = implode("&", $tmp);
    }

    if ($query_string !== "") {
      $url .= "?".$query_string;
    }

    $ch = curl_init($url);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
    curl_setopt($ch, CURLOPT_HTTPAUTH, CURLAUTH_BASIC);
    curl_setopt($ch, CURLOPT_USERNAME, "api");
    curl_setopt($ch, CURLOPT_PASSWORD, $this-&gt;api_key);
    $response = curl_exec($ch);

    return $this-&gt;process_response($ch, $response);
  }

  public function put($endpoint, $body = null) {
    $endpoint = "/" . preg_replace("/^\/+/", "", $endpoint);
    $url = $this-&gt;api_base . $endpoint;

    $data_json = json_encode($body);
    if (json_last_error()) {
      throw new RequestError("Error encoding body as json: ".json_last_error_msg());
    }

    $ch = curl_init($url);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
    curl_setopt($ch, CURLOPT_USERNAME, "api");
    curl_setopt($ch, CURLOPT_PASSWORD, $this-&gt;api_key);
    curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "PUT");
    curl_setopt($ch, CURLOPT_HTTPHEADER, ["Content-Type:application/json", "Content-Length:".strlen($data_json)]);
    curl_setopt($ch, CURLOPT_POSTFIELDS, $data_json);
    $response = curl_exec($ch);

    return $this-&gt;process_response($ch, $response);
  }

  private function process_response($ch, $response) {
    if (curl_error($ch)) {
      throw new RequestError("Received error during request: ".curl_error($ch));
    }
    $response_code = curl_getinfo($ch, CURLINFO_RESPONSE_CODE);
    $content_type = curl_getinfo($ch, CURLINFO_CONTENT_TYPE);
    $is_json = strstr($content_type, 'application/json') !== false;
    curl_close($ch);

    if ($response_code == '200') {
      if ($is_json) {
        $res = json_decode($response, true, 512);
        $le = json_last_error();
        if ($le != JSON_ERROR_NONE) {
          throw new ResponseParseError("Error parsing response from server as JSON: ".json_last_error_msg());
        }
        return $res;
      } else {
        return $response;
      }
    } else {
      if ($is_json) {
        $res = json_decode($response, true, 512);
        $le = json_last_error();
        if ($le != JSON_ERROR_NONE) {
          throw new ResponseError("Received ".$response_code." code from server, but failed to parse JSON response: ".json_last_error_msg());
        }
        throw new ResponseError("Received ".$response_code." code from server: ".$res['error']);
      } else {
        throw new ResponseError("Received ".$response_code." code from server: ".$response);
      }
    }
  }
}</pre>
</div>
<div class="su-tabs-pane su-u-clearfix su-u-trim" data-title="&lt;strong&gt;Node.js + stdlib&lt;/strong&gt;">
<pre>// filename proxy_api.js
const https = require('https')
const http = require('http')
const querystring = require('querystring');

function process_response(response, body, resolve, reject) {
  const ct = response.headers['content-type'] || '';
  let isJson = false;
  if (ct.includes("application/json")) {
    isJson = true;
  }

  if (response.statusCode == 200) {
    if (isJson) {
      let json;
      try {
        json = JSON.parse(body);
      } catch(e) {
        reject(e);
        return;
      }
      resolve(json);
    } else {
      resolve(body);
    }
  } else {
    const err = "Received status " + response.statusCode + " from server";
    if (isJson) {
      let json;
      try {
        json = JSON.parse(body);
      } catch(e) {
        reject(new Error(err + ", but failed to parse JSON: " + body));
        return;
      }
      reject(new Error(err + ": " + json['error']));
    } else {
      reject(new Error(err + ": " + body));
    }
  }
}

async function get(url, api_key, query_params = {}) {
  const qs = querystring.stringify(query_params);
  let final_url = url;
  if (qs != '') {
    final_url += '?' + qs;
  }
  const options = {
    method: 'GET',
    auth: "api:" + api_key
  }

  const result = await new Promise((resolve, reject) =&gt; {
    let t;
    if (final_url.startsWith("http://")) {
      t = http;
    } else if (final_url.startsWith("https://")) {
      t = https;
    }
    const req = t.request(final_url, options, (res) =&gt; {
      res.setEncoding('utf8');
      const chunks = [];
      res.on('data', (chunk) =&gt; {
        chunks.push(chunk);
      });

      res.on('end', () =&gt; {
        const body = chunks.join('');
        process_response(res, body, resolve, reject);
      });
    });

    req.on('error', (e) =&gt; {
      reject(e);
    });

    req.end();
  }).catch((e) =&gt; (e));

  return result;
}

async function put(url, api_key, request_body = {}) {
  const request_body_str = JSON.stringify(request_body);
  const options = {
    method: 'PUT',
    auth: "api:" + api_key,
    headers: {
      'Content-Type': 'application/json',
      'Content-Length': request_body_str.length
    }
  }

  const result = await new Promise((resolve, reject) =&gt; {
    let t;
    if (url.startsWith("http://")) {
      t = http;
    } else if (url.startsWith("https://")) {
      t = https;
    }
    const req = t.request(url, options, (res) =&gt; {
      res.setEncoding('utf8');
      const ct = res.headers['content-type'] || '';
      let isJson = false;
      if (ct.includes("application/json")) {
        isJson = true;
      }
      const chunks = []
      res.on('data', (chunk) =&gt; {
        chunks.push(chunk);
      });

      res.on('end', () =&gt; {
        const body = chunks.join('');
        process_response(res, body, resolve, reject);
      });
    });

    req.on('error', (e) =&gt; {
      reject(e);
    });

    req.write(request_body_str);
    req.end();
  }).catch((e) =&gt; (e));

  return result;
}

module.exports = {
  get: get,
  put: put
}</pre>
</div>
<div class="su-tabs-pane su-u-clearfix su-u-trim" data-title="&lt;strong&gt;Ruby + stdlib&lt;/strong&gt;">
<pre># filename proxy_api.rb
require 'net/http'
require 'uri'
require 'json'

class ProxyAPIException &lt; StandardError
end

class RequestError &lt; ProxyAPIException
end

class ResponseError &lt; ProxyAPIException
  attr_accessor :code
end

class ResponseParseError &lt; ProxyAPIException
end

class ProxyAPI
  def initialize(base_url, api_key)
    @base_url = base_url.gsub(/\/+$/, '')
    @api_key = api_key
  end

  def get(endpoint, query_params = {})
    endpoint = endpoint.gsub(/^\/+/, '/')
    if endpoint[0] != '/'
      endpoint = '/' + endpoint
    end
    final_url = @base_url + endpoint
    uri = URI.parse(final_url)
    if !query_params.empty?
      uri.query = URI.encode_www_form(query_params)
    end
    request = Net::HTTP::Get.new(uri)
    req_options = {
      use_ssl: uri.scheme == "https",
    }
    request.basic_auth('api', @api_key)

    response = nil
    err = nil
    begin
      response = Net::HTTP.start(uri.hostname, uri.port, req_options) do |http|
        response = http.request(request)
      end
    rescue =&gt; e
      err = RequestError.new(e.message)
    end

    raise err if err

    return process_response(response)
  end

  def put(endpoint, body = {})
    endpoint = endpoint.gsub(/^\/+/, '/')
    if endpoint[0] != '/'
      endpoint = '/' + endpoint
    end
    final_url = @base_url + endpoint
    uri = URI.parse(final_url)
    request = Net::HTTP::Put.new(uri)
    req_options = {
      use_ssl: uri.scheme == "https",
    }
    request.basic_auth('api', @api_key)
    request['Content-Type'] = 'application/json'
    request.body = body.to_json

    response = nil
    err = nil
    begin
      response = Net::HTTP.start(uri.hostname, uri.port, req_options) do |http|
        response = http.request(request)
      end
    rescue =&gt; e
      err = RequestError.new(e.message)
    end

    raise err if err

    return process_response(response)
  end

  private

  def process_response(response)
    if response.code == '200'
      err = nil
      res = begin
        if is_json_response?(response)
          JSON.parse(response.body)
        else
          response.body
        end
      rescue =&gt; e
        err = ResponseParseError.new(e.message)
      end
      raise err if err
      return res
    else
      if is_json_response?(response)
        b = JSON.parse(response.body) rescue nil
        if b
          ex = ResponseError.new("Received code #{response.code} from server: #{b['error']}")
          ex.code = response.code.to_i
          raise ex
        else
          ex = ResponseError.new("Received code #{response.code} from server, but failed to parse JSON: #{response.body}")
          ex.code = response.code.to_i
          raise ex
        end
      else
        ex = ResponseError.new("Received code #{response.code} from server: #{response.body}")
        ex.code = response.code.to_i
        raise ex
      end
    end
  end

  def is_json_response?(response)
    response['Content-Type'].to_s.split(';').each do |part|
      return true if part == 'application/json'
    end
    return false
  end
end</pre>
</div>
<div class="su-tabs-pane su-u-clearfix su-u-trim" data-title="&lt;strong&gt;Golang + stdlib&lt;/strong&gt;">
<div>
<div class="tab-content">
<div id="golang_common_code" class="tab-pane tab-padding active" role="tabpanel">
<pre># filename proxy_api.rb
require 'net/http'
require 'uri'
require 'json'

class ProxyAPIException &lt; StandardError
end

class RequestError &lt; ProxyAPIException
end

class ResponseError &lt; ProxyAPIException
  attr_accessor :code
end

class ResponseParseError &lt; ProxyAPIException
end

class ProxyAPI
  def initialize(base_url, api_key)
    @base_url = base_url.gsub(/\/+$/, '')
    @api_key = api_key
  end

  def get(endpoint, query_params = {})
    endpoint = endpoint.gsub(/^\/+/, '/')
    if endpoint[0] != '/'
      endpoint = '/' + endpoint
    end
    final_url = @base_url + endpoint
    uri = URI.parse(final_url)
    if !query_params.empty?
      uri.query = URI.encode_www_form(query_params)
    end
    request = Net::HTTP::Get.new(uri)
    req_options = {
      use_ssl: uri.scheme == "https",
    }
    request.basic_auth('api', @api_key)

    response = nil
    err = nil
    begin
      response = Net::HTTP.start(uri.hostname, uri.port, req_options) do |http|
        response = http.request(request)
      end
    rescue =&gt; e
      err = RequestError.new(e.message)
    end

    raise err if err

    return process_response(response)
  end

  def put(endpoint, body = {})
    endpoint = endpoint.gsub(/^\/+/, '/')
    if endpoint[0] != '/'
      endpoint = '/' + endpoint
    end
    final_url = @base_url + endpoint
    uri = URI.parse(final_url)
    request = Net::HTTP::Put.new(uri)
    req_options = {
      use_ssl: uri.scheme == "https",
    }
    request.basic_auth('api', @api_key)
    request['Content-Type'] = 'application/json'
    request.body = body.to_json

    response = nil
    err = nil
    begin
      response = Net::HTTP.start(uri.hostname, uri.port, req_options) do |http|
        response = http.request(request)
      end
    rescue =&gt; e
      err = RequestError.new(e.message)
    end

    raise err if err

    return process_response(response)
  end

  private

  def process_response(response)
    if response.code == '200'
      err = nil
      res = begin
        if is_json_response?(response)
          JSON.parse(response.body)
        else
          response.body
        end
      rescue =&gt; e
        err = ResponseParseError.new(e.message)
      end
      raise err if err
      return res
    else
      if is_json_response?(response)
        b = JSON.parse(response.body) rescue nil
        if b
          ex = ResponseError.new("Received code #{response.code} from server: #{b['error']}")
          ex.code = response.code.to_i
          raise ex
        else
          ex = ResponseError.new("Received code #{response.code} from server, but failed to parse JSON: #{response.body}")
          ex.code = response.code.to_i
          raise ex
        end
      else
        ex = ResponseError.new("Received code #{response.code} from server: #{response.body}")
        ex.code = response.code.to_i
        raise ex
      end
    end
  end

  def is_json_response?(response)
    response['Content-Type'].to_s.split(';').each do |part|
      return true if part == 'application/json'
    end
    return false
  end
end</pre>
</div>
</div>
</div>
</div></div></div>
<hr />
<h2>Get Subscriptions List</h2>
<div>
<div class="pre-parent">
<div class="pre-description">This endpoint allows to get a list of all subscriptions.</div>
<div class="pre-params">
<table class="table table-condensed table-bordered">
<tbody>
<tr>
<td>Endpoint</td>
<td>/package_subscriptions</td>
</tr>
<tr>
<td>Method</td>
<td>GET</td>
</tr>
<tr>
<td>Parameters</td>
<td>None</td>
</tr>
<tr>
<td>Query parameters</td>
<td>None</td>
</tr>
<tr>
<td>JSON parameters</td>
<td>None</td>
</tr>
</tbody>
</table>
</div>
</div>
</div>
<div class="su-tabs su-tabs-style-default su-tabs-mobile-stack" data-active="6" data-scroll-offset="0" data-anchor-in-url="no"><div class="su-tabs-nav"><span class="" data-url="" data-target="blank" tabindex="0" role="button"><strong>curl in *nix shell</strong></span><span class="" data-url="" data-target="blank" tabindex="0" role="button"><strong>Python 3 + requests</strong></span><span class="" data-url="" data-target="blank" tabindex="0" role="button"><strong>PHP + libcurl</strong></span><span class="" data-url="" data-target="blank" tabindex="0" role="button"><strong>Node.js + stdlib</strong></span><span class="" data-url="" data-target="blank" tabindex="0" role="button"><strong>Ruby + stdlib</strong></span><span class="" data-url="" data-target="blank" tabindex="0" role="button">Golang + stdlib</span></div><div class="su-tabs-panes"><div class="su-tabs-pane su-u-clearfix su-u-trim" data-title="&lt;strong&gt;curl in *nix shell&lt;/strong&gt;">
<div class="tab-content">
<div id="curl_get_subscriptions_list" class="tab-pane tab-padding active" role="tabpanel">
<pre>curl -u api:08c5fa8dd63c8adc4b08803df5f68f9d https://app.privateproxy.me/api/v1/package_subscriptions</pre>
</div>
</div>
<p>Example response:</p>
<pre>[
  {
    "id":8644,
    "type":"backconnect",
    "package":"Backconnect Beginner (200K Requests)",
    "active":false
  },
  {
    "id":8643,
    "type":"proxy",
    "package":"3 Private Proxies",
    "active":true
  }
]</pre>
</div>
<div class="su-tabs-pane su-u-clearfix su-u-trim" data-title="&lt;strong&gt;Python 3 + requests&lt;/strong&gt;">
<div class="tab-content">
<div id="python_get_subscriptions_list" class="tab-pane tab-padding active" role="tabpanel">
<pre>from proxy_api import *

api = ProxyAPI("https://app.privateproxy.me/api/v1","08c5fa8dd63c8adc4b08803df5f68f9d")
try:
  result = api.get("/package_subscriptions")
  pprint.PrettyPrinter(indent=2).pprint(result)
except ProxyAPIException as e:
  print(str(e))</pre>
</div>
</div>
<p>Example response:</p>
<pre>[
  {
    "id":8644,
    "type":"backconnect",
    "package":"Backconnect Beginner (200K Requests)",
    "active":false
  },
  {
    "id":8643,
    "type":"proxy",
    "package":"3 Private Proxies",
    "active":true
  }
]</pre>
</div>
<div class="su-tabs-pane su-u-clearfix su-u-trim" data-title="&lt;strong&gt;PHP + libcurl&lt;/strong&gt;">
<div class="tab-content">
<div id="php_get_subscriptions_list" class="tab-pane tab-padding active" role="tabpanel">
<pre>&lt;?php
require "proxy_api.php";

$api = new ProxyAPI('https://app.privateproxy.me/api/v1', '08c5fa8dd63c8adc4b08803df5f68f9d');

try {
  var_dump($api-&gt;get("/package_subscriptions"));
} catch(ProxyAPIException $e) {
  echo $e;
}</pre>
</div>
</div>
<p>Example response:</p>
<pre>[
  {
    "id":8644,
    "type":"backconnect",
    "package":"Backconnect Beginner (200K Requests)",
    "active":false
  },
  {
    "id":8643,
    "type":"proxy",
    "package":"3 Private Proxies",
    "active":true
  }
]</pre>
</div>
<div class="su-tabs-pane su-u-clearfix su-u-trim" data-title="&lt;strong&gt;Node.js + stdlib&lt;/strong&gt;">
<div class="tab-content">
<div id="nodejs_get_subscriptions_list" class="tab-pane tab-padding active" role="tabpanel">
<pre>const proxy_api = require('./proxy_api');

async function main() {
  const res = await proxy_api.get('https://app.privateproxy.me/api/v1/package_subscriptions', '08c5fa8dd63c8adc4b08803df5f68f9d');
  if (res instanceof Error) {
    console.log("Error:" + res.toString());
  } else {
    console.log(res);
  }
}

main();</pre>
</div>
</div>
<p>Example response:</p>
<pre>[
  {
    "id":8644,
    "type":"backconnect",
    "package":"Backconnect Beginner (200K Requests)",
    "active":false
  },
  {
    "id":8643,
    "type":"proxy",
    "package":"3 Private Proxies",
    "active":true
  }
]</pre>
</div>
<div class="su-tabs-pane su-u-clearfix su-u-trim" data-title="&lt;strong&gt;Ruby + stdlib&lt;/strong&gt;">
<div class="tab-content">
<div id="ruby_get_subscriptions_list" class="tab-pane tab-padding active" role="tabpanel">
<pre>require_relative './proxy_api'

begin
  api = ProxyAPI.new("https://app.privateproxy.me/api/v1", "08c5fa8dd63c8adc4b08803df5f68f9d")
  puts(api.get("/package_subscriptions").inspect)
rescue ProxyAPIException =&gt; e
  puts e.message
end</pre>
</div>
</div>
<p>Example response:</p>
<pre>[
  {
    "id":8644,
    "type":"backconnect",
    "package":"Backconnect Beginner (200K Requests)",
    "active":false
  },
  {
    "id":8643,
    "type":"proxy",
    "package":"3 Private Proxies",
    "active":true
  }
]</pre>
</div>
<div class="su-tabs-pane su-u-clearfix su-u-trim" data-title="Golang + stdlib">
<div class="tab-content">
<div id="golang_get_subscriptions_list" class="tab-pane tab-padding active" role="tabpanel">
<pre>package main

import (
  "encoding/json"
  "fmt"
  "net/http"
)

type subscriptionEl struct {
  ID      int    `json:"id"`
  Type    string `json:"type"`
  Package string `json:"package"`
  Active  bool   `json:"active"`
}

type subscriptionsList []*subscriptionEl

func main() {
  api := NewProxyAPI("https://app.privateproxy.me/api/v1", "08c5fa8dd63c8adc4b08803df5f68f9d", &http.Client{})

  resp, isJSON, err := api.Get("/package_subscriptions", nil)
  if err != nil {
    fmt.Println(err)
  } else {
    if isJSON {
      var subscriptions subscriptionsList
      json.Unmarshal([]byte(resp), &subscriptions)
      for _, v := range subscriptions {
        fmt.Println(v)
      }
    } else {
      fmt.Println(resp)
    }
  }
}</pre>
</div>
</div>
<p>Example response:</p>
<pre>[
  {
    "id":8644,
    "type":"backconnect",
    "package":"Backconnect Beginner (200K Requests)",
    "active":false
  },
  {
    "id":8643,
    "type":"proxy",
    "package":"3 Private Proxies",
    "active":true
  }
]</pre>
</div></div></div>
<hr />
<h2>Get Subscription</h2>
<div>
<div class="pre-parent">
<div class="pre-description">This endpoint allows you to get specific subscription information, like billing cycle start and end dates, or number of requests in the current billing cycle for backconnect packages.</div>
<div class="pre-params">
<table class="table table-condensed table-bordered">
<tbody>
<tr>
<td>Endpoint</td>
<td>/package_subscriptions/:id</td>
</tr>
<tr>
<td>Method</td>
<td>GET</td>
</tr>
<tr>
<td>Parameters</td>
<td>id &#8211; id of subscription</td>
</tr>
<tr>
<td>Query parameters</td>
<td>None</td>
</tr>
<tr>
<td>JSON parameters</td>
<td>None</td>
</tr>
</tbody>
</table>
</div>
</div>
</div>
<div class="su-tabs su-tabs-style-default su-tabs-mobile-stack" data-active="6" data-scroll-offset="0" data-anchor-in-url="no"><div class="su-tabs-nav"><span class="" data-url="" data-target="blank" tabindex="0" role="button"><strong>curl in *nix shell</strong></span><span class="" data-url="" data-target="blank" tabindex="0" role="button"><strong>Python 3 + requests</strong></span><span class="" data-url="" data-target="blank" tabindex="0" role="button"><strong>PHP + libcurl</strong></span><span class="" data-url="" data-target="blank" tabindex="0" role="button"><strong>Node.js + stdlib</strong></span><span class="" data-url="" data-target="blank" tabindex="0" role="button"><strong>Ruby + stdlib</strong></span><span class="" data-url="" data-target="blank" tabindex="0" role="button"><strong>Golang + stdlib</strong></span></div><div class="su-tabs-panes"><div class="su-tabs-pane su-u-clearfix su-u-trim" data-title="&lt;strong&gt;curl in *nix shell&lt;/strong&gt;">
<div class="tab-content">
<div id="curl_get_subscription" class="tab-pane tab-padding active" role="tabpanel">
<pre>curl -u api:08c5fa8dd63c8adc4b08803df5f68f9d https://app.privateproxy.me/api/v1/package_subscriptions/1</pre>
</div>
</div>
<p>Example response:</p>
<table class="table">
<tbody>
<tr>
<th>Proxy subscription</th>
<th>Backconnect subscription</th>
</tr>
<tr>
<td>
<pre>{
  "id":8643,
  "type":"proxy",
  "purpose":"Google",
  "country":"Any",
  "ip_type":"proxy",
  "package":"3 Private Proxies",
  "price_cents":900,
  "billing_cycle_start":1599563902,
  "billing_cycle_end":1602155902,
  "last_invoice_amount_cents":900,
  "payment_method":"card",
  "ip_count":3
}</pre>
</td>
<td>
<pre>{
  "id":8644,
  "type":"backconnect",
  "purpose":"Google",
  "country":"Any",
  "ip_type":"proxy",
  "package":"Backconnect Beginner (200K Requests)",
  "price_cents":5900,
  "billing_cycle_start":1599563939,
  "billing_cycle_end":1602155939,
  "last_invoice_amount_cents":5900,
  "payment_method":"card",
  "requests_limit":200000,
  "port_count":5,
  "connection_limit":1000,
  "billing_cycle_requests":15749
}</pre>
</td>
</tr>
</tbody>
</table>
<p>&nbsp;</p>
</div>
<div class="su-tabs-pane su-u-clearfix su-u-trim" data-title="&lt;strong&gt;Python 3 + requests&lt;/strong&gt;">
<div class="tab-content">
<div id="python_get_subscription" class="tab-pane tab-padding active" role="tabpanel">
<pre>from proxy_api import *

api = ProxyAPI("https://app.privateproxy.me/api/v1","08c5fa8dd63c8adc4b08803df5f68f9d")
try:
  result = api.get("/package_subscriptions/1")
  pprint.PrettyPrinter(indent=2).pprint(result)
except ProxyAPIException as e:
  print(str(e))</pre>
</div>
</div>
<p>Example response:</p>
<table class="table">
<tbody>
<tr>
<th>Proxy subscription</th>
<th>Backconnect subscription</th>
</tr>
<tr>
<td>
<pre>{
  "id":8643,
  "type":"proxy",
  "purpose":"Google",
  "country":"Any",
  "ip_type":"proxy",
  "package":"3 Private Proxies",
  "price_cents":900,
  "billing_cycle_start":1599563902,
  "billing_cycle_end":1602155902,
  "last_invoice_amount_cents":900,
  "payment_method":"card",
  "ip_count":3
}</pre>
</td>
<td>
<pre>{
  "id":8644,
  "type":"backconnect",
  "purpose":"Google",
  "country":"Any",
  "ip_type":"proxy",
  "package":"Backconnect Beginner (200K Requests)",
  "price_cents":5900,
  "billing_cycle_start":1599563939,
  "billing_cycle_end":1602155939,
  "last_invoice_amount_cents":5900,
  "payment_method":"card",
  "requests_limit":200000,
  "port_count":5,
  "connection_limit":1000,
  "billing_cycle_requests":15749
}</pre>
</td>
</tr>
</tbody>
</table>
</div>
<div class="su-tabs-pane su-u-clearfix su-u-trim" data-title="&lt;strong&gt;PHP + libcurl&lt;/strong&gt;">
<div class="tab-content">
<div id="php_get_subscription" class="tab-pane tab-padding active" role="tabpanel">
<pre>&lt;?php
require "proxy_api.php";

$api = new ProxyAPI('https://app.privateproxy.me/api/v1', '08c5fa8dd63c8adc4b08803df5f68f9d');

try {
  var_dump($api-&gt;get("/package_subscriptions/1"));
} catch(ProxyAPIException $e) {
  echo $e;
}</pre>
</div>
</div>
<p>Example response:</p>
<table class="table">
<tbody>
<tr>
<th>Proxy subscription</th>
<th>Backconnect subscription</th>
</tr>
<tr>
<td>
<pre>{
  "id":8643,
  "type":"proxy",
  "purpose":"Google",
  "country":"Any",
  "ip_type":"proxy",
  "package":"3 Private Proxies",
  "price_cents":900,
  "billing_cycle_start":1599563902,
  "billing_cycle_end":1602155902,
  "last_invoice_amount_cents":900,
  "payment_method":"card",
  "ip_count":3
}</pre>
</td>
<td>
<pre>{
  "id":8644,
  "type":"backconnect",
  "purpose":"Google",
  "country":"Any",
  "ip_type":"proxy",
  "package":"Backconnect Beginner (200K Requests)",
  "price_cents":5900,
  "billing_cycle_start":1599563939,
  "billing_cycle_end":1602155939,
  "last_invoice_amount_cents":5900,
  "payment_method":"card",
  "requests_limit":200000,
  "port_count":5,
  "connection_limit":1000,
  "billing_cycle_requests":15749
}</pre>
</td>
</tr>
</tbody>
</table>
</div>
<div class="su-tabs-pane su-u-clearfix su-u-trim" data-title="&lt;strong&gt;Node.js + stdlib&lt;/strong&gt;">
<div class="tab-content">
<div id="nodejs_get_subscription" class="tab-pane tab-padding active" role="tabpanel">
<pre>const proxy_api = require('./proxy_api');

async function main() {
  const res = await proxy_api.get('https://app.privateproxy.me/api/v1/package_subscriptions/1', '08c5fa8dd63c8adc4b08803df5f68f9d');
  if (res instanceof Error) {
    console.log("Error:" + res.toString());
  } else {
    console.log(res);
  }
}

main();</pre>
</div>
</div>
<p>Example response:</p>
<table class="table">
<tbody>
<tr>
<th>Proxy subscription</th>
<th>Backconnect subscription</th>
</tr>
<tr>
<td>
<pre>{
  "id":8643,
  "type":"proxy",
  "purpose":"Google",
  "country":"Any",
  "ip_type":"proxy",
  "package":"3 Private Proxies",
  "price_cents":900,
  "billing_cycle_start":1599563902,
  "billing_cycle_end":1602155902,
  "last_invoice_amount_cents":900,
  "payment_method":"card",
  "ip_count":3
}</pre>
</td>
<td>
<pre>{
  "id":8644,
  "type":"backconnect",
  "purpose":"Google",
  "country":"Any",
  "ip_type":"proxy",
  "package":"Backconnect Beginner (200K Requests)",
  "price_cents":5900,
  "billing_cycle_start":1599563939,
  "billing_cycle_end":1602155939,
  "last_invoice_amount_cents":5900,
  "payment_method":"card",
  "requests_limit":200000,
  "port_count":5,
  "connection_limit":1000,
  "billing_cycle_requests":15749
}</pre>
</td>
</tr>
</tbody>
</table>
</div>
<div class="su-tabs-pane su-u-clearfix su-u-trim" data-title="&lt;strong&gt;Ruby + stdlib&lt;/strong&gt;">
<div class="tab-content">
<div id="ruby_get_subscription" class="tab-pane tab-padding active" role="tabpanel">
<pre>require_relative './proxy_api'

begin
  api = ProxyAPI.new("https://app.privateproxy.me/api/v1", "08c5fa8dd63c8adc4b08803df5f68f9d")
  puts(api.get("/package_subscriptions/1").inspect)
rescue ProxyAPIException =&gt; e
  puts e.message
end</pre>
</div>
</div>
<p>Example response:</p>
<table class="table">
<tbody>
<tr>
<th>Proxy subscription</th>
<th>Backconnect subscription</th>
</tr>
<tr>
<td>
<pre>{
  "id":8643,
  "type":"proxy",
  "purpose":"Google",
  "country":"Any",
  "ip_type":"proxy",
  "package":"3 Private Proxies",
  "price_cents":900,
  "billing_cycle_start":1599563902,
  "billing_cycle_end":1602155902,
  "last_invoice_amount_cents":900,
  "payment_method":"card",
  "ip_count":3
}</pre>
</td>
<td>
<pre>{
  "id":8644,
  "type":"backconnect",
  "purpose":"Google",
  "country":"Any",
  "ip_type":"proxy",
  "package":"Backconnect Beginner (200K Requests)",
  "price_cents":5900,
  "billing_cycle_start":1599563939,
  "billing_cycle_end":1602155939,
  "last_invoice_amount_cents":5900,
  "payment_method":"card",
  "requests_limit":200000,
  "port_count":5,
  "connection_limit":1000,
  "billing_cycle_requests":15749
}</pre>
</td>
</tr>
</tbody>
</table>
</div>
<div class="su-tabs-pane su-u-clearfix su-u-trim" data-title="&lt;strong&gt;Golang + stdlib&lt;/strong&gt;">
<div class="tab-content">
<div id="golang_get_subscription" class="tab-pane tab-padding active" role="tabpanel">
<pre>package main

import (
  "encoding/json"
  "fmt"
  "net/http"
)

type subscription struct {
  ID                     int    `json:"id"`
  Type                   string `json:"type"`
  Purpose                string `json:"purpose"`
  Country                string `json:"country"`
  IPType                 string `json:"ip_type"`
  Package                string `json:"package"`
  PriceCents             int    `json:"price_cents"`
  BillingCycleStart      uint64 `json:"billing_cycle_start"`
  BillingCycleEnd        uint64 `json:"billing_cycle_end"`
  LastInvoiceAmountCents int    `json:"last_invoice_amount_cents"`
  PaymentMethod          string `json:"payment_method"`

  // only proxy
  IPCount int `json:"ip_count"`

  // only backconnect
  RequestsLimit        int `json:"requests_limit"`
  PortCount            int `json:"port_count"`
  ConnectionLimit      int `json:"connection_limit"`
  BillingCycleRequests int `json:"billing_cycle_requests"`
}

func main() {
  api := NewProxyAPI("https://app.privateproxy.me/api/v1", "08c5fa8dd63c8adc4b08803df5f68f9d", &http.Client{})

  resp, isJSON, err := api.Get("/package_subscriptions/1", nil)
  if err != nil {
    fmt.Println(err)
  } else {
    if isJSON {
      var sub subscription
      json.Unmarshal([]byte(resp), &sub)
      fmt.Println(sub)
    } else {
      fmt.Println(resp)
    }
  }
}</pre>
</div>
</div>
<p>Example response:</p>
<table class="table">
<tbody>
<tr>
<th>Proxy subscription</th>
<th>Backconnect subscription</th>
</tr>
<tr>
<td>
<pre>{
  "id":8643,
  "type":"proxy",
  "purpose":"Google",
  "country":"Any",
  "ip_type":"proxy",
  "package":"3 Private Proxies",
  "price_cents":900,
  "billing_cycle_start":1599563902,
  "billing_cycle_end":1602155902,
  "last_invoice_amount_cents":900,
  "payment_method":"card",
  "ip_count":3
}</pre>
</td>
<td>
<pre>{
  "id":8644,
  "type":"backconnect",
  "purpose":"Google",
  "country":"Any",
  "ip_type":"proxy",
  "package":"Backconnect Beginner (200K Requests)",
  "price_cents":5900,
  "billing_cycle_start":1599563939,
  "billing_cycle_end":1602155939,
  "last_invoice_amount_cents":5900,
  "payment_method":"card",
  "requests_limit":200000,
  "port_count":5,
  "connection_limit":1000,
  "billing_cycle_requests":15749
}</pre>
</td>
</tr>
</tbody>
</table>
</div></div></div>
<hr />
<h2>IP/Port List</h2>
<div>
<div class="pre-parent">
<div class="pre-description">This endpoint allows getting a list of proxies/backconnect gateway IPs for the package.</div>
<div class="pre-params">
<table class="table table-condensed table-bordered">
<tbody>
<tr>
<td>Endpoint</td>
<td>/package_subscriptions/:id/ips</td>
</tr>
<tr>
<td>Method</td>
<td>GET</td>
</tr>
<tr>
<td>Parameters</td>
<td>id &#8211; id of subscription</td>
</tr>
<tr>
<td>Query parameters</td>
<td>hide_auth &#8211; if present, hides credentials from the list<br />
hide_port &#8211; hides port(static packages only)<br />
port &#8211; shows different port, available values are 2534, 3389, 5432 and 5433, 5432 is the default(static packages only)</td>
</tr>
<tr>
<td>JSON parameters</td>
<td>None</td>
</tr>
</tbody>
</table>
</div>
</div>
</div>
<div class="su-tabs su-tabs-style-default su-tabs-mobile-stack" data-active="6" data-scroll-offset="0" data-anchor-in-url="no"><div class="su-tabs-nav"><span class="" data-url="" data-target="blank" tabindex="0" role="button"><strong>curl in *nix shell</strong></span><span class="" data-url="" data-target="blank" tabindex="0" role="button"><strong>Python 3 + requests</strong></span><span class="" data-url="" data-target="blank" tabindex="0" role="button"><strong>PHP + libcurl</strong></span><span class="" data-url="" data-target="blank" tabindex="0" role="button"><strong>Node.js + stdlib</strong></span><span class="" data-url="" data-target="blank" tabindex="0" role="button"><strong>Ruby + stdlib</strong></span><span class="" data-url="" data-target="blank" tabindex="0" role="button"><strong>Golang + stdlib</strong></span></div><div class="su-tabs-panes"><div class="su-tabs-pane su-u-clearfix su-u-trim" data-title="&lt;strong&gt;curl in *nix shell&lt;/strong&gt;">
<div class="tab-content">
<div id="curl_ip_list" class="tab-pane tab-padding active" role="tabpanel">
<pre>curl -u api:08c5fa8dd63c8adc4b08803df5f68f9d https://app.privateproxy.me/api/v1/package_subscriptions/1/ips</pre>
</div>
</div>
<p>Example response:</p>
<table class="table">
<tbody>
<tr>
<th>Without hide_auth</th>
<th>With hide_auth</th>
</tr>
<tr>
<td>
<pre>1.1.1.1:5432:login:password
2.2.2.2:5432:login:password
3.3.3.3:5432:login:password</pre>
</td>
<td>
<pre>1.1.1.1:5432
2.2.2.2:5432
3.3.3.3:5432</pre>
</td>
</tr>
</tbody>
</table>
<p>&nbsp;</p>
</div>
<div class="su-tabs-pane su-u-clearfix su-u-trim" data-title="&lt;strong&gt;Python 3 + requests&lt;/strong&gt;">
<div class="tab-content">
<div id="python_ip_list" class="tab-pane tab-padding active" role="tabpanel">
<pre>from proxy_api import *

api = ProxyAPI("https://app.privateproxy.me/api/v1","08c5fa8dd63c8adc4b08803df5f68f9d")
try:
  result = api.get("/package_subscriptions/1/ips")
  pprint.PrettyPrinter(indent=2).pprint(result)
  result = api.get("/package_subscriptions/1/ips", query_params={'hide_auth': ''})
  pprint.PrettyPrinter(indent=2).pprint(result)
except ProxyAPIException as e:
  print(str(e))</pre>
</div>
</div>
<p>Example response:</p>
<table class="table">
<tbody>
<tr>
<th>Without hide_auth</th>
<th>With hide_auth</th>
</tr>
<tr>
<td>
<pre>1.1.1.1:5432:login:password
2.2.2.2:5432:login:password
3.3.3.3:5432:login:password</pre>
</td>
<td>
<pre>1.1.1.1:5432
2.2.2.2:5432
3.3.3.3:5432</pre>
</td>
</tr>
</tbody>
</table>
</div>
<div class="su-tabs-pane su-u-clearfix su-u-trim" data-title="&lt;strong&gt;PHP + libcurl&lt;/strong&gt;">
<div class="tab-content">
<div id="php_ip_list" class="tab-pane tab-padding active" role="tabpanel">
<pre>&lt;?php
require "proxy_api.php";

$api = new ProxyAPI('https://app.privateproxy.me/api/v1', '08c5fa8dd63c8adc4b08803df5f68f9d');

try {
  var_dump($api-&gt;get("/package_subscriptions/1/ips"));
  var_dump($api-&gt;get("/package_subscriptions/1/ips", [
    "hide_auth" =&gt; ""
  ]));
} catch(ProxyAPIException $e) {
  echo $e;
}</pre>
</div>
</div>
<p>Example response:</p>
<table class="table">
<tbody>
<tr>
<th>Without hide_auth</th>
<th>With hide_auth</th>
</tr>
<tr>
<td>
<pre>1.1.1.1:5432:login:password
2.2.2.2:5432:login:password
3.3.3.3:5432:login:password</pre>
</td>
<td>
<pre>1.1.1.1:5432
2.2.2.2:5432
3.3.3.3:5432</pre>
</td>
</tr>
</tbody>
</table>
</div>
<div class="su-tabs-pane su-u-clearfix su-u-trim" data-title="&lt;strong&gt;Node.js + stdlib&lt;/strong&gt;">
<div class="tab-content">
<div id="nodejs_ip_list" class="tab-pane tab-padding active" role="tabpanel">
<pre>const proxy_api = require('./proxy_api');

async function main() {
  const res = await proxy_api.get('https://app.privateproxy.me/api/v1/package_subscriptions/1/ips', '08c5fa8dd63c8adc4b08803df5f68f9d');
  if (res instanceof Error) {
    console.log("Error:" + res.toString());
  } else {
    console.log(res);
  }
  const res2 = await proxy_api.get('https://app.privateproxy.me/api/v1/package_subscriptions/1/ips', '08c5fa8dd63c8adc4b08803df5f68f9d', {
    "hide_auth": ""
  });
  if (res2 instanceof Error) {
    console.log("Error:" + res2.toString());
  } else {
    console.log(res2);
  }
}

main();</pre>
</div>
</div>
<p>Example response:</p>
<table class="table">
<tbody>
<tr>
<th>Without hide_auth</th>
<th>With hide_auth</th>
</tr>
<tr>
<td>
<pre>1.1.1.1:5432:login:password
2.2.2.2:5432:login:password
3.3.3.3:5432:login:password</pre>
</td>
<td>
<pre>1.1.1.1:5432
2.2.2.2:5432
3.3.3.3:5432</pre>
</td>
</tr>
</tbody>
</table>
</div>
<div class="su-tabs-pane su-u-clearfix su-u-trim" data-title="&lt;strong&gt;Ruby + stdlib&lt;/strong&gt;">
<div class="tab-content">
<div id="ruby_ip_list" class="tab-pane tab-padding active" role="tabpanel">
<pre>require_relative './proxy_api'

begin
  api = ProxyAPI.new("https://app.privateproxy.me/api/v1", "08c5fa8dd63c8adc4b08803df5f68f9d")
  puts(api.get("/package_subscriptions/1/ips").inspect)
  puts(api.get("/package_subscriptions/1/ips", hide_auth: '').inspect)
rescue ProxyAPIException =&gt; e
  puts e.message
end</pre>
</div>
</div>
<p>Example response:</p>
<table class="table">
<tbody>
<tr>
<th>Without hide_auth</th>
<th>With hide_auth</th>
</tr>
<tr>
<td>
<pre>1.1.1.1:5432:login:password
2.2.2.2:5432:login:password
3.3.3.3:5432:login:password</pre>
</td>
<td>
<pre>1.1.1.1:5432
2.2.2.2:5432
3.3.3.3:5432</pre>
</td>
</tr>
</tbody>
</table>
</div>
<div class="su-tabs-pane su-u-clearfix su-u-trim" data-title="&lt;strong&gt;Golang + stdlib&lt;/strong&gt;">
<div class="tab-content">
<div id="golang_ip_list" class="tab-pane tab-padding active" role="tabpanel">
<pre>package main

import (
  "fmt"
  "net/http"
)

func main() {
  api := NewProxyAPI("https://app.privateproxy.me/api/v1", "08c5fa8dd63c8adc4b08803df5f68f9d", &http.Client{})

  resp, _, err := api.Get("/package_subscriptions/1/ips", nil)
  if err != nil {
    fmt.Println(err)
  } else {
    fmt.Println(resp)
  }

  resp, _, err = api.Get("/package_subscriptions/1/ips", map[string]string{"hide_auth": ""})
  if err != nil {
    fmt.Println(err)
  } else {
    fmt.Println(resp)
  }
}</pre>
</div>
</div>
<p>Example response:</p>
<table class="table">
<tbody>
<tr>
<th>Without hide_auth</th>
<th>With hide_auth</th>
</tr>
<tr>
<td>
<pre>1.1.1.1:5432:login:password
2.2.2.2:5432:login:password
3.3.3.3:5432:login:password</pre>
</td>
<td>
<pre>1.1.1.1:5432
2.2.2.2:5432
3.3.3.3:5432</pre>
</td>
</tr>
</tbody>
</table>
</div></div></div>
<hr />
<h2>Get Subscription Settings</h2>
<div>
<div class="pre-parent">
<div class="pre-description">This endpoint allows to get package specific settings, like authorized ips and swap interval(for backconnect).</div>
<div class="pre-params">
<table class="table table-condensed table-bordered">
<tbody>
<tr>
<td>Endpoint</td>
<td>/package_subscriptions/:id/settings</td>
</tr>
<tr>
<td>Method</td>
<td>GET</td>
</tr>
<tr>
<td>Parameters</td>
<td>id &#8211; id of subscription</td>
</tr>
<tr>
<td>Query parameters</td>
<td>None</td>
</tr>
<tr>
<td>JSON parameters</td>
<td>None</td>
</tr>
</tbody>
</table>
</div>
</div>
</div>
<div class="su-tabs su-tabs-style-default su-tabs-mobile-stack" data-active="6" data-scroll-offset="0" data-anchor-in-url="no"><div class="su-tabs-nav"><span class="" data-url="" data-target="blank" tabindex="0" role="button"><strong>curl in *nix shell</strong></span><span class="" data-url="" data-target="blank" tabindex="0" role="button">Python 3 + requests</span><span class="" data-url="" data-target="blank" tabindex="0" role="button"><strong>PHP + libcurl</strong></span><span class="" data-url="" data-target="blank" tabindex="0" role="button"><strong>Node.js + stdlib</strong></span><span class="" data-url="" data-target="blank" tabindex="0" role="button"><strong>Ruby + stdlib</strong></span><span class="" data-url="" data-target="blank" tabindex="0" role="button"><strong>Golang + stdlib</strong></span></div><div class="su-tabs-panes"><div class="su-tabs-pane su-u-clearfix su-u-trim" data-title="&lt;strong&gt;curl in *nix shell&lt;/strong&gt;">
<div class="tab-content">
<div id="curl_get_package_settings" class="tab-pane tab-padding active" role="tabpanel">
<pre>curl -u api:08c5fa8dd63c8adc4b08803df5f68f9d https://app.privateproxy.me/api/v1/package_subscriptions/1/settings</pre>
</div>
</div>
<p>Example response:</p>
<table class="table">
<tbody>
<tr>
<th>Proxy subscription</th>
<th>Backconnect subscription</th>
</tr>
<tr>
<td>
<pre>{
  "authorized_ips":[
    "15.25.5.11"
  ]
}</pre>
</td>
<td>
<pre>{
  "authorized_ips":[
    "15.25.5.11",
    "1.1.1.1"
  ],
  "swap_interval":120
}</pre>
</td>
</tr>
</tbody>
</table>
</div>
<div class="su-tabs-pane su-u-clearfix su-u-trim" data-title="Python 3 + requests">
<div class="tab-content">
<div id="python_get_package_settings" class="tab-pane tab-padding active" role="tabpanel">
<pre>from proxy_api import *

api = ProxyAPI("https://app.privateproxy.me/api/v1","08c5fa8dd63c8adc4b08803df5f68f9d")
try:
  result = api.get("/package_subscriptions/1/settings")
  pprint.PrettyPrinter(indent=2).pprint(result)
except ProxyAPIException as e:
  print(str(e))</pre>
</div>
</div>
<p>Example response:</p>
<table class="table">
<tbody>
<tr>
<th>Proxy subscription</th>
<th>Backconnect subscription</th>
</tr>
<tr>
<td>
<pre>{
  "authorized_ips":[
    "15.25.5.11"
  ]
}</pre>
</td>
<td>
<pre>{
  "authorized_ips":[
    "15.25.5.11",
    "1.1.1.1"
  ],
  "swap_interval":120
}</pre>
</td>
</tr>
</tbody>
</table>
</div>
<div class="su-tabs-pane su-u-clearfix su-u-trim" data-title="&lt;strong&gt;PHP + libcurl&lt;/strong&gt;">
<div class="tab-content">
<div id="php_get_package_settings" class="tab-pane tab-padding active" role="tabpanel">
<pre>&lt;?php
require "proxy_api.php";

$api = new ProxyAPI('https://app.privateproxy.me/api/v1', '08c5fa8dd63c8adc4b08803df5f68f9d');

try {
  var_dump($api-&gt;get("/package_subscriptions/1/settings"));
} catch(ProxyAPIException $e) {
  echo $e;
}</pre>
</div>
</div>
<p>Example response:</p>
<table class="table">
<tbody>
<tr>
<th>Proxy subscription</th>
<th>Backconnect subscription</th>
</tr>
<tr>
<td>
<pre>{
  "authorized_ips":[
    "15.25.5.11"
  ]
}</pre>
</td>
<td>
<pre>{
  "authorized_ips":[
    "15.25.5.11",
    "1.1.1.1"
  ],
  "swap_interval":120
}</pre>
</td>
</tr>
</tbody>
</table>
</div>
<div class="su-tabs-pane su-u-clearfix su-u-trim" data-title="&lt;strong&gt;Node.js + stdlib&lt;/strong&gt;">
<div class="tab-content">
<div id="nodejs_get_package_settings" class="tab-pane tab-padding active" role="tabpanel">
<pre>const proxy_api = require('./proxy_api');

async function main() {
  const res = await proxy_api.get('https://app.privateproxy.me/api/v1/package_subscriptions/1/settings', '08c5fa8dd63c8adc4b08803df5f68f9d');
  if (res instanceof Error) {
    console.log("Error:" + res.toString());
  } else {
    console.log(res);
  }
}

main();</pre>
</div>
</div>
<p>Example response:</p>
<table class="table">
<tbody>
<tr>
<th>Proxy subscription</th>
<th>Backconnect subscription</th>
</tr>
<tr>
<td>
<pre>{
  "authorized_ips":[
    "15.25.5.11"
  ]
}</pre>
</td>
<td>
<pre>{
  "authorized_ips":[
    "15.25.5.11",
    "1.1.1.1"
  ],
  "swap_interval":120
}</pre>
</td>
</tr>
</tbody>
</table>
</div>
<div class="su-tabs-pane su-u-clearfix su-u-trim" data-title="&lt;strong&gt;Ruby + stdlib&lt;/strong&gt;">
<div class="tab-content">
<div id="ruby_get_package_settings" class="tab-pane tab-padding active" role="tabpanel">
<pre>require_relative './proxy_api'

begin
  api = ProxyAPI.new("https://app.privateproxy.me/api/v1", "08c5fa8dd63c8adc4b08803df5f68f9d")
  puts(api.get("/package_subscriptions/1/settings").inspect)
rescue ProxyAPIException =&gt; e
  puts e.message
end</pre>
</div>
</div>
<p>Example response:</p>
<table class="table">
<tbody>
<tr>
<th>Proxy subscription</th>
<th>Backconnect subscription</th>
</tr>
<tr>
<td>
<pre>{
  "authorized_ips":[
    "15.25.5.11"
  ]
}</pre>
</td>
<td>
<pre>{
  "authorized_ips":[
    "15.25.5.11",
    "1.1.1.1"
  ],
  "swap_interval":120
}</pre>
</td>
</tr>
</tbody>
</table>
</div>
<div class="su-tabs-pane su-u-clearfix su-u-trim" data-title="&lt;strong&gt;Golang + stdlib&lt;/strong&gt;">
<div class="tab-content">
<div id="golang_get_package_settings" class="tab-pane tab-padding active" role="tabpanel">
<pre>package main

import (
  "encoding/json"
  "fmt"
  "net/http"
)

type packageSettings struct {
  AuthorizedIPs []string `json:"authorized_ips"`

  //backconnect only
  SwapInterval int `json:"swap_interval"`
}

func main() {
  api := NewProxyAPI("https://app.privateproxy.me/api/v1", "08c5fa8dd63c8adc4b08803df5f68f9d", &http.Client{})

  resp, _, err := api.Get("/package_subscriptions/1/settings", nil)
  if err != nil {
    fmt.Println(err)
  } else {
    var ps packageSettings
    json.Unmarshal([]byte(resp), &ps)
    fmt.Println(ps)
  }
}</pre>
</div>
</div>
<p>Example response:</p>
<table class="table">
<tbody>
<tr>
<th>Proxy subscription</th>
<th>Backconnect subscription</th>
</tr>
<tr>
<td>
<pre>{
  "authorized_ips":[
    "15.25.5.11"
  ]
}</pre>
</td>
<td>
<pre>{
  "authorized_ips":[
    "15.25.5.11",
    "1.1.1.1"
  ],
  "swap_interval":120
}</pre>
</td>
</tr>
</tbody>
</table>
</div></div></div>
<hr />
<h2>Set Subscription Settings</h2>
<div>
<div class="pre-parent">
<div class="pre-description">This endpoint allows setting package specific settings, like authorized ips or swap interval(for backconnect).</div>
<div class="pre-params">
<table class="table table-condensed table-bordered">
<tbody>
<tr>
<td>Endpoint</td>
<td>/package_subscriptions/:id</td>
</tr>
<tr>
<td>Method</td>
<td>PUT</td>
</tr>
<tr>
<td>Necessary HTTP Headers</td>
<td>Content-Type: application/json</td>
</tr>
<tr>
<td>Parameters</td>
<td>id &#8211; id of subscription</td>
</tr>
<tr>
<td>Query parameters</td>
<td>None</td>
</tr>
<tr>
<td>JSON parameters</td>
<td>authorized_ips &#8211; list &#8211; authorized ips, that are allowed access to proxy without credentials<br />
swap_interval &#8211; integer &gt;= 0 &#8211; how often to change ip for backconnect proxies, 0 means change on every request. Ignored for normal proxy packages.</td>
</tr>
</tbody>
</table>
</div>
</div>
</div>
<div class="su-tabs su-tabs-style-default su-tabs-mobile-stack" data-active="6" data-scroll-offset="0" data-anchor-in-url="no"><div class="su-tabs-nav"><span class="" data-url="" data-target="blank" tabindex="0" role="button"><strong>curl in *nix shell</strong></span><span class="" data-url="" data-target="blank" tabindex="0" role="button"><strong>Python 3 + requests</strong></span><span class="" data-url="" data-target="blank" tabindex="0" role="button"><strong>PHP + libcurl</strong></span><span class="" data-url="" data-target="blank" tabindex="0" role="button"><strong>Node.js + stdlib</strong></span><span class="" data-url="" data-target="blank" tabindex="0" role="button"><strong>Ruby + stdlib</strong></span><span class="" data-url="" data-target="blank" tabindex="0" role="button">Golang + stdlib</span></div><div class="su-tabs-panes"><div class="su-tabs-pane su-u-clearfix su-u-trim" data-title="&lt;strong&gt;curl in *nix shell&lt;/strong&gt;">
<div class="tab-content">
<div id="curl_set_package_settings" class="tab-pane tab-padding active" role="tabpanel">
<pre>curl -X PUT -H "Content-Type: application/json" -u api:08c5fa8dd63c8adc4b08803df5f68f9d --data '{"swap_interval": 180, "authorized_ips":["1.1.1.1"]}' https://app.privateproxy.me/api/v1/package_subscriptions/1</pre>
</div>
</div>
<p>On success {&#8220;success&#8221;:true} JSON is returned, on error the hash will have success false and error will contain any errors:</p>
<pre>{
  "success": false,
  "error": "Authorized ips contain invalid IP 441.2.3.4 on line 1, Swap interval must be greater than or equal to 0"
}</pre>
</div>
<div class="su-tabs-pane su-u-clearfix su-u-trim" data-title="&lt;strong&gt;Python 3 + requests&lt;/strong&gt;">
<div class="tab-content">
<div id="python_set_package_settings" class="tab-pane tab-padding active" role="tabpanel">
<pre>from proxy_api import *

api = ProxyAPI("https://app.privateproxy.me/api/v1","08c5fa8dd63c8adc4b08803df5f68f9d")
try:
  result = api.put("/package_subscriptions/1", body = {'swap_interval': 180, 'authorized_ips': ['1.2.3.4', '2.5.6.7']})
  print(result)
  result = api.put("/package_subscriptions/1", body = {'swap_interval': -180, 'authorized_ips': ['441.2.3.4']})
  print(result)
except ProxyAPIException as e:
  print(str(e))</pre>
</div>
</div>
<p>On success {&#8220;success&#8221;:true} JSON is returned, on error the hash will have success false and error will contain any errors:</p>
<pre>{
  "success": false,
  "error": "Authorized ips contain invalid IP 441.2.3.4 on line 1, Swap interval must be greater than or equal to 0"
}</pre>
</div>
<div class="su-tabs-pane su-u-clearfix su-u-trim" data-title="&lt;strong&gt;PHP + libcurl&lt;/strong&gt;">
<div class="tab-content">
<div id="php_set_package_settings" class="tab-pane tab-padding active" role="tabpanel">
<pre>&lt;?php
require "proxy_api.php";

$api = new ProxyAPI('https://app.privateproxy.me/api/v1', '08c5fa8dd63c8adc4b08803df5f68f9d');

try {
  var_dump($api-&gt;put("/package_subscriptions/1", [
    "authorized_ips" =&gt; ["1.5.4.4", "1.5.6.7"],
    "swap_interval" =&gt; 3600
  ]));
  var_dump($api-&gt;put("/package_subscriptions/1", [
    "authorized_ips" =&gt; ["1.5.4.444", "1.5.6.7"],
    "swap_interval" =&gt; -3600
  ]));
} catch(ProxyAPIException $e) {
  echo $e;
}</pre>
</div>
</div>
<p>On success {&#8220;success&#8221;:true} JSON is returned, on error the hash will have success false and error will contain any errors:</p>
<pre>{
  "success": false,
  "error": "Authorized ips contain invalid IP 441.2.3.4 on line 1, Swap interval must be greater than or equal to 0"
}</pre>
</div>
<div class="su-tabs-pane su-u-clearfix su-u-trim" data-title="&lt;strong&gt;Node.js + stdlib&lt;/strong&gt;">
<div class="tab-content">
<div id="nodejs_set_package_settings" class="tab-pane tab-padding active" role="tabpanel">
<pre>const proxy_api = require('./proxy_api');

async function main() {
  const res = await proxy_api.put(
    'https://app.privateproxy.me/api/v1/package_subscriptions/1',
    '08c5fa8dd63c8adc4b08803df5f68f9d',
    {
      "authorized_ips": ["77.66.55.44", "1.87.31.3"],
      "swap_interval": 1200
    }
  );
  if (res instanceof Error) {
    console.log("Error:" + res.toString());
  } else {
    console.log(res);
  }
}

main();</pre>
</div>
</div>
<p>On success {&#8220;success&#8221;:true} JSON is returned, on error the hash will have success false and error will contain any errors:</p>
<pre>{
  "success": false,
  "error": "Authorized ips contain invalid IP 441.2.3.4 on line 1, Swap interval must be greater than or equal to 0"
}</pre>
</div>
<div class="su-tabs-pane su-u-clearfix su-u-trim" data-title="&lt;strong&gt;Ruby + stdlib&lt;/strong&gt;">
<div class="tab-content">
<div id="ruby_set_package_settings" class="tab-pane tab-padding active" role="tabpanel">
<pre>require_relative './proxy_api'

begin
  api = ProxyAPI.new("https://app.privateproxy.me/api/v1", "08c5fa8dd63c8adc4b08803df5f68f9d")
  puts(api.put("/package_subscriptions/1", authorized_ips: ['1.2.3.2'], swap_interval: 30).inspect)
  puts(api.put("/package_subscriptions/1", authorized_ips: ['412.2.3.2'], swap_interval: -30).inspect)
rescue ProxyAPIException =&gt; e
  puts e.message
end</pre>
</div>
</div>
<p>On success {&#8220;success&#8221;:true} JSON is returned, on error the hash will have success false and error will contain any errors:</p>
<pre>{
  "success": false,
  "error": "Authorized ips contain invalid IP 441.2.3.4 on line 1, Swap interval must be greater than or equal to 0"
}</pre>
</div>
<div class="su-tabs-pane su-u-clearfix su-u-trim" data-title="Golang + stdlib">
<div class="tab-content">
<div id="golang_set_package_settings" class="tab-pane tab-padding active" role="tabpanel">
<pre>package main

import (
  "fmt"
  "net/http"
  "strings"
)

func main() {
  api := NewProxyAPI("https://app.privateproxy.me/api/v1", "08c5fa8dd63c8adc4b08803df5f68f9d", &http.Client{})

  ips := strings.Join([]string{"1.2.3.1", "1.3.1.2", "1.1.1.1"}, "\",\"")
  settings := fmt.Sprintf("{\"authorized_ips\": [\"%s\"], \"swap_interval\": 4242}", ips)

  resp, _, err := api.Put("/package_subscriptions/1", settings)
  if err != nil {
    fmt.Println(err)
  } else {
    fmt.Println(resp)
  }

  ips = strings.Join([]string{"1.2.3.1", "1.3.1.2", "1.1.1.1000"}, "\",\"")
  settings = fmt.Sprintf("{\"authorized_ips\": [\"%s\"], \"swap_interval\": -4242}", ips)

  resp, _, err = api.Put("/package_subscriptions/1", settings)
  if err != nil {
    fmt.Println(err)
  } else {
    fmt.Println(resp)
  }
}</pre>
</div>
</div>
<p>On success {&#8220;success&#8221;:true} JSON is returned, on error the hash will have success false and error will contain any errors:</p>
<pre>{
  "success": false,
  "error": "Authorized ips contain invalid IP 441.2.3.4 on line 1, Swap interval must be greater than or equal to 0"
}</pre>
</div></div></div>
<hr />
<h2>Add Authorized IP</h2>
<div>
<div class="pre-parent">
<div class="pre-description">This endpoint allows adding a new authorized ip to the list of authorized ips without listing them all for convenience.</div>
<div class="pre-params">
<table class="table table-condensed table-bordered">
<tbody>
<tr>
<td>Endpoint</td>
<td>/package_subscriptions/:id/add_authorized_ip</td>
</tr>
<tr>
<td>Method</td>
<td>PUT</td>
</tr>
<tr>
<td>Necessary HTTP Headers</td>
<td>Content-Type: application/json</td>
</tr>
<tr>
<td>Parameters</td>
<td>id &#8211; id of subscription</td>
</tr>
<tr>
<td>Query parameters</td>
<td>None</td>
</tr>
<tr>
<td>JSON parameters</td>
<td>ip &#8211; string &#8211; ip to add</td>
</tr>
</tbody>
</table>
</div>
</div>
</div>
<div class="su-tabs su-tabs-style-default su-tabs-mobile-stack" data-active="6" data-scroll-offset="0" data-anchor-in-url="no"><div class="su-tabs-nav"><span class="" data-url="" data-target="blank" tabindex="0" role="button"><strong>curl in *nix shell</strong></span><span class="" data-url="" data-target="blank" tabindex="0" role="button"><strong>Python 3 + requests</strong></span><span class="" data-url="" data-target="blank" tabindex="0" role="button"><strong>PHP + libcurl</strong></span><span class="" data-url="" data-target="blank" tabindex="0" role="button"><strong>Node.js + stdlib</strong></span><span class="" data-url="" data-target="blank" tabindex="0" role="button"><strong>Ruby + stdlib</strong></span><span class="" data-url="" data-target="blank" tabindex="0" role="button"><strong>Golang + stdlib</strong></span></div><div class="su-tabs-panes"><div class="su-tabs-pane su-u-clearfix su-u-trim" data-title="&lt;strong&gt;curl in *nix shell&lt;/strong&gt;">
<pre>curl -X PUT -H "Content-Type: application/json" -u api:08c5fa8dd63c8adc4b08803df5f68f9d --data '{"ip": "1.1.1.1"}' https://app.privateproxy.me/api/v1/package_subscriptions/1/add_authorized_ip</pre>
</div>
<div class="su-tabs-pane su-u-clearfix su-u-trim" data-title="&lt;strong&gt;Python 3 + requests&lt;/strong&gt;">
<pre>from proxy_api import *

api = ProxyAPI("https://app.privateproxy.me/api/v1","08c5fa8dd63c8adc4b08803df5f68f9d")
try:
  result = api.put("/package_subscriptions/1/add_authorized_ip", body = {'ip': '121.23.1.25'})
  print(result)
  result = api.put("/package_subscriptions/1/add_authorized_ip", body = {'ip': '266.1.2.3'})
  print(result)
except ProxyAPIException as e:
  print(str(e))</pre>
</div>
<div class="su-tabs-pane su-u-clearfix su-u-trim" data-title="&lt;strong&gt;PHP + libcurl&lt;/strong&gt;">
<pre>&lt;?php
require "proxy_api.php";

$api = new ProxyAPI('https://app.privateproxy.me/api/v1', '08c5fa8dd63c8adc4b08803df5f68f9d');

try {
  var_dump($api-&gt;put("/package_subscriptions/1/add_authorized_ip", [
    "ip" =&gt; "7.7.7.7"
  ]));
} catch(ProxyAPIException $e) {
  echo $e;
}</pre>
</div>
<div class="su-tabs-pane su-u-clearfix su-u-trim" data-title="&lt;strong&gt;Node.js + stdlib&lt;/strong&gt;">
<pre>const proxy_api = require('./proxy_api');

async function main() {
  const res = await proxy_api.put(
    'https://app.privateproxy.me/api/v1/package_subscriptions/1/add_authorized_ip',
    '08c5fa8dd63c8adc4b08803df5f68f9d',
    {
      "ip": "1.2.3.4"
    }
  );
  if (res instanceof Error) {
    console.log("Error:" + res.toString());
  } else {
    console.log(res);
  }
}

main();</pre>
</div>
<div class="su-tabs-pane su-u-clearfix su-u-trim" data-title="&lt;strong&gt;Ruby + stdlib&lt;/strong&gt;">
<pre>require_relative './proxy_api'

begin
  api = ProxyAPI.new("https://app.privateproxy.me/api/v1", "08c5fa8dd63c8adc4b08803df5f68f9d")
  puts(api.put("/package_subscriptions/1/add_authorized_ip", ip: '1.2.3.2').inspect)
  puts(api.put("/package_subscriptions/1/add_authorized_ip", ip: '412.2.3.2').inspect)
rescue ProxyAPIException =&gt; e
  puts e.message
end</pre>
</div>
<div class="su-tabs-pane su-u-clearfix su-u-trim" data-title="&lt;strong&gt;Golang + stdlib&lt;/strong&gt;">
<pre>package main

import (
  "fmt"
  "net/http"
)

func main() {
  api := NewProxyAPI("https://app.privateproxy.me/api/v1", "08c5fa8dd63c8adc4b08803df5f68f9d", &http.Client{})

  ip := "{\"ip\": \"1.7.2.5\"}"
  resp, _, err := api.Put("/package_subscriptions/1/add_authorized_ip", ip)
  if err != nil {
    fmt.Println(err)
  } else {
    fmt.Println(resp)
  }
}</pre>
</div></div></div>
<hr />
<h2>Remove Authorized IP</h2>
<div>
<div class="pre-parent">
<div class="pre-description">This endpoint allows removing authorized ip without listing them all for convenience. This endpoint returns error if no ip provided, otherwise it always succeeds, even if no IP was removed.</div>
<div class="pre-params">
<table class="table table-condensed table-bordered">
<tbody>
<tr>
<td>Endpoint</td>
<td>/package_subscriptions/:id/remove_authorized_ip</td>
</tr>
<tr>
<td>Method</td>
<td>PUT</td>
</tr>
<tr>
<td>Necessary HTTP Headers</td>
<td>Content-Type: application/json</td>
</tr>
<tr>
<td>Parameters</td>
<td>id &#8211; id of subscription</td>
</tr>
<tr>
<td>Query parameters</td>
<td>None</td>
</tr>
<tr>
<td>JSON parameters</td>
<td>ip &#8211; string &#8211; ip to remove</td>
</tr>
</tbody>
</table>
</div>
</div>
</div>
<div class="su-tabs su-tabs-style-default su-tabs-mobile-stack" data-active="6" data-scroll-offset="0" data-anchor-in-url="no"><div class="su-tabs-nav"><span class="" data-url="" data-target="blank" tabindex="0" role="button"><strong>curl in *nix shell</strong></span><span class="" data-url="" data-target="blank" tabindex="0" role="button"><strong>Python 3 + requests</strong></span><span class="" data-url="" data-target="blank" tabindex="0" role="button"><strong>PHP + libcurl</strong></span><span class="" data-url="" data-target="blank" tabindex="0" role="button"><strong>Node.js + stdlib</strong></span><span class="" data-url="" data-target="blank" tabindex="0" role="button"><strong>Ruby + stdlib</strong></span><span class="" data-url="" data-target="blank" tabindex="0" role="button"><strong>Golang + stdlib</strong></span></div><div class="su-tabs-panes"><div class="su-tabs-pane su-u-clearfix su-u-trim" data-title="&lt;strong&gt;curl in *nix shell&lt;/strong&gt;">
<pre>curl -X PUT -H "Content-Type: application/json" -u api:08c5fa8dd63c8adc4b08803df5f68f9d --data '{"ip": "1.1.1.1"}' https://app.privateproxy.me/api/v1/package_subscriptions/1/remove_authorized_ip</pre>
</div>
<div class="su-tabs-pane su-u-clearfix su-u-trim" data-title="&lt;strong&gt;Python 3 + requests&lt;/strong&gt;">
<pre>from proxy_api import *

api = ProxyAPI("https://app.privateproxy.me/api/v1","08c5fa8dd63c8adc4b08803df5f68f9d")
try:
  result = api.put("/package_subscriptions/1/remove_authorized_ip", body = {'ip': '121.23.1.25'})
  print(result)
except ProxyAPIException as e:
  print(str(e))</pre>
</div>
<div class="su-tabs-pane su-u-clearfix su-u-trim" data-title="&lt;strong&gt;PHP + libcurl&lt;/strong&gt;">
<pre>&lt;?php
require "proxy_api.php";

$api = new ProxyAPI('https://app.privateproxy.me/api/v1', '08c5fa8dd63c8adc4b08803df5f68f9d');

try {
  var_dump($api-&gt;put("/package_subscriptions/1/remove_authorized_ip", [
    "ip" =&gt; "7.7.7.7"
  ]));
} catch(ProxyAPIException $e) {
  echo $e;
}</pre>
</div>
<div class="su-tabs-pane su-u-clearfix su-u-trim" data-title="&lt;strong&gt;Node.js + stdlib&lt;/strong&gt;">
<pre>const proxy_api = require('./proxy_api');

async function main() {
  const res = await proxy_api.put(
    'https://app.privateproxy.me/api/v1/package_subscriptions/1/remove_authorized_ip',
    '08c5fa8dd63c8adc4b08803df5f68f9d',
    {
      "ip": "1.2.3.4"
    }
  );
  if (res instanceof Error) {
    console.log("Error:" + res.toString());
  } else {
    console.log(res);
  }
}

main();</pre>
</div>
<div class="su-tabs-pane su-u-clearfix su-u-trim" data-title="&lt;strong&gt;Ruby + stdlib&lt;/strong&gt;">
<pre>require_relative './proxy_api'

begin
  api = ProxyAPI.new("https://app.privateproxy.me/api/v1", "08c5fa8dd63c8adc4b08803df5f68f9d")
  puts(api.put("/package_subscriptions/1/add_authorized_ip", ip: '11.22.33.212').inspect)
rescue ProxyAPIException =&gt; e
  puts e.message
end</pre>
</div>
<div class="su-tabs-pane su-u-clearfix su-u-trim" data-title="&lt;strong&gt;Golang + stdlib&lt;/strong&gt;">
<pre>package main

import (
  "fmt"
  "net/http"
)

func main() {
  api := NewProxyAPI("https://app.privateproxy.me/api/v1", "08c5fa8dd63c8adc4b08803df5f68f9d", &http.Client{})

  ip := "{\"ip\": \"1.7.2.5\"}"
  resp, _, err := api.Put("/package_subscriptions/1/remove_authorized_ip", ip)
  if err != nil {
    fmt.Println(err)
  } else {
    fmt.Println(resp)
  }
}</pre>
</div></div></div>
]]></content:encoded>
					
					<wfw:commentRss>https://proxysp.com/how-to-use-privateproxy-me-api/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">10980</post-id>	</item>
		<item>
		<title>How to Use PrivateProxy.me Backconnect Proxy</title>
		<link>https://proxysp.com/privateproxy-me-backconnect-proxy/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=privateproxy-me-backconnect-proxy</link>
					<comments>https://proxysp.com/privateproxy-me-backconnect-proxy/#respond</comments>
		
		<dc:creator><![CDATA[proxysp]]></dc:creator>
		<pubDate>Wed, 22 Feb 2023 04:22:55 +0000</pubDate>
				<category><![CDATA[Manuals]]></category>
		<guid isPermaLink="false">https://www.proxysp.com/?p=10973</guid>

					<description><![CDATA[Do you know how to use PrivateProxy.me Backconnect Proxy? This is the most comprehensive introduction from PrivateProxy.me official. Usage Examples In Different Languages http://api.privateproxy.me:10738 &#8211; shows &#8230;<p class="read-more"> <a class="ast-button" href="https://proxysp.com/privateproxy-me-backconnect-proxy/"> <span class="screen-reader-text">How to Use PrivateProxy.me Backconnect Proxy</span> Read More &#187;</a></p>]]></description>
										<content:encoded><![CDATA[<blockquote><p>Do you know how to use <a href="https://app.privateproxy.me/from/662" target="_blank" rel="nofollow noopener">PrivateProxy.me</a> Backconnect Proxy? This is the most comprehensive introduction from PrivateProxy.me official.</p></blockquote>
<h2>Usage Examples In Different Languages</h2>
<div class="su-tabs su-tabs-style-default su-tabs-mobile-stack" data-active="7" data-scroll-offset="0" data-anchor-in-url="no"><div class="su-tabs-nav"><span class="" data-url="" data-target="blank" tabindex="0" role="button"><strong>curl in *nix shell</strong></span><span class="" data-url="" data-target="blank" tabindex="0" role="button"><strong>Python 3 + requests</strong></span><span class="" data-url="" data-target="blank" tabindex="0" role="button"><strong>PHP + libcurl</strong></span><span class="" data-url="" data-target="blank" tabindex="0" role="button"><strong>Node.js + stdlib</strong></span><span class="" data-url="" data-target="blank" tabindex="0" role="button"><strong>Ruby + stdlib</strong></span><span class="" data-url="" data-target="blank" tabindex="0" role="button"><strong>Golang + stdlib</strong></span><span class="" data-url="" data-target="blank" tabindex="0" role="button"><strong>C# + stdlib</strong></span></div><div class="su-tabs-panes"><div class="su-tabs-pane su-u-clearfix su-u-trim" data-title="&lt;strong&gt;curl in *nix shell&lt;/strong&gt;">
<pre>curl -x http://login:password@1.1.1.1:5432 http://api.privateproxy.me:10738 #1.1.1.1</pre>
</div>
<div class="su-tabs-pane su-u-clearfix su-u-trim" data-title="&lt;strong&gt;Python 3 + requests&lt;/strong&gt;">
<pre>import requests
proxies = {
  'http': 'http://login:password@1.1.1.1:5432',
  'https': 'http://login:password@1.1.1.1:5432'
}
response = requests.get('http://api.privateproxy.me:10738', proxies=proxies)
// response.text = "1.1.1.1\\n"</pre>
</div>
<div class="su-tabs-pane su-u-clearfix su-u-trim" data-title="&lt;strong&gt;PHP + libcurl&lt;/strong&gt;">
<pre>$ch = curl_init();
curl_setopt($ch, CURLOPT_URL,"http://api.privateproxy.me:10738");
curl_setopt($ch, CURLOPT_PROXY, "1.1.1.1:5432");
curl_setopt($ch, CURLOPT_PROXYUSERPWD, "login:password");
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_HEADER, 1);
$curl_scraped_page = curl_exec($ch);
curl_close($ch);

echo $curl_scraped_page; // "1.1.1.1\\n"</pre>
</div>
<div class="su-tabs-pane su-u-clearfix su-u-trim" data-title="&lt;strong&gt;Node.js + stdlib&lt;/strong&gt;">
<pre>const http = require('http');
const https = require('https');

function getWithProxy(url, proxy) {
  const parsedUrl = new URL(url);
  const proxy_ip = proxy['ip']
  const proxy_port = proxy['port']
  const proxy_auth = 'Basic ' + Buffer.from(proxy['login'] + ':' + proxy['password']).toString('base64')

  let host = parsedUrl.hostname;
  if (parsedUrl.port !== '') {
    host += ':' + parsedUrl.port;
  } else {
    if (parsedUrl.protocol == 'http:') {
      host += ':80';
    } else if(parsedUrl.protocol == 'https:') {
      host += ':443';
    }
  }
  const res = new Promise((resolve, reject) =&gt; {
    http.request({
      port:   proxy_port,
      host:   proxy_ip,
      method: 'CONNECT',
      path:   host,
      headers: {
        'Host': host,
        'Proxy-Authorization': proxy_auth
      }
    }).on('connect', (res, socket, head) =&gt; {
      if (res.statusCode !== 200) {
        reject(new Error(`Non-200 status code returned from proxy: ${res.statusCode} ${res.statusMessage}`));
        return;
      }
      let t, real_opts = {};
      if (parsedUrl.protocol == "http:") {
        real_opts['createConnection'] = () =&gt; socket
        t = http;
      } else {
        real_opts['socket'] = socket;
        t = https;
      }
      const real_req = t.request(url, real_opts, (res) =&gt; {
        res.setEncoding('utf-8')
        let rawData = []
        res.on('data', (chunk) =&gt; rawData.push(chunk));
        res.on('end', () =&gt; resolve(rawData.join('')));
      });
      real_req.on('error', (e) =&gt; reject(e));
      real_req.end();
    }).end();
  });

  return res;
}

getWithProxy("https://httpbin.org/ip", {
  ip: '1.1.1.1',
  port: 5432,
  login: 'login',
  password: 'password'
}).then(
    (data) =&gt; console.log(data.trim()),
    (e) =&gt; console.log("Error: " + e.toString())
).then(
  () =&gt; getWithProxy("http://api.privateproxy.me:10738", {
    ip: '1.1.1.1',
    port: 5432,
    login: 'login',
    password: 'password'
  })
).then(
  (data) =&gt; console.log(data.trim()),
  (e) =&gt; console.log("Error: " + e.toString())
)</pre>
</div>
<div class="su-tabs-pane su-u-clearfix su-u-trim" data-title="&lt;strong&gt;Ruby + stdlib&lt;/strong&gt;">
<pre>require 'net/http'

resp = Net::HTTP.start("api.privateproxy.me", 10738, "1.1.1.1", "5432", "login", "password") do |h|
  request = Net::HTTP::Get.new('/')
  h.request(request)
end

puts resp.body # "1.1.1.1\\n"</pre>
</div>
<div class="su-tabs-pane su-u-clearfix su-u-trim" data-title="&lt;strong&gt;Golang + stdlib&lt;/strong&gt;">
<pre>package main

import (
  "fmt"
  "io/ioutil"
  "net/http"
  "net/url"
  "time"
)

func main() {
  proxy, err := url.Parse("http://login:password@1.1.1.1:5432")
  if err != nil {
    return
  }
  proxyFunc := http.ProxyURL(proxy)
  tr := &http.Transport{
    MaxIdleConns:       10,
    IdleConnTimeout:    30 * time.Second,
    DisableCompression: true,
    Proxy:              proxyFunc,
  }
  client := &http.Client{
    Transport: tr,
  }
  resp, err := client.Get("http://api.privateproxy.me:10738")
  if err != nil {
    return
  }
  defer resp.Body.Close()
  bytes, err := ioutil.ReadAll(resp.Body)
  if err != nil {
    return
  }
  fmt.Print(string(bytes)) // "1.1.1.1\\n"
}</pre>
</div>
<div class="su-tabs-pane su-u-clearfix su-u-trim" data-title="&lt;strong&gt;C# + stdlib&lt;/strong&gt;">
<pre>var handler = new HttpClientHandler();
handler.Proxy = new WebProxy("http://login:password@1.1.1.1:5432/");

using (var httpClient = new HttpClient(handler))
{
  using (var request = new HttpRequestMessage(new HttpMethod("GET"), "http://api.privateproxy.me:10738"))
  {
    var response = await httpClient.SendAsync(request);
    // response.Content - "1.1.1.1\\n"
  }
}</pre>
</div></div></div>
<p>http://api.privateproxy.me:10738 &#8211; shows your current IP address in text mode</p>
<p>There is no difference in using backconnect or normal proxies. Backconnect proxies act just like normal proxies, except target site sees different ips, depending on swap interval setting/manual swap.</p>
<p>You don't need to specify credentials if you've added your IP address to the authorized IPs list. Authorizing your IP isn't mandatory, you can continue using credentials authorization, whichever is more convenient.</p>
<p>If you're writing your own software to access some site, please add headers like User-Agent so that request looks like it came from a browser.</p>
<hr />
<h2>Browser Usage Recommendations</h2>
<div>
<ul>
<li>Turn off WebRTC, it can be used to spoil your real IP address even if you're using a proxy server, and even your local intranet IP address. Here's a link to a guide for disabling it for different browsers: <a href="https://www.vpnunlimitedapp.com/blog/how-to-disable-webrtc-in-chrome-and-other-browsers" target="_blank" rel="nofollow noopener">https://www.vpnunlimitedapp.com/blog/how-to-disable-webrtc-in-chrome-and-other-browsers</a></li>
<li>Use tracker disabling addons like ghostery for chrome, sites can still identify you by your browser fingerprint.</li>
<li>If possible set your local computer time to the proxy server timezone.</li>
<li>If using backconnect, it's better to set swap interval to 5 or more minutes, so that you don't get IP changes too often.</li>
</ul>
</div>
<hr />
<h2>Using Proxies with Python-Selenium</h2>
<h3>python-selenium + Firefox(geckodriver)</h3>
<p>To use selenium with firefox you will need to install these items:</p>
<ul>
<li><a href="https://pypi.org/project/selenium/" target="_blank" rel="nofollow noopener">https://pypi.org/project/selenium/</a></li>
<li>geckodriver: <a href="https://github.com/mozilla/geckodriver/releases" target="_blank" rel="nofollow noopener">https://github.com/mozilla/geckodriver/releases</a></li>
<li>An installed Firefox instance</li>
</ul>
<p>If you're using auth by credentials, you'll also need:</p>
<ul>
<li><a href="https://pypi.org/project/selenium-wire/" target="_blank" rel="nofollow noopener">https://pypi.org/project/selenium-wire/</a></li>
</ul>
<p>Example, that uses proxy credentials:</p>
<pre>from seleniumwire import webdriver
from selenium.webdriver.firefox.firefox_binary import FirefoxBinary
from selenium.webdriver.firefox.options import Options
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC

path_to_firefox_binary = '' # !!! set this variable !!!
path_to_geckodriver_binary = '' # !!! set this variable !!!

wire_options = {
  'proxy': {
    'http': 'http://login:password@1.1.1.1:5432',
    'https': 'http://login:password@1.1.1.1:5432',
    'no_proxy': 'localhost,127.0.0.1'
  }
}
binary = FirefoxBinary(path_to_firefox_binary)

options = Options()
options.headless = True
browser = webdriver.Firefox(
  options=options,
  firefox_binary=binary,
  executable_path=path_to_geckodriver_binary,
  seleniumwire_options=wire_options
)

browser.get("http://api.privateproxy.me:10738")
element = WebDriverWait(browser, 10).until(
  EC.visibility_of_element_located((By.CSS_SELECTOR, "pre"))
)
print(element.text)
browser.quit()</pre>
<p>Example, that uses ip authorization:</p>
<pre>from selenium import webdriver
from selenium.webdriver.firefox.firefox_binary import FirefoxBinary
from selenium.webdriver.firefox.options import Options
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC

path_to_firefox_binary = '' # !!! set this variable !!!
path_to_geckodriver_binary = '' # !!! set this variable !!!
proxy_ip = '1.1.1.1'
proxy_port = 5432

profile = webdriver.FirefoxProfile()
profile.set_preference("network.proxy.type", 1)
profile.set_preference("network.proxy.http", proxy_ip)
profile.set_preference("network.proxy.http_port", proxy_port)
profile.set_preference("network.proxy.ssl", proxy_ip)
profile.set_preference("network.proxy.ssl_port", proxy_port)
profile.update_preferences()

binary = FirefoxBinary(path_to_firefox_binary)
options = Options()
options.headless = True
browser = webdriver.Firefox(
  options=options,
  firefox_binary=binary,
  executable_path=path_to_geckodriver_binary,
  firefox_profile=profile
)
browser.get("http://api.privateproxy.me:10738")
element = WebDriverWait(browser, 10).until(
  EC.visibility_of_element_located((By.CSS_SELECTOR, "pre"))
)
print(element.text)
browser.quit()</pre>
<p>Both examples launch firefox in headless mode, so the browser will stay hidden during execution of those examples.</p>
<hr />
<h3>python-selenium + Chrome(chromedriver)</h3>
<p>To use selenium with chrome you will need to install these items:</p>
<ul>
<li><a href="https://pypi.org/project/selenium/" target="_blank" rel="nofollow noopener">https://pypi.org/project/selenium/</a></li>
<li>cromedriver: <a href="https://chromedriver.chromium.org/downloads" target="_blank" rel="nofollow noopener">https://chromedriver.chromium.org/downloads</a></li>
<li>An installed Chrome instance</li>
</ul>
<p>Example that uses credentials authorization:</p>
<pre>import os
import zipfile
import hashlib
from selenium import webdriver
from selenium.webdriver.chrome.options import Options
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC

proxy = "1.1.1.1:5432"
credentials = "login:password"
path_to_chrome_binary = '' !!! set this variable !!!
path_to_chromedriver_binary = '' !!! set this variable !!!

def generate_extension(proxy, credentials):
  ip, port = proxy.split(':')
  login, password = credentials.split(':')
  manifest_json = """
  {
      "version": "1.0.0",
      "manifest_version": 2,
      "name": "Chrome Proxy",
      "permissions": [
          "proxy",
          "tabs",
          "unlimitedStorage",
          "storage",
          "",
          "webRequest",
          "webRequestBlocking"
      ],
      "background": {
          "scripts": ["background.js"]
      },
      "minimum_chrome_version":"22.0.0"
  }
  """

  background_js = """
  var config = {
          mode: "fixed_servers",
          rules: {
          singleProxy: {
              scheme: "http",
              host: "%s",
              port: parseInt(%s)
          },
          bypassList: ["localhost"]
          }
      };

  chrome.proxy.settings.set({value: config, scope: "regular"}, function() {});

  function callbackFn(details) {
      return {
          authCredentials: {
              username: "%s",
              password: "%s"
          }
      };
  }

  chrome.webRequest.onAuthRequired.addListener(
              callbackFn,
              {urls: [""]},
              ['blocking']
  );
  """ % (ip, port, login, password)

  sha1 = hashlib.sha1()
  sha1.update(("%s:%s" % (proxy, credentials)).encode('utf-8'))
  filename = sha1.hexdigest() + ".zip"

  with zipfile.ZipFile(filename, 'w') as zp:
    zp.writestr("manifest.json", manifest_json)
    zp.writestr("background.js", background_js)

  return filename

extension_name = generate_extension(proxy, credentials)
options = Options()
options.binary_location = path_to_chrome_binary
options.add_extension(extension_name)
driver = webdriver.Chrome(
  executable_path = path_to_chromedriver_binary,
  options=options,
)
driver.get('http://api.privateproxy.me:10738/')
element = WebDriverWait(driver, 30).until(
  EC.visibility_of_element_located((By.CSS_SELECTOR, "pre"))
)
print(element.text)
driver.quit()
os.remove(extension_name)</pre>
<p>Unfortunately, there are limitations while using credentials:</p>
<ul>
<li>No headless mode</li>
<li>For each proxy + credentials set an extension must be generated and stored. We were not able to find an easier way.</li>
</ul>
<p>Example that uses ip authorization:</p>
<pre>from selenium import webdriver
from selenium.webdriver.chrome.options import Options
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC

path_to_chrome_binary = '' # !!! set this variable !!!
path_to_chromedriver_binary = '' # !!! set this variable !!!
proxy = "1.1.1.1:5432"

options = Options()
options.binary_location = path_to_chrome_binary
options.headless = True
options.add_argument("--proxy-server=%s" % proxy)

driver = webdriver.Chrome(
  executable_path = path_to_chromedriver_binary,
  options=options,
)
driver.get('http://api.privateproxy.me:10738/')
element = WebDriverWait(driver, 30).until(
  EC.visibility_of_element_located((By.CSS_SELECTOR, "pre"))
)
print(element.text)
driver.quit()</pre>
<hr />
<h2>Using Proxies with Node.JS Puppeteer</h2>
<p><strong>Puppeteer + Node.js + chrome</strong></p>
<p>Currently we only have an example of how to use proxy with puppeteer and chrome.</p>
<p>For this you will need to install puppeteer with env variable PUPPETEER_PRODUCT=chrome:</p>
<pre>PUPPETEER_PRODUCT=chrome npm install puppeteer</pre>
<p>You will also need proxy-chain package:</p>
<pre>npm install proxy-chain</pre>
<p>Sample code:</p>
<pre>const puppeteer = require('puppeteer');
const proxyChain = require('proxy-chain');

(async() =&gt; {
  const oldProxyUrl = 'http://login:password@1.1.1.1:5432';
  const newProxyUrl = await proxyChain.anonymizeProxy(oldProxyUrl);

  const browser = await puppeteer.launch({
    args: [`--proxy-server=${newProxyUrl}`],
  });

  const page = await browser.newPage();
  await page.goto('https://httpbin.org/ip');
  const element = await page.$('pre');
  const text = await page.evaluate(element =&gt; element.textContent, element);
  console.log(text);
  await browser.close();

  await proxyChain.closeAnonymizedProxy(newProxyUrl, true);
})();</pre>
]]></content:encoded>
					
					<wfw:commentRss>https://proxysp.com/privateproxy-me-backconnect-proxy/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">10973</post-id>	</item>
		<item>
		<title>How to Use PrivateProxy.me Proxy</title>
		<link>https://proxysp.com/privateproxy-me-proxy/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=privateproxy-me-proxy</link>
					<comments>https://proxysp.com/privateproxy-me-proxy/#respond</comments>
		
		<dc:creator><![CDATA[proxysp]]></dc:creator>
		<pubDate>Wed, 22 Feb 2023 03:43:07 +0000</pubDate>
				<category><![CDATA[Manuals]]></category>
		<guid isPermaLink="false">https://www.proxysp.com/?p=10959</guid>

					<description><![CDATA[Do you know how to use PrivateProxy.me Proxy? This is the most comprehensive introduction from PrivateProxy.me official. Usage Examples In Different Languages Warning: these examples are &#8230;<p class="read-more"> <a class="ast-button" href="https://proxysp.com/privateproxy-me-proxy/"> <span class="screen-reader-text">How to Use PrivateProxy.me Proxy</span> Read More &#187;</a></p>]]></description>
										<content:encoded><![CDATA[<blockquote><p>Do you know how to use <a href="https://app.privateproxy.me/from/662" target="_blank" rel="nofollow noopener">PrivateProxy.me</a> Proxy? This is the most comprehensive introduction from PrivateProxy.me official.</p></blockquote>
<h2>Usage Examples In Different Languages</h2>
<p><em><strong>Warning:</strong> these examples are meant to demonstrate that the proxies work. Do not use in production without extensive modifications.</em></p>
<div class="su-tabs su-tabs-style-default su-tabs-mobile-stack" data-active="7" data-scroll-offset="0" data-anchor-in-url="no"><div class="su-tabs-nav"><span class="" data-url="" data-target="blank" tabindex="0" role="button"><strong>curl in *nix shell</strong></span><span class="" data-url="" data-target="blank" tabindex="0" role="button"><strong>Python 3 + requests</strong></span><span class="" data-url="" data-target="blank" tabindex="0" role="button"><strong>PHP + libcurl</strong></span><span class="" data-url="" data-target="blank" tabindex="0" role="button"><strong>Node.js + stdlib</strong></span><span class="" data-url="" data-target="blank" tabindex="0" role="button"><strong>Ruby + stdlib</strong></span><span class="" data-url="" data-target="blank" tabindex="0" role="button"><strong>Golang+stdlib</strong></span><span class="" data-url="" data-target="blank" tabindex="0" role="button"><strong>C# + stdlib</strong></span></div><div class="su-tabs-panes"><div class="su-tabs-pane su-u-clearfix su-u-trim" data-title="&lt;strong&gt;curl in *nix shell&lt;/strong&gt;">
<div class="tab-content">
<div id="curl_proxy_usage" class="tab-pane tab-padding active" role="tabpanel">
<pre>curl -x http://pvtyproxies:ajd89akjdAdk@2.57.20.194:5432 http://api.privateproxy.me:10738 #2.57.20.194</pre>
</div>
</div>
</div>
<div class="su-tabs-pane su-u-clearfix su-u-trim" data-title="&lt;strong&gt;Python 3 + requests&lt;/strong&gt;">
<pre>import requests
proxies = {
  'http': 'http://pvtyproxies:ajd89akjdAdk@2.57.20.194:5432',
  'https': 'http://pvtyproxies:ajd89akjdAdk@2.57.20.194:5432'
}
response = requests.get('http://api.privateproxy.me:10738', proxies=proxies)
// response.text = "2.57.20.194\\n"</pre>
</div>
<div class="su-tabs-pane su-u-clearfix su-u-trim" data-title="&lt;strong&gt;PHP + libcurl&lt;/strong&gt;">
<pre>$ch = curl_init();
curl_setopt($ch, CURLOPT_URL,"http://api.privateproxy.me:10738");
curl_setopt($ch, CURLOPT_PROXY, "2.57.20.194:5432");
curl_setopt($ch, CURLOPT_PROXYUSERPWD, "pvtyproxies:ajd89akjdAdk");
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_HEADER, 1);
$curl_scraped_page = curl_exec($ch);
curl_close($ch);

echo $curl_scraped_page; // "2.57.20.194\\n"</pre>
</div>
<div class="su-tabs-pane su-u-clearfix su-u-trim" data-title="&lt;strong&gt;Node.js + stdlib&lt;/strong&gt;">
<pre>const http = require('http');
const https = require('https');

function getWithProxy(url, proxy) {
  const parsedUrl = new URL(url);
  const proxy_ip = proxy['ip']
  const proxy_port = proxy['port']
  const proxy_auth = 'Basic ' + Buffer.from(proxy['login'] + ':' + proxy['password']).toString('base64')

  let host = parsedUrl.hostname;
  if (parsedUrl.port !== '') {
    host += ':' + parsedUrl.port;
  } else {
    if (parsedUrl.protocol == 'http:') {
      host += ':80';
    } else if(parsedUrl.protocol == 'https:') {
      host += ':443';
    }
  }
  const res = new Promise((resolve, reject) =&gt; {
    http.request({
      port:   proxy_port,
      host:   proxy_ip,
      method: 'CONNECT',
      path:   host,
      headers: {
        'Host': host,
        'Proxy-Authorization': proxy_auth
      }
    }).on('connect', (res, socket, head) =&gt; {
      if (res.statusCode !== 200) {
        reject(new Error(`Non-200 status code returned from proxy: ${res.statusCode} ${res.statusMessage}`));
        return;
      }
      let t, real_opts = {};
      if (parsedUrl.protocol == "http:") {
        real_opts['createConnection'] = () =&gt; socket
        t = http;
      } else {
        real_opts['socket'] = socket;
        t = https;
      }
      const real_req = t.request(url, real_opts, (res) =&gt; {
        res.setEncoding('utf-8')
        let rawData = []
        res.on('data', (chunk) =&gt; rawData.push(chunk));
        res.on('end', () =&gt; resolve(rawData.join('')));
      });
      real_req.on('error', (e) =&gt; reject(e));
      real_req.end();
    }).end();
  });

  return res;
}

getWithProxy("https://httpbin.org/ip", {
  ip: '2.57.20.194',
  port: 5432,
  login: 'pvtyproxies',
  password: 'ajd89akjdAdk'
}).then(
    (data) =&gt; console.log(data.trim()),
    (e) =&gt; console.log("Error: " + e.toString())
).then(
  () =&gt; getWithProxy("http://api.privateproxy.me:10738", {
    ip: '2.57.20.194',
    port: 5432,
    login: 'pvtyproxies',
    password: 'ajd89akjdAdk'
  })
).then(
  (data) =&gt; console.log(data.trim()),
  (e) =&gt; console.log("Error: " + e.toString())
)</pre>
</div>
<div class="su-tabs-pane su-u-clearfix su-u-trim" data-title="&lt;strong&gt;Ruby + stdlib&lt;/strong&gt;">
<pre>require 'net/http'

resp = Net::HTTP.start("api.privateproxy.me", 10738, "2.57.20.194", "5432", "pvtyproxies", "ajd89akjdAdk") do |h|
  request = Net::HTTP::Get.new('/')
  h.request(request)
end

puts resp.body # "2.57.20.194\\n"</pre>
</div>
<div class="su-tabs-pane su-u-clearfix su-u-trim" data-title="&lt;strong&gt;Golang+stdlib&lt;/strong&gt;">
<pre>package main

import (
  "fmt"
  "io/ioutil"
  "net/http"
  "net/url"
  "time"
)

func main() {
  proxy, err := url.Parse("http://pvtyproxies:ajd89akjdAdk@2.57.20.194:5432")
  if err != nil {
    return
  }
  proxyFunc := http.ProxyURL(proxy)
  tr := &http.Transport{
    MaxIdleConns:       10,
    IdleConnTimeout:    30 * time.Second,
    DisableCompression: true,
    Proxy:              proxyFunc,
  }
  client := &http.Client{
    Transport: tr,
  }
  resp, err := client.Get("http://api.privateproxy.me:10738")
  if err != nil {
    return
  }
  defer resp.Body.Close()
  bytes, err := ioutil.ReadAll(resp.Body)
  if err != nil {
    return
  }
  fmt.Print(string(bytes)) // "2.57.20.194\\n"
}</pre>
</div>
<div class="su-tabs-pane su-u-clearfix su-u-trim" data-title="&lt;strong&gt;C# + stdlib&lt;/strong&gt;">
<pre>var handler = new HttpClientHandler();
handler.Proxy = new WebProxy("http://pvtyproxies:ajd89akjdAdk@2.57.20.194:5432/");

using (var httpClient = new HttpClient(handler))
{
  using (var request = new HttpRequestMessage(new HttpMethod("GET"), "http://api.privateproxy.me:10738"))
  {
    var response = await httpClient.SendAsync(request);
    // response.Content - "2.57.20.194\\n"
  }
}</pre>
</div></div></div>
<div>
<p>http://api.privateproxy.me:10738 &#8211; shows your current IP address in text mode</p>
<p>There is no difference in using backconnect or normal proxies. Backconnect proxies act just like normal proxies, except target site sees different ips, depending on swap interval setting/manual swap.</p>
<p>You don't need to specify credentials if you've added your IP address to the authorized IPs list. Authorizing your IP isn't mandatory, you can continue using credentials authorization, whichever is more convenient.</p>
<p>If you're writing your own software to access some site, please add headers like User-Agent so that request looks like it came from a browser.</p>
</div>
<hr />
<h2>Browser Usage Recommendations</h2>
<div>
<ul>
<li>Turn off WebRTC, it can be used to spoil your real IP address even if you're using a proxy server, and even your local intranet IP address. Here's a link to a guide for disabling it for different browsers: <a href="https://www.vpnunlimitedapp.com/blog/how-to-disable-webrtc-in-chrome-and-other-browsers" target="_blank" rel="nofollow noopener">https://www.vpnunlimitedapp.com/blog/how-to-disable-webrtc-in-chrome-and-other-browsers</a></li>
<li>Use tracker disabling addons like ghostery for chrome, sites can still identify you by your browser fingerprint.</li>
<li>If possible set your local computer time to the proxy server timezone.</li>
<li>If using backconnect, it's better to set swap interval to 5 or more minutes, so that you don't get IP changes too often.</li>
</ul>
</div>
<hr />
<h2>Using Proxies With Python-Selenium</h2>
<h3>python-selenium + Firefox(geckodriver)</h3>
<p>To use selenium with firefox you will need to install these items:</p>
<ul>
<li><a href="https://pypi.org/project/selenium/" target="_blank" rel="nofollow noopener">https://pypi.org/project/selenium/</a></li>
<li>geckodriver: <a href="https://github.com/mozilla/geckodriver/releases" target="_blank" rel="nofollow noopener">https://github.com/mozilla/geckodriver/releases</a></li>
<li>An installed Firefox instance</li>
</ul>
<p>If you're using auth by credentials, you'll also need:</p>
<ul>
<li><a href="https://pypi.org/project/selenium-wire/" target="_blank" rel="nofollow noopener">https://pypi.org/project/selenium-wire/</a></li>
</ul>
<p>Example, that uses proxy credentials:</p>
<pre>from seleniumwire import webdriver
from selenium.webdriver.firefox.firefox_binary import FirefoxBinary
from selenium.webdriver.firefox.options import Options
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC

path_to_firefox_binary = '' # !!! set this variable !!!
path_to_geckodriver_binary = '' # !!! set this variable !!!

wire_options = {
  'proxy': {
    'http': 'http://pvtyproxies:ajd89akjdAdk@2.57.20.194:5432',
    'https': 'http://pvtyproxies:ajd89akjdAdk@2.57.20.194:5432',
    'no_proxy': 'localhost,127.0.0.1'
  }
}
binary = FirefoxBinary(path_to_firefox_binary)

options = Options()
options.headless = True
browser = webdriver.Firefox(
  options=options,
  firefox_binary=binary,
  executable_path=path_to_geckodriver_binary,
  seleniumwire_options=wire_options
)

browser.get("http://api.privateproxy.me:10738")
element = WebDriverWait(browser, 10).until(
  EC.visibility_of_element_located((By.CSS_SELECTOR, "pre"))
)
print(element.text)
browser.quit()</pre>
<p>Example, that uses ip authorization:</p>
<pre>from selenium import webdriver
from selenium.webdriver.firefox.firefox_binary import FirefoxBinary
from selenium.webdriver.firefox.options import Options
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC

path_to_firefox_binary = '' # !!! set this variable !!!
path_to_geckodriver_binary = '' # !!! set this variable !!!
proxy_ip = '2.57.20.194'
proxy_port = 5432

profile = webdriver.FirefoxProfile()
profile.set_preference("network.proxy.type", 1)
profile.set_preference("network.proxy.http", proxy_ip)
profile.set_preference("network.proxy.http_port", proxy_port)
profile.set_preference("network.proxy.ssl", proxy_ip)
profile.set_preference("network.proxy.ssl_port", proxy_port)
profile.update_preferences()

binary = FirefoxBinary(path_to_firefox_binary)
options = Options()
options.headless = True
browser = webdriver.Firefox(
  options=options,
  firefox_binary=binary,
  executable_path=path_to_geckodriver_binary,
  firefox_profile=profile
)
browser.get("http://api.privateproxy.me:10738")
element = WebDriverWait(browser, 10).until(
  EC.visibility_of_element_located((By.CSS_SELECTOR, "pre"))
)
print(element.text)
browser.quit()</pre>
<p>Both examples launch firefox in headless mode, so the browser will stay hidden during execution of those examples.</p>
<hr />
<h3>python-selenium + Chrome(chromedriver)</h3>
<p>To use selenium with chrome you will need to install these items:</p>
<ul>
<li><a href="https://pypi.org/project/selenium/" target="_blank" rel="noopener">https://pypi.org/project/selenium/</a></li>
<li>cromedriver: <a href="https://chromedriver.chromium.org/downloads" target="_blank" rel="noopener">https://chromedriver.chromium.org/downloads</a></li>
<li>An installed Chrome instance</li>
</ul>
<p>Example that uses credentials authorization:</p>
<pre>import os
import zipfile
import hashlib
from selenium import webdriver
from selenium.webdriver.chrome.options import Options
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC

proxy = "2.57.20.194:5432"
credentials = "pvtyproxies:ajd89akjdAdk"
path_to_chrome_binary = '' !!! set this variable !!!
path_to_chromedriver_binary = '' !!! set this variable !!!

def generate_extension(proxy, credentials):
  ip, port = proxy.split(':')
  login, password = credentials.split(':')
  manifest_json = """
  {
      "version": "1.0.0",
      "manifest_version": 2,
      "name": "Chrome Proxy",
      "permissions": [
          "proxy",
          "tabs",
          "unlimitedStorage",
          "storage",
          "",
          "webRequest",
          "webRequestBlocking"
      ],
      "background": {
          "scripts": ["background.js"]
      },
      "minimum_chrome_version":"22.0.0"
  }
  """

  background_js = """
  var config = {
          mode: "fixed_servers",
          rules: {
          singleProxy: {
              scheme: "http",
              host: "%s",
              port: parseInt(%s)
          },
          bypassList: ["localhost"]
          }
      };

  chrome.proxy.settings.set({value: config, scope: "regular"}, function() {});

  function callbackFn(details) {
      return {
          authCredentials: {
              username: "%s",
              password: "%s"
          }
      };
  }

  chrome.webRequest.onAuthRequired.addListener(
              callbackFn,
              {urls: [""]},
              ['blocking']
  );
  """ % (ip, port, login, password)

  sha1 = hashlib.sha1()
  sha1.update(("%s:%s" % (proxy, credentials)).encode('utf-8'))
  filename = sha1.hexdigest() + ".zip"

  with zipfile.ZipFile(filename, 'w') as zp:
    zp.writestr("manifest.json", manifest_json)
    zp.writestr("background.js", background_js)

  return filename

extension_name = generate_extension(proxy, credentials)
options = Options()
options.binary_location = path_to_chrome_binary
options.add_extension(extension_name)
driver = webdriver.Chrome(
  executable_path = path_to_chromedriver_binary,
  options=options,
)
driver.get('http://api.privateproxy.me:10738/')
element = WebDriverWait(driver, 30).until(
  EC.visibility_of_element_located((By.CSS_SELECTOR, "pre"))
)
print(element.text)
driver.quit()
os.remove(extension_name)</pre>
<p>Unfortunately, there are limitations while using credentials:</p>
<ul>
<li>No headless mode</li>
<li>For each proxy + credentials set an extension must be generated and stored. We were not able to find an easier way.</li>
</ul>
<p>Example that uses ip authorization:</p>
<pre>from selenium import webdriver
from selenium.webdriver.chrome.options import Options
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC

path_to_chrome_binary = '' # !!! set this variable !!!
path_to_chromedriver_binary = '' # !!! set this variable !!!
proxy = "2.57.20.194:5432"

options = Options()
options.binary_location = path_to_chrome_binary
options.headless = True
options.add_argument("--proxy-server=%s" % proxy)

driver = webdriver.Chrome(
  executable_path = path_to_chromedriver_binary,
  options=options,
)
driver.get('http://api.privateproxy.me:10738/')
element = WebDriverWait(driver, 30).until(
  EC.visibility_of_element_located((By.CSS_SELECTOR, "pre"))
)
print(element.text)
driver.quit()</pre>
<hr />
<h2>Using Proxies with Node.JS Puppeteer</h2>
<p><strong>Puppeteer + Node.js + chrome</strong></p>
<p>Currently we only have an example of how to use proxy with puppeteer and chrome.</p>
<p>For this you will need to install puppeteer with env variable PUPPETEER_PRODUCT=chrome:</p>
<pre>PUPPETEER_PRODUCT=chrome npm install puppeteer</pre>
<p>You will also need proxy-chain package:</p>
<pre>npm install proxy-chain</pre>
<p>Sample code:</p>
<pre>const puppeteer = require('puppeteer');
const proxyChain = require('proxy-chain');

(async() =&gt; {
  const oldProxyUrl = 'http://pvtyproxies:ajd89akjdAdk@2.57.20.194:5432';
  const newProxyUrl = await proxyChain.anonymizeProxy(oldProxyUrl);

  const browser = await puppeteer.launch({
    args: [`--proxy-server=${newProxyUrl}`],
  });

  const page = await browser.newPage();
  await page.goto('https://httpbin.org/ip');
  const element = await page.$('pre');
  const text = await page.evaluate(element =&gt; element.textContent, element);
  console.log(text);
  await browser.close();

  await proxyChain.closeAnonymizedProxy(newProxyUrl, true);
})();</pre>
]]></content:encoded>
					
					<wfw:commentRss>https://proxysp.com/privateproxy-me-proxy/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">10959</post-id>	</item>
		<item>
		<title>How to Use 911 Proxies</title>
		<link>https://proxysp.com/how-to-use-911-proxies/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=how-to-use-911-proxies</link>
					<comments>https://proxysp.com/how-to-use-911-proxies/#respond</comments>
		
		<dc:creator><![CDATA[proxysp]]></dc:creator>
		<pubDate>Mon, 13 Jun 2022 23:31:51 +0000</pubDate>
				<category><![CDATA[Manuals]]></category>
		<guid isPermaLink="false">https://www.proxysp.com/?p=9978</guid>

					<description><![CDATA[Have you purchased the P11 proxies and now searching for the relevant guide on how to use these proxies? Then guess what, you are at the &#8230;<p class="read-more"> <a class="ast-button" href="https://proxysp.com/how-to-use-911-proxies/"> <span class="screen-reader-text">How to Use 911 Proxies</span> Read More &#187;</a></p>]]></description>
										<content:encoded><![CDATA[<blockquote><p>Have you purchased the P11 proxies and now searching for the relevant guide on how to use these proxies? Then guess what, you are at the right place. We will guide you through the procedure to get started and sue the 911 proxies services.</p></blockquote>
<p>If you have never sued the <a href="https://911.re/" target="_blank" rel="nofollow noopener">911 proxies</a> in your lifetime, make sure you never go wrong anywhere. This is where we come in to provide the most updated and professional guidance on using the 911 proxies. Without grasping the proper procedure, you might easily mess up the proxies.</p>
<p>The purpose of writing this guide is that 911 proxies are unique, and their usage is not similar to regular proxies. The set procedure and use are different, and so are its complexities. Otherwise, many companies online offer private proxies to serve the same purpose. Most of them aim at masking the IP address so that you can have unrestricted access to some of the contents based on the IP.</p>
<p>In reality, 911 proxies are simple though they seem complicated in most cases. The procedure is simple as you can expect compared to the regular proxies on the market. before going into the details, let us first go through the overview of the 911 proxies.</p>
<hr />
<h2><strong>About 911 S5 Proxies</strong></h2>
<p><img fetchpriority="high" decoding="async" class="aligncenter size-full wp-image-7425" src="http://www.proxysp.com/wp-content/uploads/2021/08/911-S5-Proxy-Homepage.jpg" alt="911 S5 Proxy Homepage" width="1000" height="573" srcset="https://proxysp.com/wp-content/uploads/2021/08/911-S5-Proxy-Homepage.jpg 1000w, https://proxysp.com/wp-content/uploads/2021/08/911-S5-Proxy-Homepage-300x172.jpg 300w, https://proxysp.com/wp-content/uploads/2021/08/911-S5-Proxy-Homepage-768x440.jpg 768w" sizes="(max-width: 1000px) 100vw, 1000px" /></p>
<p>911 S5 Proxy is a company that specializes in providing <a href="https://www.proxysp.com/residential-proxies/" target="_blank" rel="noopener">residential proxies</a> to the market. However, they have a unique offering on the market. They have proxies covering from around the world in almost 192 countries. Thus, 911 S5 Proxy stands as one of the best residential proxy providers as location coverage is concerned. from the name, 911 S5 Proxy S5 stands for the <a href="https://www.proxysp.com/socks-proxy/" target="_blank" rel="noopener">Socks5 proxies</a>. Meaning that they only specialize in the socks5 proxies.</p>
<p>Interestingly, the 911 S5 Proxy offers proxies without expiration; they last as long as you exist until you utilize them. Another advantage of these proxies is that they are cost-effective compared to other regular proxies.</p>
<p>However, these proxies are only meant for the windows use case alone. Thus, when you need to sue on other operating systems, maybe you must install the virtual machine, which might add extra charges that no one needs. one you get the package, the company gives you the proxy client for the first install before using it.</p>
<p>Thus, it is only from the client application that you will be able to access the residential proxies. You can also use the application in adding the add custom referer of the request or the user agent. Then you will enter your details. Otherwise, they guarantee you secure encryption, unmetered bandwidth, access to the developer API, and free software with many useful features to ensure that your privacy is in control.</p>
<hr />
<h2><strong>How to Use 911 S5 Proxies</strong></h2>
<div class="su-youtube su-u-responsive-media-yes"><iframe loading="lazy" width="600" height="400" src="https://www.youtube.com/embed/VOECo8D7nYY?" frameborder="0" allowfullscreen allow="autoplay; encrypted-media; picture-in-picture" title=""></iframe></div>
<p>911 S5 Proxies is a company that offers premium services. Before proceeding, you should keep that in mind, and thus, you must purchase a package to sue these residential proxies. Therefore, visit their official website and create an account, and proceed to get a package.</p>
<p>Then it is after downloading the client software; you can start using these proxies. Also, beware of the potential scammers with mirror websites like 911.gg and 911s5.com, etc. Otherwise, here is the procedure you have to follow:</p>
<p><strong>Step 1:</strong> After downloading the client software, install it on your desktop, which should be windows OS, and if it is any other latest windows, you must run it on the virtual machine. The client application is only compatible with Windows OS.</p>
<p><strong>Step 2:</strong> Then click on the clients' application to launch. From there, provide the authentication details you used to register. After that, you will have access to the application to start using the proxies. You will access multiple tabs like proxylist, programs, user-agent, conversion tracking, today-list, and even block sites as well as  settings, etc</p>
<p><strong>Step 3:</strong> And you will locate the username just above the tabs and find other information like local Proxy and proxy balance.</p>
<p><strong>Step 4:</strong> So, ensure that you have the program take ready on the focus. For this stage, you have to add the application where you want to sue the proxies you have purchased. You will notice that remove and add icons found on the interface. Equally, when that is time-consuming, you can also drag and drop yu application you want to use the proxies. And if you wish any other browser to follow the guide, then make sure you to the application.</p>
<p><strong>Step 5:</strong> And when you want to use proxies, head to the proxylist section. You will be able to navigate through a list of the available proxies and their location, country, state, ping, ISP, and zip. You can utilize a filtering option to narrow down your selection based on your target country, state, or even ISP.</p>
<p><strong>Step 6:</strong> Then proceed to use a particular proxy from the list menu. When you double-click the Proxy on the list, it automatically connects you. But still, you can right-click on the selected Proxy and then tap on the connection option. Then head to the proxy information section found at the top of the name and confirm if you are using the correct IP addresses displayed in red.</p>
<p><strong>Step 7:</strong> Now head back to the program section. Assuming you added the browser, now you can launch and browse from the client application. All the connection requests you send online are routed through their proxy server, which you selected from the list menu. You can also visit the IPinfo.io site and see if your selected p[roxy is working correctly. You will see the IP address that corresponds to the location you selected.</p>
<hr />
<h2><strong>How to Use Different 911 Proxies at the Same Time </strong></h2>
<div class="su-youtube su-u-responsive-media-yes"><iframe loading="lazy" width="600" height="400" src="https://www.youtube.com/embed/0nhEf-L5MHA?" frameborder="0" allowfullscreen allow="autoplay; encrypted-media; picture-in-picture" title=""></iframe></div>
<p>Again, it is possible to use different 911 S5 proxies simultaneously. However, you must note that it is not possible to use these proxies simultaneously if you are doing it traditionally. This is because you will only be connected to a single proxy at a time. But through port forwarding, there is always a way to simultaneously use different 911 S5 proxies. Thus in this section, we will take you through using 911 S5 proxies through port forwarding.</p>
<p>Remember that this is only possible if you want to utilize it on a single machine. Therefore, the 911 S5 client tends to create a server and then open up ports in which you can efficiently use the proxies. Follow the below procedure:</p>
<p><strong>Step 1:</strong> The first thing is to visit the official website, download the client application, and install it on your machine. The scammers are available on the website from the user dashboard.</p>
<p><strong>Step 2:</strong> Then open the client application and make sure you enter the relevant login or authentication information. If you have an active subscription and manage to log in it to the application, you can now proceed to start using the available proxies.</p>
<p><strong>Step 3:</strong> According to the 911 S5 proxies clients dashboard, you will be able to locate different tabs, including settings, user-agent, proxylist, etc., here; you need to tap on the settings icon.</p>
<p><strong>Step 4:</strong> Then you have to make the configuration from the settings section to make use of different 911 S5 proxies simultaneously. Therefore, first make sure you &#8216;uncheck the auto close program when proxy changes,' then uncheck the auto change timezone, and after that, under proxy tool, select &#8216; other proxy tool' from the menu.</p>
<p><strong>Step 5:</strong> After saving the settings, head to the proxy-list tab. from there, filter the list of the available proxies based on different aspects. After that, you can select the Proxy from the list and right-click on the chosen Proxy. So, besides using the connect option as we did in the previous section, tap on the  &#8216;forward port to proxy' and select the available port from the list. Repeat the process as many times as the number of proxies you wish to use simultaneously.</p>
<p><strong>Step 6:</strong> Then, tap on the' port-forward-list icon at the bottom of your user interface screen to access the IP and the port pair to start using. You must understand that the IP address is retained, but the ports differ. Thus, for every IP address and port pair, you will access the real IP mapped to and the details about that particular Ip address.</p>
<p><strong>Step 7:</strong> Now, you have to copy the IP address and port pairs to use in the software or application where you want to use them. This can be multiple browser profiles like <a href="https://www.proxysp.com/multilogin/" target="_blank" rel="noopener">Multilogin</a> or any regular browser. They are compatible with any software.</p>
<p>For instance, in the next section, we will guide you on using these proxies on the Proxifier.</p>
<hr />
<h2><strong>How to Use Proxifier with 911 Proxies</strong></h2>
<div class="su-youtube su-u-responsive-media-yes"><iframe loading="lazy" width="600" height="400" src="https://www.youtube.com/embed/5Fm6LYvZIJg?" frameborder="0" allowfullscreen allow="autoplay; encrypted-media; picture-in-picture" title=""></iframe></div>
<p>We have selected the <a href="https://www.proxysp.com/proxifier/" target="_blank" rel="noopener">Proxifier</a> proxy client for a reason. Many other things will make you like it, too. In short, the application was designed to integrate with any third-party software seamlessly. And among the software is 911.re S5 Proxy windows clients, which perfectly integrates with the proxifier.</p>
<p>This means, with such a duo of the 911.re S5 Proxy windows clients and proxifier. You can come up with the perfect proxy client that can effortlessly force the internet traffic through socks5 proxies. These socks5 proxies can work out of the box. Meaning, that the proxifier is the best and top tool to help you solve any issue related to 911.re S5 Proxies.</p>
<p>And in this section, we are pleased to guide you on integrating these proxies with the proxifier application. The first thing is to get both applications installed on your desktop. 911. re S5 Proxy windows, clients are readily available on the official website. Otherwise, here is the step-by-step procedure:</p>
<p><strong>Step 1:</strong> Ensure that your proxy subscription is still active. And if you do not have one, you will have to purchase it from their official website and download the client application to install it on your desktop.</p>
<p><strong>Step 2:</strong> Then head to the proxifier Offical website, download the proxifier application, and install it on your machine. To new customers, you have 3 free trial days even if you have a premium package. Also, remember that 911. re S5 Proxy windows clients sometimes come with the standard proxifier application. If you have it, then well and good.</p>
<p><strong>Step 3:</strong> Make sure you install all the applications you have downloaded to your machine. After that, first, open proxifier software and enter its license key to proceed.</p>
<p><strong>Step 4:</strong> After that, go to the 911 proxy client application and open it. From there, enter the relevant authentication details that as username & password.</p>
<p><strong>Step 5:</strong> When you set up the software correctly, go to the settings, head to the proxy settings section, and choose proxifier standard editions from the menu.</p>
<p><strong>Step 6:</strong> Then below the proxy rules, select &#8216; proxy the entire system with all applications network connection including system connections to work through a proxy.' on the menu. This selection lets the proxifier software force the whole internet traffic through 911. re S5 Proxy you selected.</p>
<hr />
<h2><strong>How to Change 911 User-Agent and Referrer</strong></h2>
<p>when you use the 911 S5 proxy service, there are a lot of features you can enjoy working with. one of the benefits is that the 911 S5 proxy service offers you the ability to tweak the request user-agent head of the referrer. This is not possible with other proxy providers on the market.</p>
<p>So, when you want to change the user-agent header, you can select the client browser you prefer to use and identify other than the current browser.</p>
<p>While the referrer sends a message to the web services about the websites when you click on a link, the same applies when you directly visit the site. Changing this is very easy. Go to the tab menu and select the user agent section if you need to choose a particular user agent. Then you will access a list of the available famous browser user agent and choose the one you wish to use.</p>
<p>Still, you also have an option to select or add your custom user agent string. There is also an option to choose the random use where the application decides for you which one to use. Sometimes, it is also good to fake your referrer. head to the tab, and then you can select any form from the menu listed or add a custom string.</p>
<hr />
<h2><strong>What Can You Do with 911 Setting Tabs</strong></h2>
<p><img loading="lazy" decoding="async" class="aligncenter size-full wp-image-10010" src="http://www.proxysp.com/wp-content/uploads/2022/06/911-Setting-Tabs.jpg" alt="911 Setting Tabs" width="992" height="656" srcset="https://proxysp.com/wp-content/uploads/2022/06/911-Setting-Tabs.jpg 992w, https://proxysp.com/wp-content/uploads/2022/06/911-Setting-Tabs-300x198.jpg 300w, https://proxysp.com/wp-content/uploads/2022/06/911-Setting-Tabs-768x508.jpg 768w" sizes="(max-width: 992px) 100vw, 992px" /></p>
<p>On the 911 proxies client application, of all the tabs, settings are complex and come with multiple options. So, unless you learn how to go about it, you can find using 911 proxies very complicated. Most people fear even clicking on it. But when you must do it, this is the time to face it with a lot of courage.</p>
<p>You must know that the settings tab is very powerful and offers you many settings menus. Thus, here are some of the most important and often sued tabs in the settings:</p>
<p><strong>Step 1:</strong> Select to use the proxifier or 911 proxy client application.</p>
<p><strong>Step 2:</strong> Limiting geo in the proxy list</p>
<p><strong>Step 3:</strong> Setting your screen resolution</p>
<p><strong>Step 4:</strong> Reset all sued proxies</p>
<p><strong>Step 5:</strong> Also, the configuration of the proxy connection waiting time as well as the proxy port with any other things.</p>
<hr />
<h2><strong>Conclusion</strong></h2>
<p>to sum up, in the article, we have been able to take you through the processes of setting up and using the 911 proxy client software. And the procedure can quickly tell you that 911 proxies are very restrictive and do not even give the clients freedom as other does. Otherwise, if you know the limits and how to go about it, these proxies are cheap for a lifetime instead of other providers online.</p>
<p>Thus, only use 911 proxies on the browsers or applications which does not need frequent IP address rotation. And if not, then go for the flexible provider, but the good news is that you can sue multiple 911 proxies simultaneously on the same device, which is an added advantage.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://proxysp.com/how-to-use-911-proxies/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">9978</post-id>	</item>
		<item>
		<title>Residential Proxies (By BlazingSEO) : Learn Manuals Before You Buy</title>
		<link>https://proxysp.com/residential-proxies-blazingseo/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=residential-proxies-blazingseo</link>
					<comments>https://proxysp.com/residential-proxies-blazingseo/#respond</comments>
		
		<dc:creator><![CDATA[admin]]></dc:creator>
		<pubDate>Thu, 01 Jan 1970 00:00:00 +0000</pubDate>
				<category><![CDATA[BlazingSEO Proxies]]></category>
		<guid isPermaLink="false">https://www.proxysp.com/?p=7665</guid>

					<description><![CDATA[What do you know about Blazing SEO residential proxies? Do you know how to set up them? Be sure to read this article before you buy! &#8230;<p class="read-more"> <a class="ast-button" href="https://proxysp.com/residential-proxies-blazingseo/"> <span class="screen-reader-text">Residential Proxies (By BlazingSEO) : Learn Manuals Before You Buy</span> Read More &#187;</a></p>]]></description>
										<content:encoded><![CDATA[<blockquote><p>What do you know about Blazing SEO residential proxies? Do you know how to set up them? Be sure to read this article before you buy!</p></blockquote>
<h2 class="heading">Does Blazing SEO Offer Residential Proxies?</h2>
<p dir="ltr">Residential proxies are currently in open beta testing. At present, we offer premium Datacenter proxies, and we’ll have ethically supported residential proxies very soon.</p>
<p dir="ltr"><span dir="ltr">It’s important to us to deliver the highest quality residential proxies with thoughtful ethical practices. Unfortunately, many residential proxy providers are providing IPs that are unethically sold and resold without explicit consent from the source. Not only is this shady business, but it also puts the user’s IP at risk when using these services. </span></p>
<p dir="ltr"><span dir="ltr">That’s why we strive to hold our products and services to a higher standard&#8211;it’s more fair, it’s legal, and everyone benefits from ethical residential proxy practices.</span></p>
<hr />
<h2 class="heading">Residential Proxies Setup Guide</h2>
<p dir="ltr">Welcome to the Blazing SEO Rotating Residential beta program! To start using your rotating residential proxies, just follow the instructions for your programming language of choice to install our proxy controller software:</p>
<ul>
<li dir="ltr"><a href="https://www.proxysp.com/proxy-pilot/#programming-language-implementations" target="_blank" rel="noopener">Node.js (Requests)</a></li>
<li dir="ltr"><a href="https://www.proxysp.com/proxy-pilot/#programming-language-implementations" target="_blank" rel="noopener">Node.js with Puppeteer</a></li>
<li dir="ltr"><a href="https://www.proxysp.com/proxy-pilot/#programming-language-implementations" target="_blank" rel="noopener">Curl</a></li>
<li dir="ltr"><a href="https://www.proxysp.com/proxy-pilot/#programming-language-implementations" target="_blank" rel="noopener">Python (Requests)</a></li>
<li dir="ltr"><a href="https://www.proxysp.com/proxy-pilot/#programming-language-implementations" target="_blank" rel="noopener">Firefox Browser</a></li>
</ul>
<p dir="ltr">Need instructions for a language that’s not listed above? Reach out to your account manager. For details, see <a href="https://www.proxysp.com/proxy-pilot/" target="_blank" rel="noopener">Proxy Pilot</a>.</p>
<hr />
<h3 dir="ltr"><strong>What Am I Installing?</strong></h3>
<p dir="ltr">Proxy Pilot is Blazing SEO’s brand new, 100% free proxy management application which comes with many benefits for the residential proxy user such as yourself.</p>
<p dir="ltr">To use our proxies you need to add a line of code to your software to “ignore” a certificate warning (recommended option), or install our secure certificate on your server. This certificate allows us to intercept your traffic and decrypt it, which emulates a man-in-the-middle-attack with your connection.</p>
<p dir="ltr">This certificate then stores your data insights in the powerful <a href="https://www.elastic.co/what-is/elk-stack" target="_blank" rel="noopener">ELK stack</a>, fully accessible by you and your team. You’ll be able to see data like the list below, and much more:</p>
<ul>
<li dir="ltr">How many connections were sent to domain.com?</li>
<li dir="ltr">How many non-200 HTTP response codes?</li>
<li dir="ltr">How much bandwidth have I consumed?</li>
<li dir="ltr">How many total connections in the past 7 days?</li>
<li dir="ltr">How much bandwidth on a specific domain?</li>
<li dir="ltr">Look at the full header sent to the target website to understand why you may have received a non-200 HTTP response (a ban, in many cases)</li>
</ul>
<hr />
<h3 dir="ltr"><strong>Why do I Need This?</strong></h3>
<p dir="ltr">We want you to have the best possible experience with your Blazing SEO proxies, and the Proxy Pilot certificate will make your scraping project much more successful than it would be otherwise.</p>
<p dir="ltr">There are two primary reasons you must work with this certificate.</p>
<p dir="ltr"><strong>1. Improve your scraping with advanced statistics</strong></p>
<p dir="ltr">Proxy Pilot lets you access amazing statistics at your fingertips, with detail far beyond most of our users’ in-house solutions. Without such data, we believe customers are just “spraying” connections at our competitors’ pools without really knowing what’s going on or what they’re being charged for. With our solution, you will know everything!</p>
<p dir="ltr">Here are actual screenshots of the ELK dashboard you will be provided with:</p>
<p dir="ltr"><img loading="lazy" decoding="async" class="aligncenter size-full wp-image-7849" src="https://www.proxysp.com/wp-content/uploads/2021/09/ELK-dashboard-one.jpg" alt="ELK dashboard one" width="612" height="451" srcset="https://proxysp.com/wp-content/uploads/2021/09/ELK-dashboard-one.jpg 612w, https://proxysp.com/wp-content/uploads/2021/09/ELK-dashboard-one-300x221.jpg 300w" sizes="(max-width: 612px) 100vw, 612px" /></p>
<p dir="ltr"><img loading="lazy" decoding="async" class="aligncenter size-full wp-image-7850" src="https://www.proxysp.com/wp-content/uploads/2021/09/ELK-dashboard-two.jpg" alt="ELK dashboard two" width="616" height="337" srcset="https://proxysp.com/wp-content/uploads/2021/09/ELK-dashboard-two.jpg 616w, https://proxysp.com/wp-content/uploads/2021/09/ELK-dashboard-two-300x164.jpg 300w" sizes="(max-width: 616px) 100vw, 616px" /></p>
<p dir="ltr">And in <a href="https://screencast-o-matic.com/watch/crhwXNVhrBQ" target="_blank" rel="nofollow noopener">this ten-minute video</a>, our VP of Technology shows the wide array of benefits you get from installing our simple certificate.</p>
<hr />
<p dir="ltr"><strong>2. Protect our users and our proxy pool</strong></p>
<p dir="ltr">Most proxy providers cannot technologically prohibit a customer from opening a tunnel and sending 100k requests to a single device.</p>
<p dir="ltr">Blazing SEO works a little differently. We know that setting high ethical standards doesn’t just protect the pool of users who are entrusting us with their IP addresses &#8211; it also protects YOU from getting banned/blocked from a site you want to scrape.</p>
<p dir="ltr">By giving our software the insights to know about each connection being sent, we are able to ethically spread out connections to our residential devices.</p>
<div>
<hr />
<h2 class="heading">Static Residential IP ASNs</h2>
<p dir="ltr">We strive to provide the best quality IPs for all of our users. Part of this process is to provide a wider range of diverse IP pools to ensure that our customers can see the best possible results for their needs. As part of this process, we source our static residential IPs from a number of companies both large and small across the United States.</p>
<p dir="ltr">All of these IPs are true ISP proxies &#8211; some from providers you have heard of, and some from providers that you might not know.</p>
<p dir="ltr">&#8220;I didn't get IPs from Company X, so they will not work for me&#8221;</p>
<p dir="ltr">Our IPs are put through a number of large-scale tests. We personally ensure that all of our static residential IPs provide quality results across a large number of use cases. We also ensure that major IP databases see them as a residential IP address rather than a data center IP. Take a look below to see some examples from IP2location, a primary database for IP information used by many large companies.</p>
<p dir="ltr">Static Residential: <a href="https://www.ip2location.com/demo/161.77.96.3" target="_blank" rel="nofollow noopener">https://www.ip2location.com/demo/161.77.96.3</a></p>
<p dir="ltr">Static Residential: <a href="https://www.ip2location.com/demo/65.215.17.0" target="_blank" rel="nofollow noopener">https://www.ip2location.com/demo/65.215.17.0</a></p>
<p dir="ltr">Static Residential: <a href="https://www.ip2location.com/demo/50.231.88.0" target="_blank" rel="nofollow noopener">https://www.ip2location.com/demo/50.231.88.0</a></p>
<p dir="ltr">Data Center: <a href="https://www.ip2location.com/demo/104.244.100.0" target="_blank" rel="nofollow noopener">https://www.ip2location.com/demo/104.244.100.0</a></p>
<p dir="ltr">The key information we look for is the &#8220;usage type&#8221; to ensure it is not datacenter/hosting. As you can see, the static residential IPs in these demos are listed as &#8220;fixed ISP&#8221; usage types, which will signal to any sites that this is a residential IP, while the datacenter IP is flagged as a “datacenter/hosting provider” in the usage type field.</p>
<p dir="ltr">So as you can see, regardless of the size of the company, all of our static residential IPs are seen as such by the websites you are trying to access.</p>
<p>Please reach out to <a href="mailto:support@blazingseo.com" target="_blank" rel="nofollow noopener">support@blazingseo.com</a> if you have further questions about what we can offer you through static residential IPs.</p>
<p><strong><div class="su-heading su-heading-style-modern-2-orange su-heading-align-center" id="" style="font-size:30px;margin-bottom:20px"><div class="su-heading-inner">FAQs</div></div></strong></p>
<p><strong>1. Are Blazing SEO Proxies Ethically Sourced?</strong></p>
<p dir="ltr">Yes! Unlike some of their competitors who leave their sourcing methods vague and unclear, they are open and honest&#8230; as it should be.</p>
<p dir="ltr"><span dir="ltr">Blazing SEO primarily sources from their partner product <a href="http://cashraven.io/" target="_blank" rel="nofollow noopener">cashraven.io</a>. They also source from other vendors who meet their standard of ethics which requires them to compensate end users for the bandwidth sold. </span></p>
<p dir="ltr"><span dir="ltr">With CashRaven, they create a mutually agreeable contract with end-users, or developers, that provides clear and consistent messaging on &#8220;what&#8221; end users are really signing up for. They intend to hide nothing!</span></p>
<hr />
<p><strong>2. What Websites and Use Cases does Blazing SEO Allow on Their Network?</strong></p>
<p>Blazing SEO currently works most closely with data scraping companies that wish to aggregate publicly available data at scale using their residential proxy network. However, if you feel that your use case is legal and ethical, please contact support@blazingseollc.com and they would be happy to assess whether or not your use case would be allowed in our network.</p>
</div>
<div>
<hr />
<p dir="ltr"><strong>3. Does Blazing SEO Allow Geo-targeting for Certain Cities/Regions/States/Countries?</strong></p>
<p dir="ltr">As of April 23, 2021, Blazing SEO does not have this functionality built-in. However, they have it on their backlog and will be implementing it as soon as possible!<u></u></p>
<hr />
<p dir="ltr"><strong>4. How Large is Blazing SEO Proxy Pool?</strong></p>
<p dir="ltr">Blazing SEO proxy pool fluctuates in size every day. For all small to medium-sized customers, their pool is plenty large enough to solve your needs (over 100,000 IPs). For Enterprise customers looking to do very large volumes, please reach out to them and they can discuss your needs in more detail.</p>
<hr />
<p dir="ltr"><strong>5. Can I Resell Blazing SEO Residential Proxies?</strong></p>
<p dir="ltr">Blazing SEO is considering resellers on a case-by-case basis, given their commitment to an ethical ecosystem. It is their utmost priority to ensure any customer that uses their network abides by the same vetting process they do for their customers. Please reach out if you believe you would be a candidate to resell their services.</p>
<hr />
<h4 id="references" class="ftwp-heading">References,</h4>
</div>
<ul>
<li><a href="https://portal.blazingseollc.com/en/support/solutions/articles/64000256604-does-blazing-seo-offer-residential-proxies-" target="_blank" rel="nofollow noopener">https://portal.blazingseollc.com/en/support/solutions/articles/64000256604-does-blazing-seo-offer-residential-proxies-</a></li>
<li><a href="https://portal.blazingseollc.com/en/support/solutions/articles/64000264222-residential-proxies-setup-guide" target="_blank" rel="nofollow noopener">https://portal.blazingseollc.com/en/support/solutions/articles/64000264222-residential-proxies-setup-guide</a></li>
<li><a href="https://portal.blazingseollc.com/en/support/solutions/articles/64000263384-residential-proxy-faq" target="_blank" rel="nofollow noopener">https://portal.blazingseollc.com/en/support/solutions/articles/64000263384-residential-proxy-faq</a></li>
<li><a href="https://portal.blazingseollc.com/en/support/solutions/articles/64000264987-static-residential-ip-asns" target="_blank" rel="nofollow noopener">https://portal.blazingseollc.com/en/support/solutions/articles/64000264987-static-residential-ip-asns</a></li>
</ul>
<hr />
<blockquote><p><strong>Disclaimer:</strong> This part of the content is mainly from the merchant. If the merchant does not want it to be displayed on my website, please <a href="https://www.proxysp.com/contact-us/">contact us</a> to delete your content.</p></blockquote>
]]></content:encoded>
					
					<wfw:commentRss>https://proxysp.com/residential-proxies-blazingseo/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">7665</post-id>	</item>
		<item>
		<title>BlazingSEO Proxies Troubleshooting (Manuals by Blazing SEO)</title>
		<link>https://proxysp.com/blazingseo-proxies-troubleshooting/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=blazingseo-proxies-troubleshooting</link>
					<comments>https://proxysp.com/blazingseo-proxies-troubleshooting/#respond</comments>
		
		<dc:creator><![CDATA[admin]]></dc:creator>
		<pubDate>Thu, 01 Jan 1970 00:00:00 +0000</pubDate>
				<category><![CDATA[BlazingSEO Proxies]]></category>
		<guid isPermaLink="false">https://www.proxysp.com/?p=7666</guid>

					<description><![CDATA[Are you having trouble using BlazingSEO? This article will tell you how to troubleshoot BlazingSEO Proxies. Why Are My Proxies Not Working? This article addresses: Proxies &#8230;<p class="read-more"> <a class="ast-button" href="https://proxysp.com/blazingseo-proxies-troubleshooting/"> <span class="screen-reader-text">BlazingSEO Proxies Troubleshooting (Manuals by Blazing SEO)</span> Read More &#187;</a></p>]]></description>
										<content:encoded><![CDATA[<blockquote><p>Are you having trouble using BlazingSEO? This article will tell you how to troubleshoot BlazingSEO Proxies.</p></blockquote>
<h2 class="heading">Why Are My Proxies Not Working?</h2>
<p>This article addresses:</p>
<ul>
<li>Proxies not showing up in your proxy dashboard</li>
<li>Dead Proxies</li>
</ul>
<p>NOTE: There is a difference between the proxies actually being completely dead (not loading any websites at all), and the proxies being blocked by a particular website, but not ‘dead’.</p>
<h3><strong>Steps to Diagnose Proxy Issues:</strong></h3>
<p><strong>1. Is your PC/Device IP authorized in the proxy dashboard?</strong></p>
<p>This can be checked following this article: <a href="https://www.proxysp.com/how-to-use-blazingseo-proxies/#how-do-i-authorize-my-proxies" target="_blank" rel="noopener">How do I authorize my proxies?</a></p>
<p dir="ltr">Additionally, you go to the browser and access <a href="https://whatismyip.com/" target="_blank" rel="nofollow noopener">whatismyip.com</a> to verify what your IP address is.  (Taking a screen capture of this so that you can send that in with a support ticket if you proceed to the other steps but still have issues, would be helpful.)</p>
<p>Once you confirm that your IPs are authorized and you’ve waited 30 minutes for authorization to complete, then continue to step 2.</p>
<hr />
<p><strong>2. Are all proxies loaded into your account dashboard?</strong></p>
<p>If <strong>yes</strong>, then proceed to step 3</p>
<p>If <strong>no</strong>, it is possible that we are temporarily out of stock for the location(s) you selected. This does not happen often, but it can occur if we recently received an unexpectedly large order. We typically have new stock within 24-48 hours, so if that time frame is acceptable for you then hold tight! We’ll add them to your account as soon as they are replenished.</p>
<p>However, if your needs are more urgent, then you should change your locations to ‘mixed’ in the Location Preferences tab in the proxy dashboard. Setting to Mixed location will provide better subnet diversity, which is the best thing when connecting to websites. You will spread across more ISPs, ASNs, and A+B+C class subnets.</p>
<p>Your proxies will all load within 5-10 minutes, and you’ll be back in business in less time than it takes to run out for a Big Mac and fries.</p>
<p><strong>3. Do your proxies access other websites, but not your preferred website?</strong></p>
<p>Great news!  Your proxies are not dead. Unfortunately, this means that you may have a more challenging problem for your use case: The website you are trying to access with your proxies is banning or blocking them for some reason. Please read <a href="https://www.proxysp.com/how-to-use-blazingseo-proxies/#why-are-my-proxies-not-working-on-some-sites" target="_blank" rel="noopener">this article</a> on what to do when proxies do now work on all websites.</p>
<p>We also offer one free replacement of IPs every 30 days, which you can learn more about in the knowledge base article about replacing proxies.</p>
<p><strong>4. I’ve replaced my proxies, but they still aren’t working on my preferred website!</strong></p>
<p>Unfortunately, if a website is blocking the proxies from accessing their site because of their site security, yet the proxy still works on other sites, then there is little we can do with that particular proxy.</p>
<p>But wait &#8211; you have more options!  You can try different proxy locations, various types of proxies (e.g. switch from semi-dedicated to dedicated, give IPv6 a whirl, or go big and get a premium proxy).</p>
<hr />
<div class="icon">
<div class="icon">
<h2 class="heading">How Can I Check to See If a Proxy Is Blocked from a Certain Website?</h2>
<p>You can 100% confirm if a proxy is blocked from a website by following this guide.</p>
<p>First, you should ensure that your proxies are setup properly, and that you are using the correct port, or username/password for the proxies with the article.</p>
<p>Once you've completed that, you will be able to proceed below.</p>
<p>There are two methods. One with Chrome, and one with Firefox. Please follow the method that applies to you.</p>
<hr />
<p><strong>Chrome:</strong></p>
<p>Open Chrome, and click on the 3 dots in the upper right corner</p>
<p><img loading="lazy" decoding="async" class="aligncenter wp-image-7944" src="https://www.proxysp.com/wp-content/uploads/2021/09/BlazingSEO-Check-with-Chrome1.jpg" alt="BlazingSEO Check with Chrome1" width="900" height="289" srcset="https://proxysp.com/wp-content/uploads/2021/09/BlazingSEO-Check-with-Chrome1.jpg 1000w, https://proxysp.com/wp-content/uploads/2021/09/BlazingSEO-Check-with-Chrome1-300x96.jpg 300w, https://proxysp.com/wp-content/uploads/2021/09/BlazingSEO-Check-with-Chrome1-768x247.jpg 768w" sizes="(max-width: 900px) 100vw, 900px" /></p>
<p>Select &#8216;Settings' in menu</p>
<p><img loading="lazy" decoding="async" class="aligncenter wp-image-7945" src="https://www.proxysp.com/wp-content/uploads/2021/09/BlazingSEO-Check-with-Chrome2.jpg" alt="BlazingSEO Check with Chrome2" width="729" height="321" srcset="https://proxysp.com/wp-content/uploads/2021/09/BlazingSEO-Check-with-Chrome2.jpg 868w, https://proxysp.com/wp-content/uploads/2021/09/BlazingSEO-Check-with-Chrome2-300x132.jpg 300w, https://proxysp.com/wp-content/uploads/2021/09/BlazingSEO-Check-with-Chrome2-768x338.jpg 768w" sizes="(max-width: 729px) 100vw, 729px" /></p>
<p>Scroll to bottom of Settings page, and select &#8216;Advanced'</p>
<p><img loading="lazy" decoding="async" class="aligncenter wp-image-7946" src="https://www.proxysp.com/wp-content/uploads/2021/09/BlazingSEO-Check-with-Chrome3.jpg" alt="BlazingSEO Check with Chrome3" width="728" height="298" srcset="https://proxysp.com/wp-content/uploads/2021/09/BlazingSEO-Check-with-Chrome3.jpg 956w, https://proxysp.com/wp-content/uploads/2021/09/BlazingSEO-Check-with-Chrome3-300x123.jpg 300w, https://proxysp.com/wp-content/uploads/2021/09/BlazingSEO-Check-with-Chrome3-768x314.jpg 768w" sizes="(max-width: 728px) 100vw, 728px" /></p>
<p>Scroll to bottom of Advanced section, and select &#8216;Open proxy settings'</p>
<p><img loading="lazy" decoding="async" class="aligncenter wp-image-7947" src="https://www.proxysp.com/wp-content/uploads/2021/09/BlazingSEO-Check-with-Chrome4.png" alt="BlazingSEO Check with Chrome4" width="724" height="378" srcset="https://proxysp.com/wp-content/uploads/2021/09/BlazingSEO-Check-with-Chrome4.png 933w, https://proxysp.com/wp-content/uploads/2021/09/BlazingSEO-Check-with-Chrome4-300x157.png 300w, https://proxysp.com/wp-content/uploads/2021/09/BlazingSEO-Check-with-Chrome4-768x401.png 768w" sizes="(max-width: 724px) 100vw, 724px" /></p>
<p>Select the &#8216;LAN settings' button on next window</p>
<p><img loading="lazy" decoding="async" class="aligncenter wp-image-7948" src="https://www.proxysp.com/wp-content/uploads/2021/09/BlazingSEO-Check-with-Chrome5.jpg" alt="BlazingSEO Check with Chrome5" width="525" height="485" srcset="https://proxysp.com/wp-content/uploads/2021/09/BlazingSEO-Check-with-Chrome5.jpg 702w, https://proxysp.com/wp-content/uploads/2021/09/BlazingSEO-Check-with-Chrome5-300x277.jpg 300w" sizes="(max-width: 525px) 100vw, 525px" /></p>
<p>You will then click the checkbox stating &#8216;Use a proxy server&#8230;'</p>
<p>You may then enter your proxy IP, port, and click OK</p>
<p><img loading="lazy" decoding="async" class="aligncenter wp-image-7949" src="https://www.proxysp.com/wp-content/uploads/2021/09/BlazingSEO-Check-with-Chrome6.jpg" alt="BlazingSEO Check with Chrome6" width="766" height="387" srcset="https://proxysp.com/wp-content/uploads/2021/09/BlazingSEO-Check-with-Chrome6.jpg 989w, https://proxysp.com/wp-content/uploads/2021/09/BlazingSEO-Check-with-Chrome6-300x152.jpg 300w, https://proxysp.com/wp-content/uploads/2021/09/BlazingSEO-Check-with-Chrome6-768x388.jpg 768w" sizes="(max-width: 766px) 100vw, 766px" /></p>
<p>To confirm that your proxy is loaded into the browser, go to google and type &#8216;my ip'. The proxy IP should show</p>
<p><img loading="lazy" decoding="async" class="aligncenter wp-image-7950" src="https://www.proxysp.com/wp-content/uploads/2021/09/BlazingSEO-Check-with-Chrome7.jpg" alt="BlazingSEO Check with Chrome7" width="794" height="302" srcset="https://proxysp.com/wp-content/uploads/2021/09/BlazingSEO-Check-with-Chrome7.jpg 983w, https://proxysp.com/wp-content/uploads/2021/09/BlazingSEO-Check-with-Chrome7-300x114.jpg 300w, https://proxysp.com/wp-content/uploads/2021/09/BlazingSEO-Check-with-Chrome7-768x292.jpg 768w" sizes="(max-width: 794px) 100vw, 794px" /></p>
<p>If your proxy IP shows up in google, you can then try loading your preferred website. If it loads, then your proxy is most likely not blocked.</p>
<ul>
<li><em>To remove proxy, just reverse the steps above.</em></li>
</ul>
<p>We have a video showing how to complete this with IP authorization</p>
<div class="su-youtube su-u-responsive-media-yes"><iframe loading="lazy" width="600" height="400" src="https://www.youtube.com/embed/XO-Qj_jgdKM?" frameborder="0" allowfullscreen allow="autoplay; encrypted-media; picture-in-picture" title=""></iframe></div>
<p>We have a video showing how to complete this with Username/Password authorization</p>
<div class="su-youtube su-u-responsive-media-yes"><iframe loading="lazy" width="600" height="400" src="https://www.youtube.com/embed/0mzVhOCOHZ8?" frameborder="0" allowfullscreen allow="autoplay; encrypted-media; picture-in-picture" title=""></iframe></div>
<hr />
<p><strong>Firefox:</strong></p>
<p>Open Firefox, and click on the 3 bars in the upper right corner</p>
<p><img loading="lazy" decoding="async" class="aligncenter size-full wp-image-7953" src="https://www.proxysp.com/wp-content/uploads/2021/09/BlazingSEO-Check-with-Firefox-1.jpg" alt="BlazingSEO Check with Firefox 1" width="306" height="500" srcset="https://proxysp.com/wp-content/uploads/2021/09/BlazingSEO-Check-with-Firefox-1.jpg 306w, https://proxysp.com/wp-content/uploads/2021/09/BlazingSEO-Check-with-Firefox-1-184x300.jpg 184w" sizes="(max-width: 306px) 100vw, 306px" /></p>
<p>Select &#8216;Options' in menu</p>
<p><img loading="lazy" decoding="async" class="aligncenter size-full wp-image-7954" src="https://www.proxysp.com/wp-content/uploads/2021/09/BlazingSEO-Check-with-Firefox-2.jpg" alt="BlazingSEO Check with Firefox 2" width="278" height="500" srcset="https://proxysp.com/wp-content/uploads/2021/09/BlazingSEO-Check-with-Firefox-2.jpg 278w, https://proxysp.com/wp-content/uploads/2021/09/BlazingSEO-Check-with-Firefox-2-167x300.jpg 167w" sizes="(max-width: 278px) 100vw, 278px" /></p>
<p>Scroll to bottom of Options page, and select &#8216;Settings'</p>
<p><img loading="lazy" decoding="async" class="aligncenter wp-image-7955" src="https://www.proxysp.com/wp-content/uploads/2021/09/BlazingSEO-Check-with-Firefox-3.jpg" alt="BlazingSEO Check with Firefox 3" width="694" height="159" srcset="https://proxysp.com/wp-content/uploads/2021/09/BlazingSEO-Check-with-Firefox-3.jpg 843w, https://proxysp.com/wp-content/uploads/2021/09/BlazingSEO-Check-with-Firefox-3-300x69.jpg 300w, https://proxysp.com/wp-content/uploads/2021/09/BlazingSEO-Check-with-Firefox-3-768x176.jpg 768w" sizes="(max-width: 694px) 100vw, 694px" /></p>
<p>On next window, select the &#8216;Manual proxy configuration bubble'</p>
<p>You will then enter the proxy IP into the HTTP Proxy area</p>
<p>Then enter the proxy port into the port blank</p>
<p><img loading="lazy" decoding="async" class="aligncenter size-full wp-image-7957" src="https://www.proxysp.com/wp-content/uploads/2021/09/BlazingSEO-Check-with-Firefox-5.jpg" alt="BlazingSEO Check with Firefox 5" width="539" height="500" srcset="https://proxysp.com/wp-content/uploads/2021/09/BlazingSEO-Check-with-Firefox-5.jpg 539w, https://proxysp.com/wp-content/uploads/2021/09/BlazingSEO-Check-with-Firefox-5-300x278.jpg 300w" sizes="(max-width: 539px) 100vw, 539px" /></p>
<p>Make sure this box is checked</p>
<p>To confirm that your proxy is loaded into the browser, go to google and type &#8216;my ip'. The proxy IP should show</p>
<p><img loading="lazy" decoding="async" class="aligncenter wp-image-7958" src="https://www.proxysp.com/wp-content/uploads/2021/09/BlazingSEO-Check-with-Firefox-6.jpg" alt="BlazingSEO Check with Firefox 6" width="736" height="277" srcset="https://proxysp.com/wp-content/uploads/2021/09/BlazingSEO-Check-with-Firefox-6.jpg 885w, https://proxysp.com/wp-content/uploads/2021/09/BlazingSEO-Check-with-Firefox-6-300x113.jpg 300w, https://proxysp.com/wp-content/uploads/2021/09/BlazingSEO-Check-with-Firefox-6-768x289.jpg 768w" sizes="(max-width: 736px) 100vw, 736px" /></p>
<p>If your proxy IP shows up in google, you can then try loading your preferred website. If it loads, then your proxy is most likely not blocked.</p>
<ul>
<li><em>To remove proxy, just reverse the steps above. </em></li>
</ul>
<p>We have a video showing how to complete this with IP authorization</p>
<div class="su-youtube su-u-responsive-media-yes"><iframe loading="lazy" width="600" height="400" src="https://www.youtube.com/embed/bTipqNk11SQ?" frameborder="0" allowfullscreen allow="autoplay; encrypted-media; picture-in-picture" title=""></iframe></div>
<p>We have a video showing how to complete this with Username/Password authorization</p>
<div class="su-youtube su-u-responsive-media-yes"><iframe loading="lazy" width="600" height="400" src="https://www.youtube.com/embed/iIT3pGLeHMw?" frameborder="0" allowfullscreen allow="autoplay; encrypted-media; picture-in-picture" title=""></iframe></div>
<hr />
<h2 class="heading">What Are Virgin/24 C Block IPs?</h2>
<article id="article-body" class="article-body">Virgin/24 C Block Proxies are proxies that are only used by one single person, on a subnet that is entirely only used by them on proxies that have been located to not have been used by anyone else previously. Which is why they are called &#8220;Virgin&#8221;. The whole subnet is completely dedicated to you, allowing full control, and extreme reliability.<strong>Advantages:</strong></p>
<ul>
<li>Entire subnet dedicated to you</li>
<li>Full control over quality of traffic that is sent through proxies</li>
<li>Extreme vetting process to ensure that the quality of the IP blocks remains long term.</li>
<li>Denoted usage to ensure maximum control over any potential abusive activity.</li>
<li>It hides your IP(or MAC) address while adding security and protecting your privacy.</li>
<li>Private proxies deliver fully anonymous surfing on the internet. It is important to remember that you leave a digital footprint in the form of your IP address when using the web. This means that almost anyone can see you on-line, including hackers and spammers. A private proxy server can almost guarantee your IP address will be invisible.</li>
<li>Higher speed since no one else is working with the same proxy.</li>
<li>Ability to bypass filters and firewalls since a private proxy server can circumvent these types of blocked websites.</li>
<li>Ability to unblock numerous applications and bypass numerous internet restrictions (i.e. unblock You-Tube, Facebook, Twitter at work or school where the “IT administrator” has restricted your access to these and similar sites).</li>
<li>Protect privacy for minimal worry about your personal information being exposed or compromised when you make purchases or surf on the web.</li>
<li>Deliver a higher level of security on internet since a private proxy provides a unique internet address dedicated to only you.</li>
<li>Avoid and block spam successfully.</li>
<li>Get around geographic restrictions (Restricted content based on country).</li>
</ul>
<p>These proxies are best used for any purpose as needed. The proxies will not rotate monthly unless specifically requested.</p>
<p>We are unable to provide less than 256 because that would mean that multiple users could be in control of the subnet, increasing the risk for the whole subnet to get blocked by websites by one of the users.</p>
<p><strong>Typical Uses of Dedicated Proxies:</strong></p>
<p>Social Media<br />
Games<br />
Account Creation/Use<br />
General Browsing<br />
SEO</p>
<p><strong>Locations:</strong></p>
<p>USA &#8211; Los Angeles</p>
<hr />
<h2>Can My ISP See that I'm Using a Proxy or Block it?</h2>
<p>We enforce high level proxy anonymity protocol to ensure that your IP does not leak out. Your ISP will not recognize our proxy IP usage.</p>
<hr />
<h2>Why am I Continuously Prompted for Username/Password?</h2>
<p>IP authorization uses port 3128. If you have incorrectly set the proxy’s port to 4444 (which is for username/password authorization), the proxies will continuously prompt you for the username/password. Please make sure to set the correct authorization method on your proxy DASHBOARD. If you chose IP authorization, the proxy dashboard should be set to IP authorization accordingly. Be sure you have properly authorized your IP in your dashboard. You can simply follow this video guide below.</p>
<div class="su-youtube su-u-responsive-media-yes"><iframe loading="lazy" width="600" height="400" src="https://www.youtube.com/embed/Q-NSzU1GDp8?" frameborder="0" allowfullscreen allow="autoplay; encrypted-media; picture-in-picture" title=""></iframe></div>
<p>Otherwise, if the proxy dashboard is set for username/password authorization, and if you configure your proxies to use port 3128 for IP authorization, the proxies will continuously prompt you for the username/password, as the proxies will follow your proxy dashboard’s settings.</p>
<hr />
<h2><strong>What Should I do If My</strong> Proxy<strong> Is Banned?</strong></h2>
<p>We provide free proxy replacements in which you may use to replace the banned proxy IP. Kindly login to your proxy DASHBOARD and browse to the “Proxy Replacements” tab, and replace the proxy IP that you find unsuitable for your usage. Once replaced, our system will assign a new proxy IP as a replacement. You can also follow this video guide below on how to replace your proxies within your dashboard.</p>
<div class="su-youtube su-u-responsive-media-yes"><iframe loading="lazy" width="600" height="400" src="https://www.youtube.com/embed/oxL8OAxPeRQ?" frameborder="0" allowfullscreen allow="autoplay; encrypted-media; picture-in-picture" title=""></iframe></div>
<p>DISCLAIMER: Each replacement will use a single proxy replacement credit. If you purchased 10 proxies, you are entitled to 10 proxy replacements per billing cycle. The replacement credit will be replenished on the next billing cycle. Kindly use the replacements cautiously, as we are unable to replenish the credit manually.</p>
</article>
<hr />
</div>
</div>
<div>
<h4 id="references" class="ftwp-heading">References,</h4>
</div>
<ul>
<li><a href="https://portal.blazingseollc.com/en/support/solutions/articles/64000256628-why-are-my-proxies-not-working-" target="_blank" rel="nofollow noopener">https://portal.blazingseollc.com/en/support/solutions/articles/64000256628-why-are-my-proxies-not-working-</a></li>
<li><a href="https://portal.blazingseollc.com/en/support/solutions/articles/64000256603-how-can-i-check-to-see-if-a-proxy-is-blocked-from-a-certain-website" target="_blank" rel="nofollow noopener">https://portal.blazingseollc.com/en/support/solutions/articles/64000256603-how-can-i-check-to-see-if-a-proxy-is-blocked-from-a-certain-website</a></li>
<li><a href="https://portal.blazingseollc.com/en/support/solutions/articles/64000256611-what-are-virgin-24-c-block-ips" target="_blank" rel="nofollow noopener">https://portal.blazingseollc.com/en/support/solutions/articles/64000256611-what-are-virgin-24-c-block-ips</a></li>
<li><a href="https://portal.blazingseollc.com/en/support/solutions/articles/64000262802-can-my-isp-see-that-i-m-using-a-proxy-or-block-it-" target="_blank" rel="nofollow noopener">https://portal.blazingseollc.com/en/support/solutions/articles/64000262802-can-my-isp-see-that-i-m-using-a-proxy-or-block-it-</a></li>
<li><a href="https://portal.blazingseollc.com/en/support/solutions/articles/64000262806-why-am-i-continuously-prompted-for-username-password" target="_blank" rel="nofollow noopener">https://portal.blazingseollc.com/en/support/solutions/articles/64000262806-why-am-i-continuously-prompted-for-username-password</a></li>
<li><a href="https://portal.blazingseollc.com/en/support/solutions/articles/64000263276-what-should-i-do-if-my-proxy-is-banned-" target="_blank" rel="nofollow noopener">https://portal.blazingseollc.com/en/support/solutions/articles/64000263276-what-should-i-do-if-my-proxy-is-banned-</a></li>
</ul>
<hr />
<blockquote><p><strong>Disclaimer</strong>: This part of the content is mainly from the merchant. If the merchant does not want it to be displayed on my website, please <a href="https://www.proxysp.com/contact-us/">contact us</a> to delete your content.</p></blockquote>
]]></content:encoded>
					
					<wfw:commentRss>https://proxysp.com/blazingseo-proxies-troubleshooting/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">7666</post-id>	</item>
		<item>
		<title>Proxy Pilot (By BlazingSEO) : Learn Manuals Before You Buy</title>
		<link>https://proxysp.com/proxy-pilot/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=proxy-pilot</link>
					<comments>https://proxysp.com/proxy-pilot/#respond</comments>
		
		<dc:creator><![CDATA[admin]]></dc:creator>
		<pubDate>Thu, 01 Jan 1970 00:00:00 +0000</pubDate>
				<category><![CDATA[BlazingSEO Proxies]]></category>
		<guid isPermaLink="false">https://www.proxysp.com/?p=7668</guid>

					<description><![CDATA[Do you know what Proxy Pilot does and how it works? By learning this article, you will master the above knowledge and know-how to troubleshoot Proxy &#8230;<p class="read-more"> <a class="ast-button" href="https://proxysp.com/proxy-pilot/"> <span class="screen-reader-text">Proxy Pilot (By BlazingSEO) : Learn Manuals Before You Buy</span> Read More &#187;</a></p>]]></description>
										<content:encoded><![CDATA[<blockquote><p>Do you know what Proxy Pilot does and how it works? By learning this article, you will master the above knowledge and know-how to troubleshoot Proxy Pilot.</p></blockquote>
<h2 class="heading">What Is Proxy Pilot?</h2>
<h3 id="Description" dir="ltr" data-identifyelement="495"><span data-identifyelement="496">Description</span></h3>
<p dir="ltr" data-identifyelement="497"><span data-identifyelement="498">Proxy Pilot is a software that completely manages your proxy lists intelligently. This means you can build your system to be more flexible by using this “microservice” that handles a significant workload that is otherwise put into your main code base.</span></p>
<hr />
<h3 id="Features" dir="ltr" data-identifyelement="501"><span data-identifyelement="502">Features</span></h3>
<p>The list of current features are:</p>
<ul>
<li>Specific cooldowns between each proxy attempt</li>
<li>Specific cooldown after a ban is detected</li>
<li>Ban detection (the certificate you install on your server allows us to decrypt your traffic as a man-in-the-middle attack and read the resulting HTML for ban messages), specific per each site</li>
<li>Optimal proxy usage (round-robin at first, and then once various cooldown timers are started, it will use the proxies that are most cooled-down)</li>
<li>Automatically downloads your proxy list from a proxy API endpoint</li>
<li>Geo-targeting, if you use multiple countries in your proxy list</li>
<li>Advanced statistics powered by ELK (see below)</li>
</ul>
<hr />
<h3 id="Powered-by-ELK" dir="ltr" data-identifyelement="534"><span data-identifyelement="535">Powered by ELK</span></h3>
<p dir="ltr" data-identifyelement="536"><span data-identifyelement="537">The </span><a href="https://www.elastic.co/what-is/elk-stack" target="_blank" rel="nofollow noopener" data-identifyelement="538"><span data-identifyelement="539">ELK stack</span></a><span data-identifyelement="540"> is one that has grown massively in popularity over the past few years… and Proxy Pilot is powered by it! See the amazing statistics that you will have at your fingertips through Kibana’s amazing visualizations:</span></p>
<p dir="ltr" data-identifyelement="536"><img loading="lazy" decoding="async" class="aligncenter size-full wp-image-7900" src="https://www.proxysp.com/wp-content/uploads/2021/09/Powered-by-ELK1.jpg" alt="Powered by ELK1" width="615" height="451" srcset="https://proxysp.com/wp-content/uploads/2021/09/Powered-by-ELK1.jpg 615w, https://proxysp.com/wp-content/uploads/2021/09/Powered-by-ELK1-300x220.jpg 300w" sizes="(max-width: 615px) 100vw, 615px" /></p>
<p dir="ltr" data-identifyelement="536"><img loading="lazy" decoding="async" class="aligncenter size-full wp-image-8000" src="https://www.proxysp.com/wp-content/uploads/2021/09/Powered-by-ELK11.jpg" alt="Powered by ELK11" width="614" height="338" srcset="https://proxysp.com/wp-content/uploads/2021/09/Powered-by-ELK11.jpg 614w, https://proxysp.com/wp-content/uploads/2021/09/Powered-by-ELK11-300x165.jpg 300w" sizes="(max-width: 614px) 100vw, 614px" /></p>
<hr />
<div class="icon">
<div class="icon">
<h3 id="what-it-is-and-is-not" dir="ltr" data-identifyelement="555"><span dir="ltr" data-identifyelement="556">What It Is, and Is Not</span></h3>
<p dir="ltr" data-identifyelement="557"><span dir="ltr" data-identifyelement="558">One confusion we get from interested users of Proxy Pilot is what does Proxy Pilot do, and not do. Here is our <a href="#general-troubleshooting-for-proxy-pilot">General Troubleshooting</a>.</span></p>
<p dir="ltr" data-identifyelement="557"><span dir="ltr" data-identifyelement="558">Therefore, it's important to make the distinction between how Proxy Pilot can <em dir="ltr">help</em> you, versus its inability to prevent many common anti-scraping technologies when you use your own software.</span></p>
<p dir="ltr" data-identifyelement="561"><span data-identifyelement="562">What it does:</span></p>
<ul data-identifyelement="563">
<li dir="ltr" data-identifyelement="564">
<p dir="ltr" data-identifyelement="565"><span data-identifyelement="566">All listed features above</span></p>
</li>
<li dir="ltr" data-identifyelement="567">
<p dir="ltr" data-identifyelement="568"><span data-identifyelement="569">Allows you to separate proxy code from your main code base and into a separate microservice</span></p>
</li>
<li dir="ltr" data-identifyelement="570">
<p dir="ltr" data-identifyelement="571"><span dir="ltr" data-identifyelement="572">100% open-sourced (coming Q4 2021)</span></p>
</li>
</ul>
<p dir="ltr" data-identifyelement="577"><span data-identifyelement="578">What it does </span><span data-identifyelement="579">not</span><span data-identifyelement="580"> do:</span></p>
<ul data-identifyelement="581">
<li dir="ltr" data-identifyelement="582">
<p dir="ltr" data-identifyelement="583"><span data-identifyelement="584">It does not guarantee 100% success rate if your proxy pools and settings are not appropriate.</span></p>
</li>
<li dir="ltr" data-identifyelement="582">
<p dir="ltr" data-identifyelement="583"><span style="font-size: 16px;">Example:  if you want to scrape 1m requests/hour to domain.com, and only input 10 proxies into your proxy pool, you will most likely receive a ban on the target website. When this happens, all 10 of your proxies would go into a “ban cooldown”, and Proxy Pilot will return a ‘No Proxies’ error message.</span></p>
</li>
<li dir="ltr" data-identifyelement="582">
<p dir="ltr" data-identifyelement="583"><span dir="ltr" style="font-size: 16px;" data-identifyelement="594">Proxy Pilot does not “charge per successful scrape”. If you’d like to offload </span><span style="font-size: 16px;" data-identifyelement="595">all</span><span style="font-size: 16px;" data-identifyelement="596"> portions of scraping to us then we recommend you consider our </span><a style="font-size: 16px; background-color: #ffffff;" href="http://scrapingrobot.com/api" data-identifyelement="597" target="_blank" rel="noopener"><span data-identifyelement="598">Scraping Robot API</span></a><span dir="ltr" style="font-size: 16px;" data-identifyelement="599">. Our Scraping Robot API handles all browser management, proxy management, and ensures 100% success back to your software. Proxy Pilot is only a proxy manager, which is highly dependent on the proxies you provide it. If you provide low quality proxy IP addresses, or configure your software incorrectly, then you will get low quality results.</span></p>
</li>
<li dir="ltr" data-identifyelement="582">
<p dir="ltr" data-identifyelement="583"><span dir="ltr" data-identifyelement="605">Proxy Pilot does not provide you free proxies or access to a specific proxy pool. You must provide it with the proxies you wish to use. Again, if you do not want to purchase proxies or manage them at all, then our Scraping Robot API would be recommended. </span></p>
</li>
</ul>
<hr />
<h2 class="heading">Proxy Pilot Setup Instructions</h2>
<h3 id="Technical-Setup-Explanation---How-Does-It-Work?" dir="ltr">Technical Setup Explanation &#8211; How Does It Work?</h3>
<p>If you haven’t read What Is Proxy Pilot? we recommend reading the business overview article first.</p>
<p>This article outlines the technical details on how to implement Proxy Pilot. First, let’s define how it works:</p>
<p dir="ltr"><img loading="lazy" decoding="async" class="aligncenter size-full wp-image-7902" src="https://www.proxysp.com/wp-content/uploads/2021/09/Technical-Setup-Explanation.jpg" alt="Technical Setup Explanation" width="629" height="389" srcset="https://proxysp.com/wp-content/uploads/2021/09/Technical-Setup-Explanation.jpg 629w, https://proxysp.com/wp-content/uploads/2021/09/Technical-Setup-Explanation-300x186.jpg 300w" sizes="(max-width: 629px) 100vw, 629px" /></p>
<p dir="ltr"><strong>Key components:</strong></p>
<ol>
<li dir="ltr">
<p dir="ltr">Install a custom certificate in your software. For most software, this is 1-2 lines of code to do this.</p>
<p>Once installed, this allows us to emulate what a man-in-the-middle-attack does, which decrypts your HTTPS traffic so we can read the HTML. Once we are able to read the full HTML of your requests, we can detect bans and do the appropriate retries.</li>
<li dir="ltr">
<p dir="ltr">You connect to a central Proxy Pilot server (self-hosted or managed hosting).</p>
<p>We will provide you a single proxy IP (ip: port with IP authorization, or ip:port:user: pass for user: pass authorization). You will send all requests to this single proxy gateway and from there the Proxy Pilot system will take over and forward your request to the appropriate proxy.</li>
<li dir="ltr">
<p dir="ltr">Your actual proxy list</p>
<p>As mentioned in What Is Proxy Pilot? you must provide your own proxies to the system. These proxies are the ones that Proxy Pilot forwards your requests to.</li>
</ol>
<hr />
<h3 id="Programming-Language-Implementations" dir="ltr">Programming Language Implementations</h3>
<p dir="ltr">Please see the following links for the programming language of your choice to implement Proxy Pilot into. For most languages, it requires less than 2 lines of code to install the custom certificate, and from that point on you will use the proxy gateway the same way you use a normal proxy.</p>
<p dir="ltr">See setup instructions for the following languages:</p>
<hr />
<h4 dir="ltr"><strong>1. Node.js (Requests)</strong></h4>
<div data-identifyelement="482">
<h5 data-identifyelement="485"><strong><span dir="ltr" data-identifyelement="486">Prerequisites</span></strong></h5>
</div>
<p dir="ltr" data-identifyelement="504"><span dir="ltr" data-identifyelement="505">You should have the following installed:</span></p>
<ul data-identifyelement="506">
<li dir="ltr" data-identifyelement="507">
<p dir="ltr" data-identifyelement="508"><span data-identifyelement="509">Latest Node.js version</span></p>
</li>
<li dir="ltr" data-identifyelement="510">
<p dir="ltr" data-identifyelement="511"><span dir="ltr" data-identifyelement="512">Requests library:</span><br />
<a href="https://www.npmjs.com/package/request" target="_blank" rel="nofollow noopener">https://www.npmjs.com/package/request</a></p>
</li>
</ul>
<h5 dir="ltr" data-identifyelement="533"><strong><span dir="ltr" data-identifyelement="534">Example code</span></strong></h5>
<p dir="ltr" data-identifyelement="537"><strong>Required lines to use Proxy Pilot:</strong></p>
<ul>
<li dir="ltr">rejectUnauthorized: false
<ul>
<li dir="ltr">rejectUnauthorized: false &#8220;ignores&#8221; the certificate warnings</li>
</ul>
</li>
<li dir="ltr">(OPTIONAL) &#8211; If you wish to have a secure connection between your server and our server, you can install our certificate and use it in Node.js. For most users, this is not necessary and you can simply &#8220;Ignore&#8221; the certificate errors. You can <a dir="ltr" href="https://drive.google.com/file/d/1_GTicu0qgdVQZVwzPyBGzH_lv0k_Sonh/view" target="_blank" rel="nofollow noopener">download the certificate here</a>.
<ul>
<li dir="ltr" data-identifyelement="540">// const cert = fs.readFileSync(path.resolve(__dirname, &#8216;./public/ca.pem'));</li>
<li dir="ltr" data-identifyelement="541">// ca: cert</li>
<li dir="ltr" data-identifyelement="542">// tunnel: true,</li>
<li dir="ltr" data-identifyelement="543">(OPTIONAL &#8211; don't use if you are not geo-targetting)
<ul data-identifyelement="544">
<li dir="ltr" data-identifyelement="545">// proxyHeaderWhiteList: [&#8216;X-Sprious-Region'],<br data-identifyelement="546" />headers: {<br data-identifyelement="547" />// &#8216;X-ProxyPilot-Region': &#8216;GB',</li>
</ul>
</li>
</ul>
</li>
</ul>
<div>
<pre class="line-numbers language-javascript" contenteditable="false" data-code-brush="JavaScript"><code class=" language-javascript"><span class="token keyword">const</span> fs <span class="token operator">=</span> <span class="token function">require</span><span class="token punctuation">(</span><span class="token string">'fs'</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
<span class="token keyword">const</span> path <span class="token operator">=</span> <span class="token function">require</span><span class="token punctuation">(</span><span class="token string">'path'</span><span class="token punctuation">)</span><span class="token punctuation">;</span>

<span class="token comment" spellcheck="true">/* Note: please replace the ./public/ca.pem with a local path to the ca.pem file on your server and simply remove lines with X-ProxyPilot-Region if you don’t need to use geo-targeting feature*/</span>

<span class="token comment" spellcheck="true">// const cert = fs.readFileSync(path.resolve(__dirname, './public/ca.pem'));</span>
<span class="token keyword">const</span> request <span class="token operator">=</span> <span class="token function">require</span><span class="token punctuation">(</span><span class="token string">'request'</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
<span class="token function">request</span><span class="token punctuation">(</span>
    <span class="token punctuation">{</span>
        url<span class="token punctuation">:</span> <span class="token string">'https://www.amazon.com/dp/B07HNW68ZC/'</span><span class="token punctuation">,</span>
        proxy<span class="token punctuation">:</span> <span class="token string">'http://PROXY_LOGIN:PROXY_PASS@PROXY_IP:PROXY_PORT'</span><span class="token punctuation">,</span>
        <span class="token comment" spellcheck="true">// ca: cert,</span>
        <span class="token comment" spellcheck="true">// tunnel: true,</span>
        followAllRedirects<span class="token punctuation">:</span> <span class="token boolean">true</span><span class="token punctuation">,</span>
        timeout<span class="token punctuation">:</span> <span class="token number">60000</span><span class="token punctuation">,</span>
        method<span class="token punctuation">:</span> <span class="token string">"GET"</span><span class="token punctuation">,</span>
        rejectUnauthorized<span class="token punctuation">:</span> <span class="token boolean">false</span><span class="token punctuation">,</span>
        gzip<span class="token punctuation">:</span> <span class="token boolean">true</span><span class="token punctuation">,</span>
        <span class="token comment" spellcheck="true">// proxyHeaderWhiteList: ['X-Sprious-Region'],</span>
        headers<span class="token punctuation">:</span> <span class="token punctuation">{</span>
            <span class="token comment" spellcheck="true">// 'X-ProxyPilot-Region': 'GB',</span>
            <span class="token string">'User-Agent'</span><span class="token punctuation">:</span> <span class="token string">'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/87.0.4280.141 Safari/537.36'</span><span class="token punctuation">,</span>
        <span class="token punctuation">}</span>
    <span class="token punctuation">}</span><span class="token punctuation">,</span>
    <span class="token punctuation">(</span>err<span class="token punctuation">,</span> response<span class="token punctuation">,</span> body<span class="token punctuation">)</span> <span class="token operator">=</span><span class="token operator">&gt;</span> <span class="token punctuation">{</span>
        console<span class="token punctuation">.</span><span class="token function">log</span><span class="token punctuation">(</span>err<span class="token punctuation">,</span> body<span class="token punctuation">)</span><span class="token punctuation">;</span>
    <span class="token punctuation">}</span>
<span class="token punctuation">)</span><span class="token punctuation">;</span></code></pre>
</div>
<hr />
<h4 dir="ltr"><strong>2. Node.js with Puppeteer</strong></h4>
<h5 data-identifyelement="485"><strong><span dir="ltr" data-identifyelement="486">Prerequisites</span></strong></h5>
</div>
<div class="icon">
<p><span style="font-size: 16px;">You should have the following installed:</span></p>
<ul>
<li dir="ltr">
<p dir="ltr">Latest Node.js version</p>
</li>
<li dir="ltr">
<p dir="ltr"><span dir="ltr">Latest <a href="https://www.npmjs.com/package/puppeteer" target="_blank" rel="nofollow noopener">Puppeteer</a></span></p>
</li>
<li dir="ltr"><span dir="ltr">(Optional recommendation) <a href="https://github.com/berstend/puppeteer-extra/tree/master/packages/puppeteer-extra-plugin-stealth" target="_blank" rel="nofollow noopener">Puppeteer Stealth</a></span></li>
</ul>
<h5>Example code</h5>
<p dir="ltr"><strong dir="ltr">Required lines to use Proxy Pilot:</strong></p>
<ul>
<li dir="ltr">const browser = await puppeteer.launch({<br />
args: [&#8216;&#8211;no-sandbox', &#8216;&#8211;disable-setuid-sandbox', &#8216;&#8211;proxy-server=' + anonymizeProxy, <strong>&#8216;&#8211;ignore-certificate-errors'</strong>],<br />
});</p>
<ul>
<li dir="ltr">By ignoring the certificate on your server you do not need to install the certificate.</li>
</ul>
</li>
</ul>
<div>
<div>
<div class="prism-show-language">
<div class="prism-show-language-label">JavaScript</div>
</div>
<pre class="line-numbers language-javascript" contenteditable="false" data-code-brush="JavaScript"><code class=" language-javascript"><span class="token keyword">const</span> puppeteer <span class="token operator">=</span> <span class="token function">require</span><span class="token punctuation">(</span><span class="token string">'puppeteer'</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
<span class="token keyword">const</span> proxyChain <span class="token operator">=</span> <span class="token function">require</span><span class="token punctuation">(</span><span class="token string">'proxy-chain'</span><span class="token punctuation">)</span><span class="token punctuation">;</span>

<span class="token punctuation">(</span><span class="token keyword">async</span> <span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token operator">=</span><span class="token operator">&gt;</span> <span class="token punctuation">{</span>
    <span class="token keyword">const</span> anonymizeProxy <span class="token operator">=</span> <span class="token keyword">await</span> proxyChain<span class="token punctuation">.</span><span class="token function">anonymizeProxy</span><span class="token punctuation">(</span><span class="token string">'http://PROXY_LOGIN:PROXY_PASS@PROXY_IP:PROXY_PORT'</span><span class="token punctuation">)</span><span class="token punctuation">;</span>

    <span class="token keyword">const</span> browser <span class="token operator">=</span> <span class="token keyword">await</span> puppeteer<span class="token punctuation">.</span><span class="token function">launch</span><span class="token punctuation">(</span><span class="token punctuation">{</span>
        args<span class="token punctuation">:</span> <span class="token punctuation">[</span><span class="token string">'--no-sandbox'</span><span class="token punctuation">,</span> <span class="token string">'--disable-setuid-sandbox'</span><span class="token punctuation">,</span> <span class="token string">'--proxy-server='</span> <span class="token operator">+</span> anonymizeProxy<span class="token punctuation">,</span> <span class="token string">'--ignore-certificate-errors'</span><span class="token punctuation">]</span><span class="token punctuation">,</span>
    <span class="token punctuation">}</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
    <span class="token keyword">const</span> page <span class="token operator">=</span> <span class="token keyword">await</span> browser<span class="token punctuation">.</span><span class="token function">newPage</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
    <span class="token keyword">await</span> page<span class="token punctuation">.</span><span class="token function">goto</span><span class="token punctuation">(</span><span class="token string">'https://www.amazon.com/p/dp/B08GL2XTV6'</span><span class="token punctuation">)</span><span class="token punctuation">;</span>

    <span class="token keyword">let</span> pageTitle <span class="token operator">=</span> <span class="token keyword">await</span> page<span class="token punctuation">.</span><span class="token function">title</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
    <span class="token keyword">let</span> element <span class="token operator">=</span> <span class="token keyword">await</span> page<span class="token punctuation">.</span><span class="token function">$</span><span class="token punctuation">(</span><span class="token string">"#priceblock_ourprice"</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
    <span class="token keyword">let</span> price <span class="token operator">=</span> <span class="token keyword">await</span> <span class="token punctuation">(</span><span class="token keyword">await</span> element<span class="token punctuation">.</span><span class="token function">getProperty</span><span class="token punctuation">(</span><span class="token string">'textContent'</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">.</span><span class="token function">jsonValue</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span><span class="token punctuation">;</span>

    console<span class="token punctuation">.</span><span class="token function">log</span><span class="token punctuation">(</span>price <span class="token operator">+</span> <span class="token string">' - '</span> <span class="token operator">+</span> pageTitle<span class="token punctuation">)</span><span class="token punctuation">;</span>
    <span class="token comment" spellcheck="true">// should be '$199.00 - LOVESHACKFANCY Women's Antonella Dress, Brilliant Blue, 4 at Amazon Women’s Clothing store'</span>

    <span class="token keyword">await</span> browser<span class="token punctuation">.</span><span class="token function">close</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
    <span class="token keyword">await</span> proxyChain<span class="token punctuation">.</span><span class="token function">closeAnonymizedProxy</span><span class="token punctuation">(</span>anonymizeProxy<span class="token punctuation">,</span> <span class="token boolean">true</span><span class="token punctuation">)</span>
<span class="token punctuation">}</span><span class="token punctuation">)</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span></code></pre>
</div>
</div>
<div data-identifyelement="550">
<hr />
</div>
<h4 dir="ltr"><strong>3. Curl</strong></h4>
<div data-identifyelement="482">
<h5 data-identifyelement="485"><span dir="ltr" data-identifyelement="486">Prerequisites</span></h5>
</div>
<p dir="ltr" data-identifyelement="495"><span data-identifyelement="496">You should have the following installed:</span></p>
<ul data-identifyelement="497">
<li dir="ltr" data-identifyelement="498">
<p dir="ltr" data-identifyelement="499"><span dir="ltr" data-identifyelement="500">You should be able to run curl on your machine<br data-identifyelement="501" /></span></p>
</li>
</ul>
<h5 dir="ltr" data-identifyelement="513"><span data-identifyelement="514">Example code</span></h5>
<p dir="ltr" data-identifyelement="517"><strong dir="ltr" data-identifyelement="518">Required lines to use Proxy Pilot:</strong></p>
<ul data-identifyelement="519">
<li dir="ltr" data-identifyelement="520">-k &#8211;compressed \
<ul data-identifyelement="521">
<li dir="ltr" data-identifyelement="522">By using the &#8220;-k&#8221; parameter in curl, it will IGNORE the custom certificate requirement to use Proxy Pilot.</li>
</ul>
</li>
<li dir="ltr" data-identifyelement="523">(OPTIONAL) If you want to use the geo-targeting feature, please pass:
<ul data-identifyelement="524">
<li dir="ltr" data-identifyelement="525">&#8211;proxy-header &#8216;X-Sprious-Region: US' \</li>
</ul>
</li>
</ul>
<div data-identifyelement="528">
<div data-identifyelement="529">
<pre class="line-numbers language-generic" contenteditable="false" data-code-brush="Generic Language" data-identifyelement="530"><code class=" Language language-generic">curl -s 'https://www.amazon.com/dp/B07HNW68ZC/' \<br data-identifyelement="531" />     -H 'User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/87.0.4280.141 Safari/537.36' \<br data-identifyelement="532" />     -k --compressed \<br data-identifyelement="533" />     -x 'PROXY_LOGIN:PROXY_PASS@PROXY_IP:PROXY_PORT'</code></pre>
</div>
</div>
<hr />
<h4 dir="ltr"><strong>4. Python (Requests)</strong></h4>
<div>
<h5><span dir="ltr">Prerequisites</span></h5>
</div>
<p dir="ltr">You should have the following installed:</p>
<ul>
<li dir="ltr">
<p dir="ltr"><span dir="ltr">Latest Python</span></p>
</li>
<li dir="ltr">
<p dir="ltr"><span dir="ltr">Requests library:<br />
</span><a dir="ltr" href="https://docs.python-requests.org/en/latest/" target="_blank" rel="noopener"> https://docs.python-requests.org/en/latest/</a></p>
</li>
</ul>
<h5 dir="ltr">Example code</h5>
<p dir="ltr"><strong dir="ltr">Required lines to use Proxy Pilot:</strong></p>
<ul>
<li dir="ltr">r = requests.get(url, headers=headers, proxies=proxies, <strong>verify=False</strong>)
<ul>
<li dir="ltr">verify=False &#8220;ignores&#8221; the certificate warnings</li>
</ul>
</li>
<li dir="ltr">(OPTIONAL)  # r = requests.get(url, headers=headers, proxies=proxies, verify='./public/ca.pem&#8221;)
<ul>
<li dir="ltr">If you wish to have a secure connection between your server and our server, you can install our certificate and use it in Python. For most users, this is not necessary and you can simply &#8220;Ignore&#8221; the certificate errors. You can <a href="https://drive.google.com/file/d/1_GTicu0qgdVQZVwzPyBGzH_lv0k_Sonh/view" target="_blank" rel="noopener noreferrer">download the certificate here.</a></li>
</ul>
</li>
</ul>
<div></div>
<div>
<pre class="line-numbers language-python" contenteditable="false" data-code-brush="Python"><code class=" language-python">import requests

url = "https://www.amazon.com/dp/B07HNW68ZC/"
proxies = {
    "https": f"http://PROXY_LOGIN:PROXY_PASS@PROXY_IP:PROXY_PORT/",
    "http": f"http://PROXY_LOGIN:PROXY_PASS@PROXY_IP:PROXY_PORT/"
}
headers = {
    'user-agent': 'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/87.0.4280.141 Safari/537.36',
    'content-encoding': 'gzip'
}

# r = requests.get(url, headers=headers, proxies=proxies, verify='./public/ca.pem'')
r = requests.get(url, headers=headers, proxies=proxies, verify=False)

print(f"Response Body: {r.text}\n"
    "Request Headers:"
    f"{r.request.headers}\n\n"
    f"Response Time: {r.elapsed.total_seconds()}\n"
    f"Response Code: {r.status_code}\n"
    f"Response Headers: {r.headers}\n\n"
    f"Response Cookies: {r.cookies.items()}\n\n"
    f"Requesting {url}\n"
)</code></pre>
</div>
<hr />
<h4 dir="ltr"><strong><span dir="ltr">5. Firefox Browser</span></strong></h4>
<div>
<h5><span dir="ltr">Prerequisites</span></h5>
</div>
<p dir="ltr">You should have the following installed:</p>
<ul>
<li dir="ltr">
<p dir="ltr"><span dir="ltr">Latest Firefox version<br />
</span></p>
</li>
</ul>
<p dir="ltr"><span dir="ltr">You should download the custom certificate:</span></p>
<ul>
<li dir="ltr"><span dir="ltr"><a href="https://drive.google.com/file/d/1_GTicu0qgdVQZVwzPyBGzH_lv0k_Sonh/view" target="_blank" rel="nofollow noopener">https://drive.google.com/file/d/1_GTicu0qgdVQZVwzPyBGzH_lv0k_Sonh/view</a><br />
</span></li>
</ul>
<h5 dir="ltr"><span dir="ltr">How to use Proxy Pilot in Firefox<br />
</span></h5>
<p dir="ltr"><strong dir="ltr"><span dir="ltr">NOTE OF CAUTION: </span></strong>By following the instructions below you are essentially allowing our server to read the pages that you visit. This is dangerous if you intend to use your browser for normal activity like using your bank account. Please only proceed if you intend to use our certificate with your proxy activities such as web scraping &#8211; DO NOT use it for personal use!</p>
<p><span dir="ltr">In Firefox you can import your certificate by following these steps:</span></p>
<ol>
<li dir="ltr">
<p dir="ltr"><span dir="ltr">Settings → Privacy & Security → &#8220;View certificates&#8221; → &#8220;import&#8221;</span></p>
</li>
<li dir="ltr">
<p dir="ltr"><span dir="ltr">Select the CA.pem file that you saved earlier</span></p>
</li>
<li dir="ltr">
<p dir="ltr">check the checkbox &#8220;Trust this to identify websites&#8221; → &#8216;OK'</p>
</li>
<li dir="ltr">
<p dir="ltr">Click ‘OK'</p>
</li>
</ol>
<p>Then you need to specify your browser to use the PM proxy server:</p>
<ol>
<li dir="ltr">
<p dir="ltr">Settings → General → Network Settings → “Settings”</p>
</li>
<li dir="ltr">
<p dir="ltr">Manual proxy settings</p>
</li>
<li dir="ltr">
<p dir="ltr">HTTP Proxy: PROXY_IP Port: PROXY_PORT</p>
</li>
<li dir="ltr">
<p dir="ltr">Select &#8220;Also use this proxy for FTP and HTTPS&#8221;</p>
</li>
<li dir="ltr">
<p dir="ltr">Click “OK”</p>
</li>
</ol>
<p dir="ltr">Visit<a href="http://amazon.com/" target="_blank" rel="nofollow noopener"> amazon.com</a>. When the browser asks for login and password, enter:</p>
<ul>
<li dir="ltr"><span dir="ltr">login: </span>PROXY_LOGIN</li>
<li dir="ltr"><span dir="ltr">password: </span>PROXY_PASS</li>
</ul>
<hr />
<h3 id="Proxy-Manager-Error-codes" data-pm-slice="1 1 []">Proxy Manager Error codes</h3>
<table data-autosize="false" data-layout="default" data-number-column="false">
<thead>
<tr>
<th class="pm-table-header-content-wrap" data-colwidth="140"><strong>HTTP Response Code</strong></th>
<th class="pm-table-header-content-wrap" data-colwidth="165"><strong>Response Content</strong></th>
<th class="pm-table-header-content-wrap" data-colwidth="454"><strong>Description</strong></th>
</tr>
</thead>
<tbody>
<tr>
<td class="pm-table-cell-content-wrap" data-colwidth="140"><span class="code">500</span></td>
<td class="pm-table-cell-content-wrap" data-colwidth="165"><span class="code">Error retry limit</span></td>
<td class="pm-table-cell-content-wrap" data-colwidth="454">
<p dir="ltr">Proxy Pilot reached the limit of retries trying to fetch a specific URL</p>
<p dir="ltr">You may retry your request again.</p>
</td>
</tr>
<tr>
<td class="pm-table-cell-content-wrap" data-colwidth="140"><span class="code">500</span></td>
<td class="pm-table-cell-content-wrap" data-colwidth="165"><span class="code">No proxies</span></td>
<td class="pm-table-cell-content-wrap" data-colwidth="454">
<p dir="ltr">There is currently not enough proxies in your proxy pool. This might either indicate that all proxies are in cooldown, or if the geo-targeting header is specified &#8211; it might also indicate that there are no proxies for such region in your proxy pool.</p>
<p dir="ltr">Either retry your request again or check if the specified geo-targeting header matches the available proxies in your proxy pool. Read here for more information about <a href="#what-it-is-and-is-not">What Proxy Pilot Is, and Is Not here</a>.</p>
</td>
</tr>
</tbody>
</table>
</div>
<hr />
<div class="icon">
<h3 id="How-do-retries-work?-Are-you-doing-the-scraping-on-my-behalf?" dir="ltr">How do Retries Work? Are You doing the Scraping on My Behalf?</h3>
<p dir="ltr">This question is a common one given the intricacies of what’s going on in the solution. The simple answer:  no, we are not scraping on your behalf.</p>
<p dir="ltr">When the following flow happens:</p>
<ol>
<li dir="ltr">
<p dir="ltr">You send a request to scrape domain.com to Proxy Pilot gateway</p>
</li>
<li dir="ltr">
<p dir="ltr">Proxy Pilot forwards your request to proxyA</p>
</li>
<li dir="ltr">
<p dir="ltr">proxyA returns a banned HTML page back to Proxy Pilot</p>
</li>
<li dir="ltr">
<p dir="ltr">Proxy Pilot sees this is a ban, and then sends this same request to proxyB</p>
</li>
<li dir="ltr">
<p dir="ltr">proxyB returns a successful HTML page to Proxy Pilot</p>
</li>
<li dir="ltr">
<p dir="ltr">Proxy Pilot returns the successful HTML back to you (the user)</p>
</li>
</ol>
<p dir="ltr">… on step #4 we have a common question which asks whether or not we are using our server resources to do the scraping, or if your server compute resources are doing the scraping. The answer is that your server is still doing the act of the scraping.</p>
<p dir="ltr">The best way to think about it is when your internet disconnects midway through a connection to a website and your browser shows you a longer-than-usual “Loading” symbol as your internet attempts to do a retry. This is mostly what is happening with Proxy Pilot:  as it makes retries on your behalf, your software is keeping the connection tunnel open while it waits for a response from Proxy Pilot.</p>
<p dir="ltr">The compute consumption is actually happening on Proxy Pilot by resending the exact same request headers and body. By resending the exact same headers and body, we have proven with extensive testing that it does not affect the results of your scraping (i.e. &#8211; if you are using Puppeteer on Chromium).</p>
<p dir="ltr">The best way to prove this yourself with Proxy Pilot:  connect to a javascript-only website (like Google Maps) with your browser. You will notice that you will be able to load the page, because javascript is still being executed by your browser while that tunnel connection is still open.</p>
<p dir="ltr">Confusing? We agree! Please sign up for Proxy Pilot and we’re happy to give you free proxies to trial it out.</p>
<hr />
<h2 id="general-troubleshooting-for-proxy-pilot" class="heading">General Troubleshooting for Proxy Pilot</h2>
<p dir="ltr">In this article we will discuss some steps you can take to help troubleshoot any unexpected issues when trying to use your proxies via Proxy Pilot. As a reminder, Proxy Pilot is a tool<span dir="ltr"> that relies on proper configurations by the end user in order to work properly. If you set bad headers or cookies, use bad proxies, or so forth, then you will get poor results nonetheless.</span></p>
<p dir="ltr"><span dir="ltr">At the core of web scraping, if you cannot load a request on your browser, using your home/work IP address, then it is unlikely you will be able to scrape a page using software + a proxy source. </span></p>
<p dir="ltr">There are many ways to detect scraping software (see <a href="https://amiunique.org/" target="_blank" rel="nofollow noopener">example1</a> and <a href="https://github.com/fingerprintjs/fingerprintjs" target="_blank" rel="nofollow noopener">example2</a>), so the more customization you add to loading a website (your software + proxies), the greater your footprint will be, and the easier it will be to detect you.</p>
<p dir="ltr"><span dir="ltr">If you do not wish to worry about such anti-scraping battles, please consider our API at: </span><a href="https://scrapingrobot.com/api/" target="_blank" rel="nofollow noopener">https://scrapingrobot.com/api/</a><span dir="ltr">  </span><span dir="ltr">Our Scraping Robot API was built to solve this exact issue:  allowing you to focus on your core business, instead of fighting with anti-scraping technologies.</span></p>
<p dir="ltr">If you wish to manage your own proxies, use developer resources, and pay for server compute power, then using Proxy Pilot will help (but not solve!) with some of these common scraping issues for you.</p>
<hr />
<h3 dir="ltr">Example of Bad vs Good Scraping Requests</h3>
<p dir="ltr">Below you will find an example of a very bad scraping request to Amazon (or any site, really). Proxy Pilot's role is not to solve these bad requests &#8211; it is still on the developer's code to send good requests to avoid being banned.</p>
<p dir="ltr">curl -s &#8216;<a href="https://www.amazon.com/dp/B07HNW68ZC/" target="_blank" rel="nofollow noopener">https://www.amazon.com/dp/B07HNW68ZC/</a>&#8216; \</p>
<p dir="ltr">     -x &#8216;PROXY_LOGIN:PROXY_PASS@PROXY_IP:PROXY_PORT' \</p>
<p dir="ltr">     -k &#8211;compressed -v</p>
<p dir="ltr"><span dir="ltr">The reason the above code would result in a ban is not because of Proxy Pilot, or even your proxies, but rather it is because normal browser requests would have more headers set in the request. Specifically, Amazon checks that the request has at least &#8216;User-Agent' header, and no matter which proxies you're running this request from &#8211; it would most likely get blocked.</span></p>
<p dir="ltr"><span dir="ltr">By simply adding user-agent to your request you can significantly decrease ban rates for your request:</span></p>
<p dir="ltr">curl -s &#8216;<a href="https://www.amazon.com/dp/B07HNW68ZC/" target="_blank" rel="nofollow noopener">https://www.amazon.com/dp/B07HNW68ZC/</a>&#8216; \</p>
<p dir="ltr">     -H &#8216;User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/87.0.4280.141 Safari/537.36' \</p>
<p dir="ltr">     -x &#8216;PROXY_LOGIN:PROXY_PASS@PROXY_IP:PROXY_PORT' \</p>
<p dir="ltr">     -k &#8211;compressed -v</p>
<hr />
<h3 dir="ltr">Tip #1:  Replicate Your Request in a Browser to Confirm It Works There First</h3>
<p dir="ltr">Description:<span dir="ltr">  As mentioned above, the best way to know if it’s your software causing issues would be to run your request via a browser on your local machine. Because your local machine will be a pure “residential IP”, and a browser is not customized software, you will then be able to successfully load all pages. However, if you cannot load a page in your browser using the steps below, then it means you are passing incorrect headers or cookies to the target URL and would need to debug on your side to find the proper headers/cookies.</span></p>
<p dir="ltr"><strong>Steps to troubleshoot:</strong></p>
<ol>
<li dir="ltr">
<p dir="ltr">Open a Chrome incognito tab and make sure you clear the cookies<br />
As most scraping software starts with no previous browsing history and no cookies &#8211; it’s best to do it this way to replicate how your software would work</p>
</li>
<li dir="ltr">
<p dir="ltr">Replicate the URL you're going to scrape by just pasting it into the address field</p>
</li>
<li dir="ltr">
<p dir="ltr"><span dir="ltr">Make sure it loads as expected. If it fails &#8211; you should take this into consideration when designing your scraping software</span><br />
<span dir="ltr">In some cases the site might ban you even at this step simply because you have no previous browsing history (and no cookies). </span></p>
</li>
<li dir="ltr">
<p dir="ltr"><span dir="ltr">In Chrome Dev Tools open a network tab and check the first request (it will likely have a &#8216;document' type). Check that the URL of that request matches the one you just made, and then right-click and choose &#8216;Copy as cURL'</span><br />
The cURL sent by a browser should appear in your clipboard and would look something like this:<br />
curl &#8216;<a href="https://www.amazon.com/gp/product/B08F7PTF53/" target="_blank" rel="nofollow noopener">https://www.amazon.com/gp/product/B08F7PTF53/</a>&#8216; \<br />
-H &#8216;authority: <a href="http://www.amazon.com/" target="_blank" rel="nofollow noopener">www.amazon.com</a>&#8216; \<br />
-H &#8216;sec-ch-ua: &#8221; Not;A Brand&#8221;;v=&#8221;99&#8243;, &#8220;Google Chrome&#8221;;v=&#8221;91&#8243;, &#8220;Chromium&#8221;;v=&#8221;91&#8243;&#8216; \<br />
-H &#8216;sec-ch-ua-mobile: ?0' \<br />
-H &#8216;upgrade-insecure-requests: 1' \<br />
-H &#8216;user-agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.77 Safari/537.36' \<br />
-H &#8216;accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9' \<br />
-H &#8216;sec-fetch-site: none' \<br />
-H &#8216;sec-fetch-mode: navigate' \<br />
-H &#8216;sec-fetch-user: ?1' \<br />
-H &#8216;sec-fetch-dest: document' \<br />
-H &#8216;accept-language: en-US,en;q=0.9' \<br />
&#8211;compressed</p>
</li>
</ol>
<p dir="ltr">Note how many headers the browser sends even from an incognito mode. With cookies the request can easily be several times bigger.</p>
<p dir="ltr">Note: cURL is provided by default with macOS and most Linux distributions, as well as the latest Windows 10 updates.</p>
<p dir="ltr">In case you are running an older version of Windows you can install curl from their <a href="https://curl.se/download.html" target="_blank" rel="nofollow noopener">official site</a>.</p>
<hr />
<h3 dir="ltr">Tip #2:  Replicate the Same Request from the Browser Via Proxy Pilot</h3>
<p dir="ltr">Description: <span dir="ltr">After step #4 in the previous tip you should have a perfect cURL request with a perfect set of headers which you might try to replicate via the Proxy Pilot, by simply adding to this cURL request parameter: </span> -x &#8216;PROXY_LOGIN:PROXY_PASS@PROXY_IP:PROXY_PORT' -v -k</p>
<p dir="ltr">with the PP credentials provided to you earlier. This would send the same request via PP.</p>
<p dir="ltr">You might also consider adding parameters<br />
-o test.html<br />
This would save results into a test.html page, so you can open it with a browser and see it’s content to make sure it’s working properly.<br />
<span dir="ltr">If it returns a proper content at this stage &#8211; this means PP works fine and takes care of managing proxies, doing retries if it’s banned via some proxy, etc.</span></p>
<p dir="ltr">In case the request works directly (without setting Proxy Pilot via -x flag), but stops working via Proxy Pilot &#8211; please inform us about that and let us know which curl request you were sending</p>
<hr />
<h3 dir="ltr"><span dir="ltr">Tip #3:  Replicate the Same Behavior Via Your Software</span></h3>
<p dir="ltr">Description:<span dir="ltr"> Once you’ve tested your request via the browser and via the Proxy Pilot &#8211; you can apply this to your own scraping software. The integration with Proxy Pilot is almost as simple as using regular proxies for data scraping. More details and some code examples for different languages and frameworks can be found <a href="http://bit.ly/proxypilot" target="_blank" rel="nofollow noopener">here</a>. </span></p>
<p dir="ltr"><span dir="ltr">Please note, that if while integrating the same request which worked via cURL stops working with your software, the most possible reason is a set of headers. Many sites implement really sophisticated anti-scraping solutions which might take into account not only cookies, user-agents, but also a specific order of headers, compressing algorithms and specific browser market share (i.e. Chrome v41 is rarely used, so sending this via user-agent would look suspicious for the target site)</span></p>
<hr />
</div>
</div>
<div>
<h4 id="references" class="ftwp-heading">References,</h4>
</div>
<ul>
<li><a href="https://portal.blazingseollc.com/en/support/solutions/articles/64000264080-what-is-proxy-pilot-" target="_blank" rel="nofollow noopener">https://portal.blazingseollc.com/en/support/solutions/articles/64000264080-what-is-proxy-pilot-</a></li>
<li><a href="https://portal.blazingseollc.com/en/support/solutions/articles/64000264081-proxy-pilot-setup-instructions" target="_blank" rel="nofollow noopener">https://portal.blazingseollc.com/en/support/solutions/articles/64000264081-proxy-pilot-setup-instructions</a></li>
<li><a href="https://portal.blazingseollc.com/en/support/solutions/articles/64000264085-using-python-requests-with-proxy-pilot" target="_blank" rel="nofollow noopener">https://portal.blazingseollc.com/en/support/solutions/articles/64000264085-using-python-requests-with-proxy-pilot</a></li>
<li><a href="https://portal.blazingseollc.com/en/support/solutions/articles/64000264083-using-node-js-requests-with-proxy-pilot" target="_blank" rel="nofollow noopener">https://portal.blazingseollc.com/en/support/solutions/articles/64000264083-using-node-js-requests-with-proxy-pilot</a></li>
<li><a href="https://portal.blazingseollc.com/en/support/solutions/articles/64000264084-using-node-js-puppeteer-with-proxy-pilot" target="_blank" rel="nofollow noopener">https://portal.blazingseollc.com/en/support/solutions/articles/64000264084-using-node-js-puppeteer-with-proxy-pilot</a></li>
<li><a href="https://portal.blazingseollc.com/en/support/solutions/articles/64000264086-using-curl-with-proxy-pilot" target="_blank" rel="nofollow noopener">https://portal.blazingseollc.com/en/support/solutions/articles/64000264086-using-curl-with-proxy-pilot</a></li>
<li><a href="https://portal.blazingseollc.com/en/support/solutions/articles/64000264087-using-firefox-with-proxy-pilot" target="_blank" rel="nofollow noopener">https://portal.blazingseollc.com/en/support/solutions/articles/64000264087-using-firefox-with-proxy-pilot</a></li>
<li><a href="https://portal.blazingseollc.com/en/support/solutions/articles/64000264203-general-troubleshooting-for-proxy-pilot" target="_blank" rel="nofollow noopener">https://portal.blazingseollc.com/en/support/solutions/articles/64000264203-general-troubleshooting-for-proxy-pilot</a></li>
</ul>
<hr />
<blockquote><p><strong>Disclaimer</strong>: This part of the content is mainly from the merchant. If the merchant does not want it to be displayed on my website, please <a href="https://www.proxysp.com/contact-us/">contact us</a> to delete your content.</p></blockquote>
]]></content:encoded>
					
					<wfw:commentRss>https://proxysp.com/proxy-pilot/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">7668</post-id>	</item>
		<item>
		<title>How to Use Socks Protocol with BlazingSEO Proxies? Learn Manuals</title>
		<link>https://proxysp.com/socks-protocol-blazingseo/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=socks-protocol-blazingseo</link>
					<comments>https://proxysp.com/socks-protocol-blazingseo/#respond</comments>
		
		<dc:creator><![CDATA[admin]]></dc:creator>
		<pubDate>Thu, 01 Jan 1970 00:00:00 +0000</pubDate>
				<category><![CDATA[BlazingSEO Proxies]]></category>
		<guid isPermaLink="false">https://www.proxysp.com/?p=7669</guid>

					<description><![CDATA[We know BlazingSEO provides SOCKS protocol, but do you know how to use it correctly? This article will be a complete guide for you. Do Your &#8230;<p class="read-more"> <a class="ast-button" href="https://proxysp.com/socks-protocol-blazingseo/"> <span class="screen-reader-text">How to Use Socks Protocol with BlazingSEO Proxies? Learn Manuals</span> Read More &#187;</a></p>]]></description>
										<content:encoded><![CDATA[<blockquote><p>We know BlazingSEO provides SOCKS protocol, but do you know how to use it correctly? This article will be a complete guide for you.</p></blockquote>
<h2 class="heading">Do Your Proxies Work with SOCKS Protocol?</h2>
<p dir="ltr"><span dir="ltr">Our dedicated and semi-dedicated proxies support <a href="https://www.proxysp.com/socks-proxy/" target="_blank" rel="noopener">SOCKS</a>. You will need to change the proxy’s port to 1080 for SOCKS connectivity. You may also find the following video guides on how to use SOCKS protocol with blazing proxies in your browsers(Chrome, Firefox)</span>.</p>
<p dir="ltr"><span dir="ltr">You can only use IP authorization along with SOCKS. </span><span dir="ltr">Unfortunately, username/password authorization method is not available for SOCKS for our proxies.</span></p>
<hr />
<h2 class="heading">How do I Use SOCKS Protocol?</h2>
<p>Dedicated and semi-dedicated proxies support SOCKS protocol.</p>
<p>For some websites and use-cases, you may need to switch from HTTP/HTTPS and instead use SOCKS protocol. We offer SOCKS protocol to assist with these specific use-cases. When using SOCKS, you are only able to use IP authorization as we currently do not offer username/password for SOCKS protocol.</p>
<p>1. Login to your proxy dashboard.</p>
<p>2. On the right side of the proxy dashboard home page,  select &#8220;Via IP&#8221; under Authorization Type and then select SOCKS.</p>
<p><img loading="lazy" decoding="async" class="aligncenter wp-image-7935 size-full" src="https://www.proxysp.com/wp-content/uploads/2021/09/Blazing-SEO-IP-Authorization.jpg" alt="Blazing SEO IP Authorization" width="463" height="216" srcset="https://proxysp.com/wp-content/uploads/2021/09/Blazing-SEO-IP-Authorization.jpg 463w, https://proxysp.com/wp-content/uploads/2021/09/Blazing-SEO-IP-Authorization-300x140.jpg 300w" sizes="(max-width: 463px) 100vw, 463px" /></p>
<p>3. If you have not already authorized your IP, please proceed to authorize your IP.  f you do not know how to authorize your IP you may simply follow this video guide <a href="https://www.youtube.com/watch?v=Q-NSzU1GDp8" target="_blank" rel="nofollow noopener">here</a>.</p>
<p>You may also find the following video guides on how to use SOCKS protocol with Blazing SEO proxies in your browser.</p>
<p><strong>Chrome</strong></p>
<div class="su-youtube su-u-responsive-media-yes"><iframe loading="lazy" width="600" height="400" src="https://www.youtube.com/embed/rzByA56VpeY?" frameborder="0" allowfullscreen allow="autoplay; encrypted-media; picture-in-picture" title=""></iframe></div>
<p><strong>Firefox</strong></p>
<div class="su-youtube su-u-responsive-media-yes"><iframe loading="lazy" width="600" height="400" src="https://www.youtube.com/embed/3V33wirMxik?" frameborder="0" allowfullscreen allow="autoplay; encrypted-media; picture-in-picture" title=""></iframe></div>
<div class="icon">
<div class="icon">
<hr />
</div>
</div>
<div>
<h4 id="references" class="ftwp-heading">References,</h4>
</div>
<ul>
<li><a href="https://portal.blazingseollc.com/en/support/solutions/articles/64000263275-do-your-proxies-work-with-socks-protocol" target="_blank" rel="nofollow noopener">https://portal.blazingseollc.com/en/support/solutions/articles/64000263275-do-your-proxies-work-with-socks-protocol</a></li>
<li><a href="https://portal.blazingseollc.com/en/support/solutions/articles/64000256630-how-do-i-use-socks-protocol-" target="_blank" rel="nofollow noopener">https://portal.blazingseollc.com/en/support/solutions/articles/64000256630-how-do-i-use-socks-protocol-</a></li>
</ul>
<hr />
<blockquote><p><strong>Disclaimer</strong>: This part of the content is mainly from the merchant. If the merchant does not want it to be displayed on my website, please <a href="https://www.proxysp.com/contact-us/">contact us</a> to delete your content.</p></blockquote>
]]></content:encoded>
					
					<wfw:commentRss>https://proxysp.com/socks-protocol-blazingseo/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">7669</post-id>	</item>
		<item>
		<title>How to Use BlazingSEO Proxies? Learn Official Manuals Before You Buy</title>
		<link>https://proxysp.com/how-to-use-blazingseo-proxies/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=how-to-use-blazingseo-proxies</link>
					<comments>https://proxysp.com/how-to-use-blazingseo-proxies/#respond</comments>
		
		<dc:creator><![CDATA[admin]]></dc:creator>
		<pubDate>Thu, 01 Jan 1970 00:00:00 +0000</pubDate>
				<category><![CDATA[BlazingSEO Proxies]]></category>
		<guid isPermaLink="false">https://www.proxysp.com/?p=7670</guid>

					<description><![CDATA[This is the using manuals of BlazingSEO Proxies that you must not miss！Includind how to use their dashboard, test the proxy on the browser, and so &#8230;<p class="read-more"> <a class="ast-button" href="https://proxysp.com/how-to-use-blazingseo-proxies/"> <span class="screen-reader-text">How to Use BlazingSEO Proxies? Learn Official Manuals Before You Buy</span> Read More &#187;</a></p>]]></description>
										<content:encoded><![CDATA[<blockquote><p>This is the using manuals of BlazingSEO Proxies that you must not miss！Includind how to use their dashboard, test the proxy on the browser, and so on&#8230;</p></blockquote>
<p>&nbsp;</p>
<h2>How to Use BlazingSEO Proxies</h2>
<h3 class="heading">How do I Use Proxies?</h3>
<p>You may use proxies on a web browser or through a software that supports proxy usage.</p>
<p><strong>How to Use Proxy on Firefox:</strong></p>
<div class="su-youtube su-u-responsive-media-yes"><iframe loading="lazy" width="600" height="400" src="https://www.youtube.com/embed/bTipqNk11SQ?" frameborder="0" allowfullscreen allow="autoplay; encrypted-media; picture-in-picture" title=""></iframe></div>
<p><strong>How to Use Proxy on Chrome: </strong></p>
<div class="su-youtube su-u-responsive-media-yes"><iframe loading="lazy" width="600" height="400" src="https://www.youtube.com/embed/0mzVhOCOHZ8?" frameborder="0" allowfullscreen allow="autoplay; encrypted-media; picture-in-picture" title=""></iframe></div>
<h3 class="heading">How do I Authorize My Proxies?</h3>
<p>It is important to understand that authorization for the proxies is required to prevent non-authorized users from being able to use the proxies. It keeps the proxies secure to you. That is why the proxies will not work if you do not authorize correctly.</p>
<p>There are a few different types of authorization options we provide depending on your use case. Please find the authorization type you need below for instructions.</p>
<p><strong>IP Authorization: </strong></p>
<ul>
<li>IP Authorization uses the port <strong>3128</strong> with the proxies.</li>
</ul>
<p>1. Login to Proxy Dashboard</p>
<p>2. To find your PC/Device's IP, open a web browser</p>
<p><img loading="lazy" decoding="async" class="aligncenter size-full wp-image-8008" src="https://www.proxysp.com/wp-content/uploads/2021/09/Blazing-SEO-IP-Authorization-1.jpg" alt="Blazing SEO IP Authorization" width="384" height="414" srcset="https://proxysp.com/wp-content/uploads/2021/09/Blazing-SEO-IP-Authorization-1.jpg 384w, https://proxysp.com/wp-content/uploads/2021/09/Blazing-SEO-IP-Authorization-1-278x300.jpg 278w" sizes="(max-width: 384px) 100vw, 384px" /></p>
<p>3. Go to Proxy Dashboard, and select &#8216;Via IP', &#8216;HTTP', then enter your IP into the blank box in the screenshot on &#8216;2.'. Then click &#8216;Add IP'.</p>
<p>4. <strong>The proxies will not work for 30 minutes until your IP is fully authorized in the system.</strong> The IP will be added to the system after 30 minutes, and then you will be able to use the proxies.</p>
<p>5. Complete! You may then use the proxies as needed.</p>
<ul>
<li>Video on how to use proxies in browser:</li>
</ul>
<div class="su-youtube su-u-responsive-media-yes"><iframe loading="lazy" width="600" height="400" src="https://www.youtube.com/embed/XO-Qj_jgdKM?" frameborder="0" allowfullscreen allow="autoplay; encrypted-media; picture-in-picture" title=""></iframe></div>
<hr />
<p><strong>Username/Password Authorization: </strong></p>
<ul>
<li>Username/Password Authorization uses the port <strong>4444</strong> with the proxies.</li>
</ul>
<p>1. Login to Proxy Dashboard</p>
<p>2. Go to Proxy Dashboard, and select &#8216;Username/Password'</p>
<p><img loading="lazy" decoding="async" class="aligncenter size-full wp-image-8009" src="https://www.proxysp.com/wp-content/uploads/2021/09/Blazing-SEO-Username-Password-Authorization.jpg" alt="Blazing SEO Username Password Authorization" width="417" height="413" srcset="https://proxysp.com/wp-content/uploads/2021/09/Blazing-SEO-Username-Password-Authorization.jpg 417w, https://proxysp.com/wp-content/uploads/2021/09/Blazing-SEO-Username-Password-Authorization-300x297.jpg 300w, https://proxysp.com/wp-content/uploads/2021/09/Blazing-SEO-Username-Password-Authorization-150x150.jpg 150w" sizes="(max-width: 417px) 100vw, 417px" /></p>
<p>3. <strong>The proxies will not work for 30 minutes until the system changes the </strong><strong>authorization</strong><strong> type</strong>. The authorization type will be adjusted in the system after 30 minutes, and then you will be able to use the proxies.</p>
<p>4. Complete! You may then use the proxies as needed.</p>
<ul>
<li>Video on how to use proxies in browser:</li>
</ul>
<div class="su-youtube su-u-responsive-media-yes"><iframe loading="lazy" width="600" height="400" src="https://www.youtube.com/embed/0mzVhOCOHZ8?" frameborder="0" allowfullscreen allow="autoplay; encrypted-media; picture-in-picture" title=""></iframe></div>
<hr />
<p><strong>SOCKS Authorization:</strong></p>
<ul>
<li>SOCKS<em> Authorization uses the port <strong>1080</strong> with the proxies.</em><em> </em></li>
</ul>
<p>1. Login to Proxy Dashboard</p>
<p>2. To find your PC/Device's IP, open a web browser</p>
<p>3. Go to Proxy Dashboard, and select &#8216;Via IP', SOCKS', then enter your IP into the blank box in the screenshot on &#8216;3.'. Then click &#8216;Add IP':</p>
<p><img loading="lazy" decoding="async" class="aligncenter size-full wp-image-8010" src="https://www.proxysp.com/wp-content/uploads/2021/09/Blazing-SEO-SOCKS-Authorization.jpg" alt="Blazing SEO SOCKS Authorization" width="382" height="452" srcset="https://proxysp.com/wp-content/uploads/2021/09/Blazing-SEO-SOCKS-Authorization.jpg 382w, https://proxysp.com/wp-content/uploads/2021/09/Blazing-SEO-SOCKS-Authorization-254x300.jpg 254w" sizes="(max-width: 382px) 100vw, 382px" /></p>
<article id="article-body" class="article-body">4. <strong>The proxies will not work for 30 minutes until your IP is fully authorized in the system</strong>. The IP will be added to the system after 30 minutes, and then you will be able to use the proxies.5. Complete! You may then use the proxies as needed.</p>
<ul>
<li>Video on how to use proxies in browser:</li>
</ul>
<div class="su-youtube su-u-responsive-media-yes"><iframe loading="lazy" width="600" height="400" src="https://www.youtube.com/embed/3V33wirMxik?" frameborder="0" allowfullscreen allow="autoplay; encrypted-media; picture-in-picture" title=""></iframe></div>
<span dir="ltr"><em><strong>Note:</strong> At times, port (3128/4444) may be blocked by an ISP or by local security settings. In such cases use port 80 for IP authorization and port 8000 for username/password authorization.</em><br />
</span></p>
<hr />
</article>
<h3 class="heading">How do I Use and Test My Proxies in a Browser?</h3>
<blockquote><p>Before testing proxies in a browser, you'll want to make sure they are authorized in your dashboard. You may either use IP authorization method or username/password authorization method for this purpose.</p></blockquote>
<h4><strong>Testing with a Chrome</strong> Browser</h4>
<p>1. Open Chrome, and click on the ellipsis (3 dots) in the upper right corner of your browser and choose &#8216;Settings'</p>
<p><img loading="lazy" decoding="async" class="aligncenter wp-image-8011 size-full" src="https://www.proxysp.com/wp-content/uploads/2021/09/Testing-with-a-Chrome-Browser1.jpg" alt="Testing with a Chrome Browser1" width="215" height="373" srcset="https://proxysp.com/wp-content/uploads/2021/09/Testing-with-a-Chrome-Browser1.jpg 215w, https://proxysp.com/wp-content/uploads/2021/09/Testing-with-a-Chrome-Browser1-173x300.jpg 173w" sizes="(max-width: 215px) 100vw, 215px" /></p>
<p>2. Scroll to bottom of Settings page, and select &#8216;Advanced'<br />
<img loading="lazy" decoding="async" class="aligncenter size-full wp-image-8012" src="https://www.proxysp.com/wp-content/uploads/2021/09/Testing-with-a-Chrome-Browser2.jpg" alt="Testing with a Chrome Browser2" width="446" height="548" srcset="https://proxysp.com/wp-content/uploads/2021/09/Testing-with-a-Chrome-Browser2.jpg 446w, https://proxysp.com/wp-content/uploads/2021/09/Testing-with-a-Chrome-Browser2-244x300.jpg 244w" sizes="(max-width: 446px) 100vw, 446px" /></p>
<p>3. Scroll to bottom of Advanced section, and select &#8216;Open your computer's proxy settings'</p>
<p><img loading="lazy" decoding="async" class="aligncenter size-full wp-image-8013" src="https://www.proxysp.com/wp-content/uploads/2021/09/Testing-with-a-Chrome-Browser3.jpg" alt="Testing with a Chrome Browser3" width="620" height="171" srcset="https://proxysp.com/wp-content/uploads/2021/09/Testing-with-a-Chrome-Browser3.jpg 620w, https://proxysp.com/wp-content/uploads/2021/09/Testing-with-a-Chrome-Browser3-300x83.jpg 300w" sizes="(max-width: 620px) 100vw, 620px" /></p>
<p>4. Select the &#8216;Use a proxy server' option, then fill in your IP address and Port as shown</p>
<p><img loading="lazy" decoding="async" class="aligncenter size-full wp-image-8014" src="https://www.proxysp.com/wp-content/uploads/2021/09/Testing-with-a-Chrome-Browser4.jpg" alt="Testing with a Chrome Browser4" width="458" height="455" srcset="https://proxysp.com/wp-content/uploads/2021/09/Testing-with-a-Chrome-Browser4.jpg 458w, https://proxysp.com/wp-content/uploads/2021/09/Testing-with-a-Chrome-Browser4-300x298.jpg 300w, https://proxysp.com/wp-content/uploads/2021/09/Testing-with-a-Chrome-Browser4-150x150.jpg 150w" sizes="(max-width: 458px) 100vw, 458px" /></p>
<p>5. To confirm that your proxy is loaded into the browser, go to google and type &#8216;my ip'. Your browser should now show the proxy IP address instead of your regular one &#8211; nice work!</p>
<p><img loading="lazy" decoding="async" class="aligncenter size-full wp-image-8015" src="https://www.proxysp.com/wp-content/uploads/2021/09/Testing-with-a-Chrome-Browser5.jpg" alt="Testing with a Chrome Browser5" width="636" height="281" srcset="https://proxysp.com/wp-content/uploads/2021/09/Testing-with-a-Chrome-Browser5.jpg 636w, https://proxysp.com/wp-content/uploads/2021/09/Testing-with-a-Chrome-Browser5-300x133.jpg 300w" sizes="(max-width: 636px) 100vw, 636px" /></p>
<p>6. If your proxy IP shows up in google, you can then try loading any website just as you normally would when browsing from your computer. Voila!</p>
<ul>
<li>To remove proxy, just reverse the steps above.</li>
</ul>
<hr />
<h4>Testing with a Firefox Browser</h4>
<p>1. Open Firefox, and click on the hamburger icon (aka 3-bar menu) in the upper right corner and select &#8216;Options'</p>
<p><img loading="lazy" decoding="async" class="aligncenter size-full wp-image-8016" src="https://www.proxysp.com/wp-content/uploads/2021/09/Testing-with-a-Firefox-Browser1.jpg" alt="Testing with a Firefox Browser1" width="289" height="521" srcset="https://proxysp.com/wp-content/uploads/2021/09/Testing-with-a-Firefox-Browser1.jpg 289w, https://proxysp.com/wp-content/uploads/2021/09/Testing-with-a-Firefox-Browser1-166x300.jpg 166w" sizes="(max-width: 289px) 100vw, 289px" /></p>
<p>2. Scroll to bottom of Options page, and select &#8216;Settings'</p>
<p><img loading="lazy" decoding="async" class="aligncenter size-full wp-image-8017" src="https://www.proxysp.com/wp-content/uploads/2021/09/Testing-with-a-Firefox-Browser2.jpg" alt="Testing with a Firefox Browser2" width="622" height="120" srcset="https://proxysp.com/wp-content/uploads/2021/09/Testing-with-a-Firefox-Browser2.jpg 622w, https://proxysp.com/wp-content/uploads/2021/09/Testing-with-a-Firefox-Browser2-300x58.jpg 300w" sizes="(max-width: 622px) 100vw, 622px" /></p>
<p>3. Select the &#8216;Manual proxy configuration bubble' and set the values in the HTTP field &#8211; be sure to check the box as shown so it applies to FTP and HTTPS as well!</p>
<p><img loading="lazy" decoding="async" class="aligncenter size-full wp-image-8018" src="https://www.proxysp.com/wp-content/uploads/2021/09/Testing-with-a-Firefox-Browser3.jpg" alt="Testing with a Firefox Browser3" width="622" height="414" srcset="https://proxysp.com/wp-content/uploads/2021/09/Testing-with-a-Firefox-Browser3.jpg 622w, https://proxysp.com/wp-content/uploads/2021/09/Testing-with-a-Firefox-Browser3-300x200.jpg 300w" sizes="(max-width: 622px) 100vw, 622px" /></p>
<p>4. To confirm that your proxy is loaded into the browser, go to google and type &#8216;my ip'. Your browser should now show the proxy IP address instead of your regular one &#8211; nice work!</p>
<p><img loading="lazy" decoding="async" class="aligncenter size-full wp-image-8019" src="https://www.proxysp.com/wp-content/uploads/2021/09/Testing-with-a-Firefox-Browser4.jpg" alt="Testing with a Firefox Browser4" width="632" height="280" srcset="https://proxysp.com/wp-content/uploads/2021/09/Testing-with-a-Firefox-Browser4.jpg 632w, https://proxysp.com/wp-content/uploads/2021/09/Testing-with-a-Firefox-Browser4-300x133.jpg 300w" sizes="(max-width: 632px) 100vw, 632px" /></p>
<p>5. If your proxy IP shows up in google, you can then try loading any website just as you normally would when browsing from your computer. Voila!</p>
<ul>
<li>To remove proxy, simply reverse the steps above.</li>
</ul>
<hr />
<h3 class="heading">How can I Get a Diverse Subnet for My Proxies?</h3>
<p>Our system is automatically set to provide you with a diverse subnet for your proxy’s IP. If you still find the proxy IPs to be lacking in diversity, you may proceed to replace the proxy’s IP via your proxy DASHBOARD accordingly. Kindly login to your proxy dashboard and browse to the “Proxy Replacements” tab and replace the IP that you find unsuitable. You can also follow this video guide HERE on how to replace your proxies.</p>
<p>DISCLAIMER: Each replacement will use a single proxy replacement credit. If you purchased 10 proxies, you are entitled to 10 proxy replacements per billing cycle. The replacement credit will be replenished on the next billing cycle. Kindly use the replacements cautiously, as we are unable to replenish the credit manually.</p>
<hr />
<h3 class="heading">How do I Test Proxies?</h3>
<p>To test the proxies, you may simply follow this video guide:</p>
<div class="su-youtube su-u-responsive-media-yes"><iframe loading="lazy" width="600" height="400" src="https://www.youtube.com/embed/tPKxrtBP5lU?" frameborder="0" allowfullscreen allow="autoplay; encrypted-media; picture-in-picture" title=""></iframe></div>
<hr />
<h2>How to Use Proxy Dashboard</h2>
<h3 class="heading">How do I Replace Proxies?</h3>
<p>At Blazing SEO, we know that sometimes, you need new proxies. Therefore we offer free replacements to all of our customers for all of our proxies. We offer one free proxy replacement per month, per proxy in your package. For example, if you have 20 proxies, you are entitled to 20 free replacements each month. Your replacement balance is replenished 30 days from the date of replacement respectively.</p>
<p><strong>If you need to replace your proxies, please follow the steps below:</strong></p>
<p>1. Log in to the Blazing SEO proxy dashboard.</p>
<p>2. On the dashboard home screen, select &#8220;IPv4 Proxies&#8221; to drop down the menu. Then select the &#8220;Proxy Replacements&#8221; option.</p>
<p><img loading="lazy" decoding="async" class="aligncenter size-full wp-image-8020" src="https://www.proxysp.com/wp-content/uploads/2021/09/replace-proxies1.jpg" alt="replace proxies1" width="485" height="529" srcset="https://proxysp.com/wp-content/uploads/2021/09/replace-proxies1.jpg 485w, https://proxysp.com/wp-content/uploads/2021/09/replace-proxies1-275x300.jpg 275w" sizes="(max-width: 485px) 100vw, 485px" /></p>
<p>3. Once you are on the proxy replacements page, you have two options to replace your proxies:</p>
<ul>
<li><strong>Option 1 (Individual):</strong> You can select individual proxies from your list. Simply select the &#8220;Replace&#8221; button to replace that proxy with a new proxy.</li>
</ul>
<p><img loading="lazy" decoding="async" class="aligncenter size-full wp-image-8021" src="https://www.proxysp.com/wp-content/uploads/2021/09/replace-proxies2.jpg" alt="replace proxies2" width="571" height="96" srcset="https://proxysp.com/wp-content/uploads/2021/09/replace-proxies2.jpg 571w, https://proxysp.com/wp-content/uploads/2021/09/replace-proxies2-300x50.jpg 300w" sizes="(max-width: 571px) 100vw, 571px" /></p>
<ul>
<li><strong>Option 2 (Multiple):</strong> You can manually enter the IPs you want to replace in the box shown below. This allows you to replace multiple proxies at the same time. Input the IPs you want to replace and then press &#8220;Submit&#8221;.</li>
</ul>
<p><img loading="lazy" decoding="async" class="aligncenter size-full wp-image-8022" src="https://www.proxysp.com/wp-content/uploads/2021/09/replace-proxies3.jpg" alt="replace proxies3" width="570" height="273" srcset="https://proxysp.com/wp-content/uploads/2021/09/replace-proxies3.jpg 570w, https://proxysp.com/wp-content/uploads/2021/09/replace-proxies3-300x144.jpg 300w" sizes="(max-width: 570px) 100vw, 570px" /></p>
<p>4. Once you have processed the request, our system will provide you with a new IP in your dashboard. Please note that this replacement process can take up to 10 minutes before the new proxy is delivered.</p>
<hr />
<h3 class="heading">How do I Cancel Proxies?</h3>
<p>Before cancelling your proxies, please refer to this article for information on <a href="https://www.proxysp.com/blazingseo-proxies-troubleshooting/" target="_blank" rel="noopener">troubleshooting proxies</a>. We are happy to work with you on any issues you are facing with your proxies whether it is issued with functionality or perhaps financial costs.</p>
<p>If you are certain you would like to cancel your proxies, there are two methods available for you to do so. Please see the methods listed below:</p>
<hr />
<p><strong>Cancelling Through The Proxy Dashboard:</strong></p>
<p>1. Login to your proxy dashboard.</p>
<p>2. Select &#8220;Upgrade Your Plan&#8221; under &#8220;Manage Plan&#8221;:</p>
<p><img loading="lazy" decoding="async" class="aligncenter size-full wp-image-8024" src="https://www.proxysp.com/wp-content/uploads/2021/09/Cancelling-Through-The-Proxy-Dashboard1.jpg" alt="Cancelling Through The Proxy Dashboard1" width="625" height="419" srcset="https://proxysp.com/wp-content/uploads/2021/09/Cancelling-Through-The-Proxy-Dashboard1.jpg 625w, https://proxysp.com/wp-content/uploads/2021/09/Cancelling-Through-The-Proxy-Dashboard1-300x201.jpg 300w" sizes="(max-width: 625px) 100vw, 625px" /></p>
<p>3. Click on the red Cancel button:</p>
<p><img loading="lazy" decoding="async" class="aligncenter size-full wp-image-8025" src="https://www.proxysp.com/wp-content/uploads/2021/09/Cancelling-Through-The-Proxy-Dashboard2.jpg" alt="Cancelling Through The Proxy Dashboard2" width="577" height="158" srcset="https://proxysp.com/wp-content/uploads/2021/09/Cancelling-Through-The-Proxy-Dashboard2.jpg 577w, https://proxysp.com/wp-content/uploads/2021/09/Cancelling-Through-The-Proxy-Dashboard2-300x82.jpg 300w" sizes="(max-width: 577px) 100vw, 577px" /></p>
<p>4. A warning will pop up. You will then enter your cancellation reason, then click &#8216;Yes, please cancel my proxies':</p>
<p><img loading="lazy" decoding="async" class="aligncenter size-full wp-image-8026" src="https://www.proxysp.com/wp-content/uploads/2021/09/Cancelling-Through-The-Proxy-Dashboard3.jpg" alt="Cancelling Through The Proxy Dashboard3" width="414" height="461" srcset="https://proxysp.com/wp-content/uploads/2021/09/Cancelling-Through-The-Proxy-Dashboard3.jpg 414w, https://proxysp.com/wp-content/uploads/2021/09/Cancelling-Through-The-Proxy-Dashboard3-269x300.jpg 269w" sizes="(max-width: 414px) 100vw, 414px" /></p>
<hr />
<p><strong>Cancelling Through The Client Area:</strong></p>
<p>1. The client area can be accessed through the link <a href="https://billing.blazingseollc.com/hosting/clientarea.php" target="_blank" rel="nofollow noopener">here</a>.</p>
<p>2. You will then click &#8216;Services':</p>
<p><img loading="lazy" decoding="async" class="aligncenter size-full wp-image-8027" src="https://www.proxysp.com/wp-content/uploads/2021/09/Cancelling-Through-The-Client-Area1.jpg" alt="Cancelling Through The Client Area1" width="589" height="339" srcset="https://proxysp.com/wp-content/uploads/2021/09/Cancelling-Through-The-Client-Area1.jpg 589w, https://proxysp.com/wp-content/uploads/2021/09/Cancelling-Through-The-Client-Area1-300x173.jpg 300w" sizes="(max-width: 589px) 100vw, 589px" /></p>
<p>3. You will then find the active service you are looking to cancel:</p>
<p><img loading="lazy" decoding="async" class="aligncenter size-full wp-image-8028" src="https://www.proxysp.com/wp-content/uploads/2021/09/Cancelling-Through-The-Client-Area3.jpg" alt="V" width="623" height="420" srcset="https://proxysp.com/wp-content/uploads/2021/09/Cancelling-Through-The-Client-Area3.jpg 623w, https://proxysp.com/wp-content/uploads/2021/09/Cancelling-Through-The-Client-Area3-300x202.jpg 300w" sizes="(max-width: 623px) 100vw, 623px" /></p>
<p>4. You can then click &#8216;Request Cancellation' here:</p>
<p><img loading="lazy" decoding="async" class="aligncenter size-full wp-image-8029" src="https://www.proxysp.com/wp-content/uploads/2021/09/Cancelling-Through-The-Client-Area3-1.jpg" alt="Cancelling Through The Client Area3" width="623" height="420" srcset="https://proxysp.com/wp-content/uploads/2021/09/Cancelling-Through-The-Client-Area3-1.jpg 623w, https://proxysp.com/wp-content/uploads/2021/09/Cancelling-Through-The-Client-Area3-1-300x202.jpg 300w" sizes="(max-width: 623px) 100vw, 623px" /></p>
<p>5. On the next page, you will enter your cancellation reason, then click &#8216;Request Cancellation':</p>
<p><img loading="lazy" decoding="async" class="aligncenter size-full wp-image-8030" src="https://www.proxysp.com/wp-content/uploads/2021/09/Cancelling-Through-The-Client-Area4.jpg" alt="Cancelling Through The Client Area4" width="628" height="337" srcset="https://proxysp.com/wp-content/uploads/2021/09/Cancelling-Through-The-Client-Area4.jpg 628w, https://proxysp.com/wp-content/uploads/2021/09/Cancelling-Through-The-Client-Area4-300x161.jpg 300w" sizes="(max-width: 628px) 100vw, 628px" /></p>
<hr />
<h3 class="heading">How do I Upgrade My Proxies?</h3>
<p>If you would like to upgrade your proxies, please follow the steps below:</p>
<p>1. Login to your Proxy dashboard</p>
<p>2. Select &#8220;Upgrade Your Plan&#8221; under &#8220;Manage Plan&#8221;:</p>
<p><img loading="lazy" decoding="async" class="aligncenter size-full wp-image-8031" src="https://www.proxysp.com/wp-content/uploads/2021/09/upgrade-Blazing-SEO-proxies1.jpg" alt="upgrade Blazing SEO proxies1" width="621" height="435" srcset="https://proxysp.com/wp-content/uploads/2021/09/upgrade-Blazing-SEO-proxies1.jpg 621w, https://proxysp.com/wp-content/uploads/2021/09/upgrade-Blazing-SEO-proxies1-300x210.jpg 300w" sizes="(max-width: 621px) 100vw, 621px" /></p>
<p>3. If you wish to upgrade to a 15 proxies package, from 10, please enter the &#8220;New Amount&#8221; as 15 for the package that you want to upgrade, click on the upgrade button to proceed:</p>
<p><img loading="lazy" decoding="async" class="aligncenter size-full wp-image-8032" src="https://www.proxysp.com/wp-content/uploads/2021/09/upgrade-Blazing-SEO-proxies2.jpg" alt="upgrade Blazing SEO proxies2" width="447" height="135" srcset="https://proxysp.com/wp-content/uploads/2021/09/upgrade-Blazing-SEO-proxies2.jpg 447w, https://proxysp.com/wp-content/uploads/2021/09/upgrade-Blazing-SEO-proxies2-300x91.jpg 300w" sizes="(max-width: 447px) 100vw, 447px" /></p>
<p>4. An upgrade invoice will be generated. You would need to pay the invoice to activate the upgraded proxies:</p>
<p><img loading="lazy" decoding="async" class="aligncenter size-full wp-image-8033" src="https://www.proxysp.com/wp-content/uploads/2021/09/upgrade-Blazing-SEO-proxies3.jpg" alt="upgrade Blazing SEO proxies3" width="349" height="431" srcset="https://proxysp.com/wp-content/uploads/2021/09/upgrade-Blazing-SEO-proxies3.jpg 349w, https://proxysp.com/wp-content/uploads/2021/09/upgrade-Blazing-SEO-proxies3-243x300.jpg 243w" sizes="(max-width: 349px) 100vw, 349px" /></p>
<p>5. Once the invoice is paid, the proxies will automatically be added to your account and you will be able to select locations!</p>
<hr />
<h3 class="heading">How do I Downgrade My Proxies?</h3>
<p>If you would like to downgrade your proxies, please follow the steps below:</p>
<p>1. Login to your Proxy dashboard</p>
<p>2. Select &#8220;Upgrade Your Plan&#8221; under &#8220;Manage Plan&#8221;</p>
<p><img loading="lazy" decoding="async" class="aligncenter size-full wp-image-8034" src="https://www.proxysp.com/wp-content/uploads/2021/09/downgrade-Blazing-SEO-proxies1.jpg" alt="downgrade Blazing SEO proxies1" width="611" height="403" srcset="https://proxysp.com/wp-content/uploads/2021/09/downgrade-Blazing-SEO-proxies1.jpg 611w, https://proxysp.com/wp-content/uploads/2021/09/downgrade-Blazing-SEO-proxies1-300x198.jpg 300w" sizes="(max-width: 611px) 100vw, 611px" /></p>
<p>3. To reduce the number of proxies in your account, enter the<strong> new number</strong> you want going forward.  For example, if you currently have 20 proxies and wish to downgrade to a new total of 15 in your proxy package, enter the number '15' in the field shown below. Then click on &#8216;<strong>Downgrade</strong>&#8216; to proceed.</p>
<p><img loading="lazy" decoding="async" class="aligncenter size-full wp-image-8035" src="https://www.proxysp.com/wp-content/uploads/2021/09/downgrade-Blazing-SEO-proxies2.jpg" alt="downgrade Blazing SEO proxies2" width="609" height="131" srcset="https://proxysp.com/wp-content/uploads/2021/09/downgrade-Blazing-SEO-proxies2.jpg 609w, https://proxysp.com/wp-content/uploads/2021/09/downgrade-Blazing-SEO-proxies2-300x65.jpg 300w" sizes="(max-width: 609px) 100vw, 609px" /></p>
<p>4. Now you can optionally specify which IPs you would like to keep, if some are working better than others</p>
<ul>
<li>Enter the list of IPs as directed. This should include the IP only, and should not include the port number.</li>
<li>NOTE: If you leave this field blank, then IPs will be randomly selected for removal from your account.</li>
</ul>
<p><img loading="lazy" decoding="async" class="aligncenter wp-image-8036" src="https://www.proxysp.com/wp-content/uploads/2021/09/downgrade-Blazing-SEO-proxies3.jpg" alt="downgrade Blazing SEO proxies3" width="542" height="392" srcset="https://proxysp.com/wp-content/uploads/2021/09/downgrade-Blazing-SEO-proxies3.jpg 566w, https://proxysp.com/wp-content/uploads/2021/09/downgrade-Blazing-SEO-proxies3-300x217.jpg 300w" sizes="(max-width: 542px) 100vw, 542px" /></p>
<p>5. Click &#8216;<strong>Downgrade</strong>&#8216; and you are all set!  A credit will be added to your account to prorate for the remainder of the billing period.</p>
<p>Please note that proxies will be downgraded at the end of the billing cycle and can be used till then.</p>
<hr />
<h2 class="heading">Why Are My Proxies Not Working on Some Sites?</h2>
<p data-identifyelement="476"><span data-identifyelement="477">Does your proxy work on some sites, but does <strong data-identifyelement="478">not</strong> work on others?</span></p>
<p data-identifyelement="479"><span data-identifyelement="480">Did your proxy work in the past, but now it does not work?</span></p>
<p data-identifyelement="486"><span data-identifyelement="487">If you answered &#8216;Yes' to either of the above questions, then it is likely that your proxies are banned (or &#8216;blocked') on the website you are using them on. In this part, we will talk about <em data-identifyelement="489">why</em> this happens, as well as <em data-identifyelement="490">what</em> you can do about it.</span></p>
<p data-identifyelement="491"><span data-identifyelement="492">If you answered &#8216;No' to both of the above questions, then please visit our article about why your proxies might not be providing connectivity to any sites. You can read about it <a href="https://www.proxysp.com/blazingseo-proxies-troubleshooting/#why-are-my-proxies-not-working" target="_blank" rel="noopener">here</a>. </span></p>
<hr />
<h3 data-identifyelement="499"><span data-identifyelement="500"><strong>Why did I Get Banned?</strong></span></h3>
<p data-identifyelement="502"><span data-identifyelement="503">There are a number of reasons as to why a proxy can get banned, some of which are predictable and obvious, while other reasons are only theoretical guesses. Here are a few reasons:</span></p>
<p data-identifyelement="509"><strong>1. You are using your proxies too fast</strong></p>
<p data-identifyelement="516"><span data-identifyelement="517">One of the main reasons for getting banned on a website is that you have your software configured to run too fast at a particular website. Websites will not tolerate significant, parallel, connections as it may cause harm to their services. Imagine a scenario where a website allowed a single IP address to connect to it at [1 million times] per <strong data-identifyelement="519">second &#8211; </strong>wow! It's clear that they would place a ban, or block, on this IP address so that it cannot connect to their website anymore.</span></p>
<p data-identifyelement="520"><span data-identifyelement="521">What is the appropriate speed that you can connect to the site you are using the proxies on? Unfortunately, that's a hard question to answer, but what we recommend is that people run their own experiments to find that rate:</span></p>
<ol data-identifyelement="523">
<li data-identifyelement="524"><span data-identifyelement="525">Set your software to run at a slow speed that will not cause a ban (ex: 1 request per hour)</span></li>
<li data-identifyelement="527"><span data-identifyelement="528">If you do not receive a ban at that rate, then increase it higher (ex: 2 requests per hour)</span></li>
<li data-identifyelement="530"><span data-identifyelement="531">Repeat this until you receive a ban, and then set your rate at the previous rate before</span></li>
</ol>
<hr />
<p data-identifyelement="533"><span data-identifyelement="534"> </span><strong>2. You are running at a slow rate and some of your proxies work, but others do not</strong></p>
<p data-identifyelement="543"><span data-identifyelement="544">The next question we frequently receive is customers asking why <em data-identifyelement="546">some</em> of their proxies work, and why some of their proxies are banned. This is an unfortunate side effect of how IPv4 address schema works and why it impacts proxies.</span></p>
<p data-identifyelement="547"><span data-identifyelement="548">There are two terms used frequently in the proxy business:</span></p>
<ol data-identifyelement="550">
<li data-identifyelement="551"><span data-identifyelement="552">Subnets (A, B, C subnets &#8211; <a href="https://www.tutorialspoint.com/ipv4/ipv4_subnetting.htm" target="_blank" rel="nofollow noopener" data-identifyelement="554">read here for more info</a>)</span></li>
<li data-identifyelement="555"><span data-identifyelement="556">ISPs (or ASNs). Example:  Verizon is an ISP;  <a href="https://whois.arin.net/rest/org/SL-1146/nets" target="_blank" rel="nofollow noopener" data-identifyelement="558">Sprious is an ISP</a>; etc</span></li>
</ol>
<p data-identifyelement="563"><span data-identifyelement="564">Why do subnets and ISPs (Internet Service Providers) matter in the terms of proxies? It's because it makes it easier for the website you are using the proxy on to see that you are sharing the same ISP or subnet as other proxy customers of ours that are also using the proxies for the same use case.</span></p>
<p data-identifyelement="570"><span data-identifyelement="571">Given that the proxy industry is driven largely by certain niches (Scraping, social media marketing, and others), it's very common that many customers are using proxies for the same use case as yours. Therefore, when this happens, your proxy speeds can negatively impact each other <strong data-identifyelement="573">because you share the same subnet or ISP as another customer using the same use case</strong>.</span></p>
<p data-identifyelement="578"><span data-identifyelement="579">What can you do about this? Please read on!</span></p>
<hr />
<h3 data-identifyelement="584"><span data-identifyelement="585"><strong>What Can I do About My Proxies Being Banned?</strong></span></h3>
<p data-identifyelement="591"><span data-identifyelement="592">In this section we will cover various options you have to be more successful with your proxies with Blazing SEO:</span></p>
<p><span data-identifyelement="596">1. From day one, Blazing SEO made it a top priority that our customers could have the freedom to <strong data-identifyelement="598">automatically</strong> replace their proxies if any of them were not working for any reason.</span></p>
<p><span data-identifyelement="600">2. If you run out of replacements, please contact us and our support team will assist you with restoring the replacements.</span></p>
<p><span data-identifyelement="604">3. Slow your proxy speed down:  As discussed in the previous section, sometimes it just requires you to slow down your rates a little in order to achieve maximum throughput.</span></p>
<p><span data-identifyelement="607">4. Contact us &#8211; <em>seriously</em>!</span></p>
<ul>
<li><span data-identifyelement="612">If pricing is a problem at the rates you are running your proxies now, please contact us and we can discuss custom pricing that will make you the most profitable.</span></li>
<li><span data-identifyelement="615">There are a number of strategies we can offer you (at no additional cost) that will give your account better proxies. This includes only giving you IPs from certain ISPs/ASNs and only IPs from certain subnets that appear to work better for your use case.</span></li>
<li><span data-identifyelement="619">The reason that certain IPs on certain ISPs or subnets work better than others is that some ISPs that we partner with are on &#8220;blacklists&#8221; for certain use cases. By configuring your account to receive IPs from ISPs/subnets that work for you, you will inherently avoid getting IPs from the &#8220;blacklisted&#8221; ISPs/subnets</span></li>
</ul>
<div class="hs-callout-type-tip" data-hs-callout-type="tip" data-identifyelement="621">
<p data-identifyelement="622"><span data-identifyelement="623">Did you know:  Blazing SEO has IPs spread across:</span></p>
<p><span data-identifyelement="627">1. 7 different ISPs/ASNs</span></p>
<p><span data-identifyelement="630">2. Thousands of unique C-class subnets. Just look at one of our partner's <a href="https://whois.arin.net/rest/org/SL-1146/nets" target="_blank" rel="nofollow noopener" data-identifyelement="632">IP diversity here</a>.</span></p>
</div>
<div class="su-heading su-heading-style-modern-2-orange su-heading-align-center" id="" style="font-size:30px;margin-bottom:20px"><div class="su-heading-inner">FAQs</div></div>
<p class="heading"><strong>1. How can I switch between proxies in my browser?</strong></p>
<p>We recommend using the FoxyProxy Add-on for <a href="https://chrome.google.com/webstore/detail/foxyproxy-standard/gcknhkkoolaabfmlnjonogaaifnjlfnp?hl=en" target="_blank" rel="nofollow noopener">Chrome</a> or <a href="https://addons.mozilla.org/en-US/firefox/addon/foxyproxy-standard/" target="_blank" rel="nofollow noopener">Firefox</a> to easily switch between proxies in your browser.</p>
<p class="heading"><strong>2. What happens if I use a dynamic changing personal IP?<a class="solution-print--icon print--remove" title="Print this Article"> </a></strong></p>
<p>If you have an IP address that is dynamic (changing), then you will be unable to authorize your proxies via IP authorization in the proxy dashboard. You will need to instead use Username/Password authorization.<br />
However, it is not currently possible to use Username/Password with our Rotating Proxies, only IP authorization. So if you have a dynamic IP, then rotating proxies will not work for you.</p>
<p class="heading"><strong>3. How do I know if I set up my proxies correctly?</strong></p>
<p>Many users report that their proxies are &#8220;not working&#8221;, but in actuality, it is a server or user error that is the cause of it.  If you see the proxy IP at whatismyipaddress.com then you know you have set it up correctly.</p>
<p><strong>4. When should I replace a proxy in my account?</strong></p>
<p>In rare occasions, the proxy may go offline due to unforeseen circumstances. If you urgently need to use all the available proxies in your account, you may replace the proxy that isn’t working through your proxy DASHBOARD and you can also follow this video guide for reference below. Also, if you find a particular IP address to be unsuitable to your usage, you may also replace the respective IP via your proxy dashboard.</p>
<div class="su-youtube su-u-responsive-media-yes"><iframe loading="lazy" width="600" height="400" src="https://www.youtube.com/embed/oxL8OAxPeRQ?" frameborder="0" allowfullscreen allow="autoplay; encrypted-media; picture-in-picture" title=""></iframe></div>
<div class="icon">
<div class="icon">
<hr />
</div>
</div>
<div>
<h4 id="references" class="ftwp-heading">References,</h4>
<ul>
<li><a href="https://portal.blazingseollc.com/en/support/solutions/articles/64000262800-how-do-i-use-proxies-" target="_blank" rel="nofollow noopener">https://portal.blazingseollc.com/en/support/solutions/articles/64000262800-how-do-i-use-proxies-</a></li>
<li><a href="https://portal.blazingseollc.com/en/support/solutions/articles/64000256632-how-do-i-authorize-my-proxies" target="_blank" rel="nofollow noopener">https://portal.blazingseollc.com/en/support/solutions/articles/64000256632-how-do-i-authorize-my-proxies</a></li>
<li><a href="https://portal.blazingseollc.com/en/support/solutions/articles/64000256617-how-do-i-use-and-test-my-proxies-in-a-browser" target="_blank" rel="nofollow noopener">https://portal.blazingseollc.com/en/support/solutions/articles/64000256617-how-do-i-use-and-test-my-proxies-in-a-browser</a></li>
<li><a href="https://portal.blazingseollc.com/en/support/solutions/articles/64000256637-how-can-i-switch-between-proxies-in-my-browser" target="_blank" rel="nofollow noopener">https://portal.blazingseollc.com/en/support/solutions/articles/64000256637-how-can-i-switch-between-proxies-in-my-browser</a></li>
<li><a href="https://portal.blazingseollc.com/en/support/solutions/articles/64000263277-how-can-i-get-a-diverse-subnet-for-my-proxies" target="_blank" rel="nofollow noopener">https://portal.blazingseollc.com/en/support/solutions/articles/64000263277-how-can-i-get-a-diverse-subnet-for-my-proxies</a></li>
<li><a href="https://portal.blazingseollc.com/en/support/solutions/articles/64000262801-how-do-i-test-proxies-" target="_blank" rel="nofollow noopener">https://portal.blazingseollc.com/en/support/solutions/articles/64000262801-how-do-i-test-proxies-</a></li>
<li><a href="https://portal.blazingseollc.com/en/support/solutions/articles/64000256599-how-do-i-replace-proxies-" target="_blank" rel="nofollow noopener">https://portal.blazingseollc.com/en/support/solutions/articles/64000256599-how-do-i-replace-proxies-</a></li>
<li><a href="https://portal.blazingseollc.com/en/support/solutions/articles/64000256601-how-do-i-cancel-proxies-" target="_blank" rel="nofollow noopener">https://portal.blazingseollc.com/en/support/solutions/articles/64000256601-how-do-i-cancel-proxies-</a></li>
<li><a href="https://portal.blazingseollc.com/en/support/solutions/articles/64000256602-how-do-i-upgrade-my-proxies-" target="_blank" rel="nofollow noopener">https://portal.blazingseollc.com/en/support/solutions/articles/64000256602-how-do-i-upgrade-my-proxies-</a></li>
<li><a href="https://portal.blazingseollc.com/en/support/solutions/articles/64000256600-how-do-i-downgrade-my-proxies" target="_blank" rel="nofollow noopener">https://portal.blazingseollc.com/en/support/solutions/articles/64000256600-how-do-i-downgrade-my-proxies</a></li>
<li><a href="https://portal.blazingseollc.com/en/support/solutions/articles/64000256620-what-happens-if-i-use-a-dynamic-changing-personal-ip" target="_blank" rel="nofollow noopener">https://portal.blazingseollc.com/en/support/solutions/articles/64000256620-what-happens-if-i-use-a-dynamic-changing-personal-ip</a></li>
<li><a href="https://portal.blazingseollc.com/en/support/solutions/articles/64000256627-why-are-my-proxies-not-working-on-some-sites" target="_blank" rel="nofollow noopener">https://portal.blazingseollc.com/en/support/solutions/articles/64000256627-why-are-my-proxies-not-working-on-some-sites</a></li>
<li><a href="https://portal.blazingseollc.com/en/support/solutions/articles/64000256629-how-do-i-know-if-i-set-up-my-proxies-correctly" target="_blank" rel="nofollow noopener">https://portal.blazingseollc.com/en/support/solutions/articles/64000256629-how-do-i-know-if-i-set-up-my-proxies-correctly</a></li>
<li><a href="https://portal.blazingseollc.com/en/support/solutions/articles/64000262804-when-should-i-replace-a-proxy-in-my-account-" target="_blank" rel="nofollow noopener">https://portal.blazingseollc.com/en/support/solutions/articles/64000262804-when-should-i-replace-a-proxy-in-my-account-</a></li>
</ul>
<hr />
</div>
<blockquote><p><strong>Disclaimer</strong>: This part of the content is mainly from the merchant. If the merchant does not want it to be displayed on my website, please <a href="https://www.proxysp.com/contact-us/">contact us</a> to delete your content.</p></blockquote>
]]></content:encoded>
					
					<wfw:commentRss>https://proxysp.com/how-to-use-blazingseo-proxies/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">7670</post-id>	</item>
		<item>
		<title>How to Use OxyLabs Proxy [Part 2]: OxyLabs Residential Proxies Manual</title>
		<link>https://proxysp.com/oxylabs-residential-proxies/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=oxylabs-residential-proxies</link>
					<comments>https://proxysp.com/oxylabs-residential-proxies/#respond</comments>
		
		<dc:creator><![CDATA[admin]]></dc:creator>
		<pubDate>Thu, 01 Jan 1970 00:00:00 +0000</pubDate>
				<category><![CDATA[How to Use OxyLabs Proxy (OxyLabs User Manual Navigation)]]></category>
		<guid isPermaLink="false">https://www.proxysp.com/?p=7621</guid>

					<description><![CDATA[Want to use OxyLabs' residential proxies? Then you can't miss this article. It is the most comprehensive OxyLabs residential proxies user guide. Quick Start This is &#8230;<p class="read-more"> <a class="ast-button" href="https://proxysp.com/oxylabs-residential-proxies/"> <span class="screen-reader-text">How to Use OxyLabs Proxy [Part 2]: OxyLabs Residential Proxies Manual</span> Read More &#187;</a></p>]]></description>
										<content:encoded><![CDATA[<blockquote><p>Want to use OxyLabs' residential proxies? Then you can't miss this article. It is the most comprehensive OxyLabs residential proxies user guide.</p></blockquote>
<h2 id="quick-start">Quick Start</h2>
<p>This is by far the fastest way to start using Residential Proxies. You will make a request to <code>https://ipinfo.io</code> using a residential proxy from a random location through our <a href="#basic-query">Backconnect Entry</a>. Don't forget to replace <code>USERNAME</code> and <code>PASSWORD</code> with your proxy user credentials.</p>
<pre>curl -x pr.oxylabs.io:7777 -U "customer-USERNAME:PASSWORD" https://ipinfo.io
</pre>
<p>Let's make a request using a proxy from France. All you need to do is add <code>cc-FR</code> to your username string. Below is an example in cURL, and <a href="#select-country">here</a> you can find code samples in other languages.</p>
<pre>curl -x pr.oxylabs.io:7777 -U "customer-USERNAME-cc-FR:PASSWORD" https://ipinfo.io
</pre>
<p>Here is one more example of a request that goes through a proxy from London, United Kingdom. Adding <code>cc-GB-city-london</code> to username string enables you to do just that. Click <a href="#select-city">here</a> to get more information on how to master city-level proxy targeting.</p>
<pre>curl -x pr.oxylabs.io:7777 -U "customer-USERNAME-cc-GB-city-london:PASSWORD" https://ipinfo.io
</pre>
<p>What if you want to keep the same proxy for more than one request? <a href="#session-control">Session control</a> enables that. Just add <code>sessid-abc12345</code> to your username string, where <code>abc12345</code> can be any random string, and as long as you keep sending requests with this string (session ID), we will try our best to give you the same proxy IP.</p>
<pre>curl -x pr.oxylabs.io:7777 -U "customer-USERNAME-sessid-randomString123:PASSWORD" https://ipinfo.io
</pre>
<p>Check out our <a href="#3rd-party-integrations">integration tutorials</a> with the most popular 3rd party tools, such as <a href="#multilogin">Multilogin</a>, <a href="#shadowrocket">ShadowRocket</a>, or <a href="#switchyomega">SwitchyOmega</a>.</p>
<p>If you have any additional questions, please contact your account manager or our support team at <a class="custom_link" href="mailto:support@oxylabs.io" target="_blank" rel="nofollow noopener">support@oxylabs.io</a>.</p>
<p>To find out your usage statistics, generated traffic, request count and more, please login to <a class="custom_link" href="https://dashboard.oxylabs.io/" target="_blank" rel="nofollow noopener">dashboard.oxylabs.io</a>. You can also add proxy users (subusers) and track their statistics separately.</p>
<hr />
<h2 id="backconnect-entry-node">Backconnect Entry Node</h2>
<pre>pr.oxylabs.io:7777
</pre>
<p>The single backconnect proxy enables to choose a specific country or city proxy via additional parameters in the username. This approach also supports session control. Below is a sample credentials structure:</p>
<pre>customer-USERNAME-cc-US-city-CITY-sessid-abcde12345:PASSWORD
</pre>
<div class="su-table su-table-responsive su-table-alternate">
<table>
<thead>
<tr>
<th>Parameter</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><code class="required"><code>customer</code></code></td>
<td>Username</td>
</tr>
<tr>
<td><code>cc</code></td>
<td>Case insensitive country code in 2-letter <a class="custom_link" href="https://en.wikipedia.org/wiki/ISO_3166-1_alpha-2" target="_blank" rel="nofollow noopener">3166-1 alpha-2 format</a>. For example, <code>DE</code> for Germany, <code>GB</code> for United Kingdom, <code>TH</code> for Thailand. More details on how to use country-specific proxies can be found <a href="#select-country">here</a>.</td>
</tr>
<tr>
<td><code>city</code></td>
<td>Case insensitive city name in English. This parameter has to accompanied by <code>cc</code> for better accuracy. For example, <code>cc-GB-city-london</code> for London, United Kingdom; <code>cc-DE-city-berlin</code> for Berlin, Germany. For a city with more than two words, replace space with <code>_</code>, for example <code>city-st_petersburg</code> or <code>city-rio_de_janeiro</code>.</p>
<p>We support every city in the world, but we do not guarantee we will have proxies there. Most popular cities are well covered, and will have many proxies to choose from. For reference, you can check <a class="custom_link" href="https://docs.oxylabs.io/resources/supported_cities.csv" target="_blank" rel="noopener">this list</a> of what cities you can expect to find. Click <a href="#select-city">here</a> for more information on city-level targeting.</td>
</tr>
<tr>
<td><code>st</code></td>
<td>Case insensitive US state name with us_ in the beginning, for example <code>us_california</code>, <code>us_illinois</code>. Full list of supported cities in TXT format can be downloaded <a class="custom_link" href="https://docs.oxylabs.io/resources/us_states.txt" target="_blank" rel="nofollow noopener">here</a>.</td>
</tr>
<tr>
<td><code>sessid</code></td>
<td>Session ID to keep the same IP with upcoming queries. Session expires after 10 minutes, after that a new IP is assigned to that ID. Random string; 0-9, A-z characters are supported.</td>
</tr>
<tr>
<td><code class="required"><code>password</code></code></td>
<td>Password</td>
</tr>
</tbody>
</table>
<p><code class="required">  </code> &#8211; required parameter</p>
</div>
We also support targeting by ASN number. It enables to choose proxies from specific carriers. This feature is enabled upon request.</p>
<p>If you add more than one <em>location</em> parameter in the username, the system will ignore all but one. Therefore it's important to understand which parameters get prioritized. The hierarchy is as follows:</p>
<ol>
<li><code>city</code></li>
<li><code>state</code></li>
<li><code>cc</code></li>
</ol>
<p>For example, if your query has these parameters <code>customer-username-cc-US-city-paris-st-us_california</code>, you will get a proxy from Paris, US.</p>
<hr />
<h3 id="entry-node-for-china">Entry Node for China</h3>
<pre>https://a81298871.com:8000 - Hong Kong
</pre>
<pre>https://cnt9t1is.com:8000 - Beijing
</pre>
<p>For better connectivity from China, we have configured entry nodes in Hong Kong and Beijing regions. Note that it is an HTTPS proxy node. All username parameters are identical to the regular entry node.</p>
<p>Please note that some 3rd party tools currently do not work with Hong Kong and Beijing entry nodes. 3rd party tools that work with said entry nodes are:</p>
<ol>
<li style="list-style-type: none;">
<ol>
<li style="list-style-type: none;">
<ol>
<li><a href="#oxylabs-proxy-manager">Oxylabs Proxy Manager</a></li>
<li><a href="#switchyomega">SwitchyOmega</a></li>
<li><a href="#shadowrocket">Shadowrocket</a></li>
<li><a href="#postern">Postern</a></li>
</ol>
</li>
</ol>
</li>
</ol>
<p><span style="font-size: 16px;">We are currently working on fixing the rest of the integrations on which HTTPS protocol will be supported.</span></p>
<p>If you are connecting to our residential network from China and still have issues with provided entry nodes, please get in touch at <a class="custom_link" href="mailto:support@oxylabs.io" target="_blank" rel="nofollow noopener">support@oxylabs.io</a> and we will figure out a solution together.</p>
<hr />
<h2 id="basic-query">Basic Query</h2>
<p>Basic query only requires to pass <code>username</code> and <code>password</code>. No other parameters are needed. Such query will result in the request being made from a random IP address (proxy). Every new request will use a different proxy.</p>
<p>In this example a query to <code>ipinfo.io</code> is performed from a random IP:</p>
<pre>curl -x pr.oxylabs.io:7777 -U "customer-USERNAME:PASSWORD" https://ipinfo.io
</pre>
<hr />
<h2 id="select-country">Select Country</h2>
<p><img loading="lazy" decoding="async" class="size-full wp-image-8123 alignnone" src="https://www.proxysp.com/wp-content/uploads/2021/09/OxyLabs-Residential-Proxies-Select-Country.png" alt="OxyLabs Residential Proxies Select Country" width="270" height="22" /></p>
<p>Adding <code>cc</code> flag to the authorization header enables to specify which country IP to use to process the request. The value of this parameter is a case insensitive country code in 2-letter <a class="custom_link" href="https://en.wikipedia.org/wiki/ISO_3166-1_alpha-2" target="_blank" rel="nofollow noopener">3166-1 alpha-2 format</a>. For example, <code>DE</code> for Germany, <code>GB</code> for the United Kingdom, <code>TH</code> for Thailand proxy. See examples for more details.</p>
<p>In this example a query to <code>ipinfo.io</code> is performed from a random IP address from Germany:</p>
<pre>curl -x pr.oxylabs.io:7777 -U "customer-USERNAME-cc-DE:PASSWORD" https://ipinfo.io
</pre>
<hr />
<h2 id="select-state">Select State</h2>
<p><img loading="lazy" decoding="async" class="size-full wp-image-8124 alignnone" src="https://www.proxysp.com/wp-content/uploads/2021/09/OxyLabs-Residential-Proxies-Select-State.png" alt="OxyLabs Residential Proxies Select State" width="272" height="24" /></p>
<p>To get proxy from a specified US state, add <code>st</code> flag to the authorization string. For example, <code>us_california</code>, <code>us_illinois</code>. Full list of supported cities in TXT format can be downloaded <a class="custom_link" href="https://docs.oxylabs.io/resources/us_states.txt" target="_blank" rel="nofollow noopener">here</a>.</p>
<p>In this example a query to <code>ipinfo.io</code> is performed from a random IP address from California, USA:</p>
<pre>curl -x pr.oxylabs.io:7777 -U "customer-USERNAME-st-us_california:PASSWORD" https://ipinfo.io
</pre>
<hr />
<h2 id="select-city">Select City</h2>
<p><img loading="lazy" decoding="async" class="size-full wp-image-8125 alignnone" src="https://www.proxysp.com/wp-content/uploads/2021/09/OxyLabs-Residential-Proxies-Select-City.png" alt="OxyLabs Residential Proxies Select City" width="271" height="31" /></p>
<p>To narrow down to a city-level targeting, a <code>city</code> parameter needs to be added. For example, <code>cc-DE-city-munich</code> means that a proxy from Munich, Germany, will handle the query. We support every city in the world, but we do not guarantee we will have proxies there. Most popular cities are well covered, and will have many proxies to choose from.</p>
<p>Here are a few examples of valid combinations of <code>cc</code> and <code>city</code> parameters:<br />
<code>cc-US-city-los_angeles</code><br />
<code>cc-IT-city-rome</code><br />
<code>cc-TH-city-bangkok</code><br />
<code>cc-JP-city-tokyo</code><br />
<code>cc-AU-city-sydney</code><br />
<code>cc-ES-city-barcelona</code></p>
<p>In this example a query to <code>ipinfo.io</code> is performed from a random IP address from Munich, Germany:</p>
<pre>curl -x pr.oxylabs.io:7777 -U "customer-USERNAME-cc-DE-city-munich:PASSWORD" https://ipinfo.io
</pre>
<hr />
<h2 id="session-control">Session Control</h2>
<p><img loading="lazy" decoding="async" class="size-full wp-image-8126 alignnone" src="https://www.proxysp.com/wp-content/uploads/2021/09/OxyLabs-Residential-Proxies-Session-Control.png" alt="OxyLabs Residential Proxies Session Control" width="268" height="29" /></p>
<p>Adding <code>sessid</code> parameter with session ID string, for example <code>sessid-abc12345</code>, enables session control. This means that the proxy will not change with the following requests. The example below shows how session control works:</p>
<p><img loading="lazy" decoding="async" class="aligncenter size-full wp-image-8127" src="https://www.proxysp.com/wp-content/uploads/2021/09/session-control.gif" alt="session-control" width="853" height="378" /></p>
<p>The system keeps the same IP associated with a particular session ID as long as there is some activity (requests). After 60 seconds of inactivity, the IP is automatically changed to a different one.</p>
<p>For example: * Your initial query with <code>sessid-random123</code> got assigned proxy IP address <code>1.1.1.1</code> * As long as you keep sending new requests with the same session ID and that IP address is online and available, the system will route your queries through <code>1.1.1.1</code> * If you stop sending requests or the IP address is no longer online, the system will assign a new proxy IP after 60 seconds. * This means that your next query with <code>sessid-random123</code> will be routed through a different IP address.</p>
<p>Standard session time is 10 minutes, but it can be increased. Contact your account manager to learn more.</p>
<p>German IP will be chosen for the first request, and then the same IP will be kept with new queries (session control):</p>
<pre>curl -x pr.oxylabs.io:7777 -U "customer-USERNAME-cc-DE-sessid-abcde12345:PASSWORD" https://ipinfo.io
</pre>
<hr />
<h2 id="country-specific-entry-nodes">Country Specific Entry Nodes</h2>
<h3 id="random-proxy-entry-nodes">Random Proxy Entry Nodes</h3>
<p>Oxylabs residential network has coverage in almost every country in the world. Country-specific random proxy entry point will return new IP with every new request.</p>
<p>You do not need to pass any additional parameters, just <code>customer-username:password</code>. If you have whitelisted IPs, you do not need to pass login credentials. Country-specific ports do not support city-level results.</p>
<p>Please see the dashboard for entry point information or download a full list of random entry points in XLS <a class="custom_link" href="https://docs.oxylabs.io/resources/random-proxy-entry-points-oxylabs.xls" target="_blank" rel="nofollow noopener">here</a>.</p>
<div class="su-table su-table-responsive su-table-alternate">
<table width="443">
<tbody>
<tr>
<td style="font-weight: 400;" width="138">Random</td>
<td style="font-weight: 400;" width="140">USA</td>
<td style="font-weight: 400;" width="165">Canada</td>
</tr>
<tr>
<td style="font-weight: 400;" width="138">pr.oxylabs.io:7777</td>
<td style="font-weight: 400;" width="140">us-pr.oxylabs.io:10000</td>
<td style="font-weight: 400;" width="165">ca-pr.oxylabs.io:30000</td>
</tr>
<tr>
<td style="font-weight: 400;" width="138">GB</td>
<td style="font-weight: 400;" width="140">Germany</td>
<td style="font-weight: 400;" width="165">France</td>
</tr>
<tr>
<td style="font-weight: 400;" width="138">gb-pr.oxylabs.io:20000</td>
<td style="font-weight: 400;" width="140">de-pr.oxylabs.io:30000</td>
<td style="font-weight: 400;" width="165">fr-pr.oxylabs.io:40000</td>
</tr>
<tr>
<td style="font-weight: 400;" width="138">Spain</td>
<td style="font-weight: 400;" width="140">Italy</td>
<td style="font-weight: 400;" width="165">Sweden</td>
</tr>
<tr>
<td style="font-weight: 400;" width="138">es-pr.oxylabs.io:10000</td>
<td style="font-weight: 400;" width="140">it-pr.oxylabs.io:20000</td>
<td style="font-weight: 400;" width="165">se-pr.oxylabs.io:30000</td>
</tr>
<tr>
<td style="font-weight: 400;" width="138">Greece</td>
<td style="font-weight: 400;" width="140">Portugal</td>
<td style="font-weight: 400;" width="165">Netherlands</td>
</tr>
<tr>
<td style="font-weight: 400;" width="138">gr-pr.oxylabs.io:40000</td>
<td style="font-weight: 400;" width="140">pt-pr.oxylabs.io:10000</td>
<td style="font-weight: 400;" width="165">nl-pr.oxylabs.io:20000</td>
</tr>
<tr>
<td style="font-weight: 400;" width="138">Belgium</td>
<td style="font-weight: 400;" width="140">Russia</td>
<td style="font-weight: 400;" width="165">Ukraine</td>
</tr>
<tr>
<td style="font-weight: 400;" width="138">be-pr.oxylabs.io:30000</td>
<td style="font-weight: 400;" width="140">ru-pr.oxylabs.io:40000</td>
<td style="font-weight: 400;" width="165">ua-pr.oxylabs.io:10000</td>
</tr>
<tr>
<td style="font-weight: 400;" width="138">Poland</td>
<td style="font-weight: 400;" width="140">Israel</td>
<td style="font-weight: 400;" width="165">Turkey</td>
</tr>
<tr>
<td style="font-weight: 400;" width="138">pl-pr.oxylabs.io:20000</td>
<td style="font-weight: 400;" width="140">il-pr.oxylabs.io:20000</td>
<td style="font-weight: 400;" width="165">tr-pr.oxylabs.io:30000</td>
</tr>
<tr>
<td style="font-weight: 400;" width="138">Australia</td>
<td style="font-weight: 400;" width="140">Malaysia</td>
<td style="font-weight: 400;" width="165">Thailand</td>
</tr>
<tr>
<td style="font-weight: 400;" width="138">au-pr.oxylabs.io:40000</td>
<td style="font-weight: 400;" width="140">my-pr.oxylabs.io:10000</td>
<td style="font-weight: 400;" width="165">th-pr.oxylabs.io:20000</td>
</tr>
<tr>
<td style="font-weight: 400;" width="138">South Korea</td>
<td style="font-weight: 400;" width="140">Japan</td>
<td style="font-weight: 400;" width="165">Philippines</td>
</tr>
<tr>
<td style="font-weight: 400;" width="138">kr-pr.oxylabs.io:30000</td>
<td style="font-weight: 400;" width="140">jp-pr.oxylabs.io:40000</td>
<td style="font-weight: 400;" width="165">ph-pr.oxylabs.io:10000</td>
</tr>
<tr>
<td style="font-weight: 400;" width="138">Singapore</td>
<td style="font-weight: 400;" width="140">China</td>
<td style="font-weight: 400;" width="165">Hong Kong</td>
</tr>
<tr>
<td style="font-weight: 400;" width="138">sg-pr.oxylabs.io:20000</td>
<td style="font-weight: 400;" width="140">cn-pr.oxylabs.io:30000</td>
<td style="font-weight: 400;" width="165">hk-pr.oxylabs.io:40000</td>
</tr>
<tr>
<td style="font-weight: 400;" width="138">Taiwan</td>
<td style="font-weight: 400;" width="140">India</td>
<td style="font-weight: 400;" width="165">Pakistan</td>
</tr>
<tr>
<td style="font-weight: 400;" width="138">tw-pr.oxylabs.io:10000</td>
<td style="font-weight: 400;" width="140">in-pr.oxylabs.io:20000</td>
<td style="font-weight: 400;" width="165">pk-pr.oxylabs.io:30000</td>
</tr>
<tr>
<td style="font-weight: 400;" width="138">Iran</td>
<td style="font-weight: 400;" width="140">Indonesia</td>
<td style="font-weight: 400;" width="165">Azerbaijan</td>
</tr>
<tr>
<td style="font-weight: 400;" width="138">ir-pr.oxylabs.io:40000</td>
<td style="font-weight: 400;" width="140">id-pr.oxylabs.io:10000</td>
<td style="font-weight: 400;" width="165">az-pr.oxylabs.io:20000</td>
</tr>
<tr>
<td style="font-weight: 400;" width="138">Kazakhstan</td>
<td style="font-weight: 400;" width="140">UAE</td>
<td style="font-weight: 400;" width="165">Mexico</td>
</tr>
<tr>
<td style="font-weight: 400;" width="138">kz-pr.oxylabs.io:30000</td>
<td style="font-weight: 400;" width="140">ae-pr.oxylabs.io:40000</td>
<td style="font-weight: 400;" width="165">mx-pr.oxylabs.io:10000</td>
</tr>
<tr>
<td style="font-weight: 400;" width="138">Brazil</td>
<td style="font-weight: 400;" width="140">Argentina</td>
<td style="font-weight: 400;" width="165">Chile</td>
</tr>
<tr>
<td style="font-weight: 400;" width="138">br-pr.oxylabs.io:20000</td>
<td style="font-weight: 400;" width="140">ar-pr.oxylabs.io:30000</td>
<td style="font-weight: 400;" width="165">cl-pr.oxylabs.io:40000</td>
</tr>
<tr>
<td style="font-weight: 400;" width="138">Peru</td>
<td style="font-weight: 400;" width="140">Ecuador</td>
<td style="font-weight: 400;" width="165">Colombia</td>
</tr>
<tr>
<td style="font-weight: 400;" width="138">pe-pr.oxylabs.io:10000</td>
<td style="font-weight: 400;" width="140">ec-pr.oxylabs.io:20000</td>
<td style="font-weight: 400;" width="165">co-pr.oxylabs.io:30000</td>
</tr>
<tr>
<td style="font-weight: 400;" width="138">South Africa</td>
<td style="font-weight: 400;" width="140">Egypt</td>
<td style="font-weight: 400;" width="165">Angola</td>
</tr>
<tr>
<td style="font-weight: 400;" width="138">za-pr.oxylabs.io:40000</td>
<td style="font-weight: 400;" width="140">eg-pr.oxylabs.io:10000</td>
<td style="font-weight: 400;" width="165">ao-pr.oxylabs.io:40000</td>
</tr>
<tr>
<td style="font-weight: 400;" width="138">Cameroon</td>
<td style="font-weight: 400;" width="140">Central African Republic</td>
<td style="font-weight: 400;" width="165">Chad</td>
</tr>
<tr>
<td style="font-weight: 400;" width="138">cm-pr.oxylabs.io:41000</td>
<td style="font-weight: 400;" width="140">cf-pr.oxylabs.io:42000</td>
<td style="font-weight: 400;" width="165">td-pr.oxylabs.io:43000</td>
</tr>
<tr>
<td style="font-weight: 400;" width="138">Benin</td>
<td style="font-weight: 400;" width="140">Ethiopia</td>
<td style="font-weight: 400;" width="165">Djibouti</td>
</tr>
<tr>
<td style="font-weight: 400;" width="138">bj-pr.oxylabs.io:44000</td>
<td style="font-weight: 400;" width="140">et-pr.oxylabs.io:45000</td>
<td style="font-weight: 400;" width="165">dj-pr.oxylabs.io:46000</td>
</tr>
<tr>
<td style="font-weight: 400;" width="138">Gambia</td>
<td style="font-weight: 400;" width="140">Ghana</td>
<td style="font-weight: 400;" width="165">Côte d'Ivoire</td>
</tr>
<tr>
<td style="font-weight: 400;" width="138">gm-pr.oxylabs.io:47000</td>
<td style="font-weight: 400;" width="140">gh-pr.oxylabs.io:48000</td>
<td style="font-weight: 400;" width="165">ci-pr.oxylabs.io:49000</td>
</tr>
<tr>
<td style="font-weight: 400;" width="138">Kenya</td>
<td style="font-weight: 400;" width="140">Liberia</td>
<td style="font-weight: 400;" width="165">Madagascar</td>
</tr>
<tr>
<td style="font-weight: 400;" width="138">ke-pr.oxylabs.io:10000</td>
<td style="font-weight: 400;" width="140">lr-pr.oxylabs.io:11000</td>
<td style="font-weight: 400;" width="165">mg-pr.oxylabs.io:12000</td>
</tr>
<tr>
<td style="font-weight: 400;" width="138">Mali</td>
<td style="font-weight: 400;" width="140">Mauritania</td>
<td style="font-weight: 400;" width="165">Mauritius</td>
</tr>
<tr>
<td style="font-weight: 400;" width="138">ml-pr.oxylabs.io:13000</td>
<td style="font-weight: 400;" width="140">mr-pr.oxylabs.io:14000</td>
<td style="font-weight: 400;" width="165">mu-pr.oxylabs.io:15000</td>
</tr>
<tr>
<td style="font-weight: 400;" width="138">Morocco</td>
<td style="font-weight: 400;" width="140">Mozambique</td>
<td style="font-weight: 400;" width="165">Nigeria</td>
</tr>
<tr>
<td style="font-weight: 400;" width="138">ma-pr.oxylabs.io:16000</td>
<td style="font-weight: 400;" width="140">mz-pr.oxylabs.io:17000</td>
<td style="font-weight: 400;" width="165">ng-pr.oxylabs.io:18000</td>
</tr>
<tr>
<td style="font-weight: 400;" width="138">Senegal</td>
<td style="font-weight: 400;" width="140">Seychelles</td>
<td style="font-weight: 400;" width="165">Zimbabwe</td>
</tr>
<tr>
<td style="font-weight: 400;" width="138">sn-pr.oxylabs.io:19000</td>
<td style="font-weight: 400;" width="140">sc-pr.oxylabs.io:20000</td>
<td style="font-weight: 400;" width="165">zw-pr.oxylabs.io:21000</td>
</tr>
<tr>
<td style="font-weight: 400;" width="138">South Sudan</td>
<td style="font-weight: 400;" width="140">Sudan</td>
<td style="font-weight: 400;" width="165">Togo</td>
</tr>
<tr>
<td style="font-weight: 400;" width="138">ss-pr.oxylabs.io:22000</td>
<td style="font-weight: 400;" width="140">sd-pr.oxylabs.io:23000</td>
<td style="font-weight: 400;" width="165">tg-pr.oxylabs.io:24000</td>
</tr>
<tr>
<td style="font-weight: 400;" width="138">Tunisia</td>
<td style="font-weight: 400;" width="140">Uganda</td>
<td style="font-weight: 400;" width="165">Zambia</td>
</tr>
<tr>
<td style="font-weight: 400;" width="138">tn-pr.oxylabs.io:25000</td>
<td style="font-weight: 400;" width="140">ug-pr.oxylabs.io:26000</td>
<td style="font-weight: 400;" width="165">zm-pr.oxylabs.io:27000</td>
</tr>
<tr>
<td style="font-weight: 400;" width="138">Afghanistan</td>
<td style="font-weight: 400;" width="140">Bahrain</td>
<td style="font-weight: 400;" width="165">Bangladesh</td>
</tr>
<tr>
<td style="font-weight: 400;" width="138">af-pr.oxylabs.io:28000</td>
<td style="font-weight: 400;" width="140">bh-pr.oxylabs.io:29000</td>
<td style="font-weight: 400;" width="165">bd-pr.oxylabs.io:30000</td>
</tr>
<tr>
<td style="font-weight: 400;" width="138">Armenia</td>
<td style="font-weight: 400;" width="140">Bhutan</td>
<td style="font-weight: 400;" width="165">Myanmar</td>
</tr>
<tr>
<td style="font-weight: 400;" width="138">am-pr.oxylabs.io:31000</td>
<td style="font-weight: 400;" width="140">bt-pr.oxylabs.io:32000</td>
<td style="font-weight: 400;" width="165">mm-pr.oxylabs.io:33000</td>
</tr>
<tr>
<td style="font-weight: 400;" width="138">Cambodia</td>
<td style="font-weight: 400;" width="140">Georgia</td>
<td style="font-weight: 400;" width="165">Iraq</td>
</tr>
<tr>
<td style="font-weight: 400;" width="138">kh-pr.oxylabs.io:34000</td>
<td style="font-weight: 400;" width="140">ge-pr.oxylabs.io:36000</td>
<td style="font-weight: 400;" width="165">iq-pr.oxylabs.io:37000</td>
</tr>
<tr>
<td style="font-weight: 400;" width="138">Jordan</td>
<td style="font-weight: 400;" width="140">Lebanon</td>
<td style="font-weight: 400;" width="165">Maldives</td>
</tr>
<tr>
<td style="font-weight: 400;" width="138">jo-pr.oxylabs.io:38000</td>
<td style="font-weight: 400;" width="140">lb-pr.oxylabs.io:39000</td>
<td style="font-weight: 400;" width="165">mv-pr.oxylabs.io:40000</td>
</tr>
<tr>
<td style="font-weight: 400;" width="138">Mongolia</td>
<td style="font-weight: 400;" width="140">Oman</td>
<td style="font-weight: 400;" width="165">Qatar</td>
</tr>
<tr>
<td style="font-weight: 400;" width="138">mn-pr.oxylabs.io:41000</td>
<td style="font-weight: 400;" width="140">om-pr.oxylabs.io:42000</td>
<td style="font-weight: 400;" width="165">qa-pr.oxylabs.io:43000</td>
</tr>
<tr>
<td style="font-weight: 400;" width="138">Saudi Arabia</td>
<td style="font-weight: 400;" width="140">Vietnam</td>
<td style="font-weight: 400;" width="165">Turkmenistan</td>
</tr>
<tr>
<td style="font-weight: 400;" width="138">sa-pr.oxylabs.io:44000</td>
<td style="font-weight: 400;" width="140">vn-pr.oxylabs.io:45000</td>
<td style="font-weight: 400;" width="165">tm-pr.oxylabs.io:46000</td>
</tr>
<tr>
<td style="font-weight: 400;" width="138">Uzbekistan</td>
<td style="font-weight: 400;" width="140">Yemen</td>
<td style="font-weight: 400;" width="165">Albania</td>
</tr>
<tr>
<td style="font-weight: 400;" width="138">uz-pr.oxylabs.io:47000</td>
<td style="font-weight: 400;" width="140">ye-pr.oxylabs.io:48000</td>
<td style="font-weight: 400;" width="165">al-pr.oxylabs.io:49000</td>
</tr>
<tr>
<td style="font-weight: 400;" width="138">Andorra</td>
<td style="font-weight: 400;" width="140">Austria</td>
<td style="font-weight: 400;" width="165">Bosnia and Herzegovina</td>
</tr>
<tr>
<td style="font-weight: 400;" width="138">ad-pr.oxylabs.io:10000</td>
<td style="font-weight: 400;" width="140">at-pr.oxylabs.io:11000</td>
<td style="font-weight: 400;" width="165">ba-pr.oxylabs.io:13000</td>
</tr>
<tr>
<td style="font-weight: 400;" width="138">Bulgaria</td>
<td style="font-weight: 400;" width="140">Belarus</td>
<td style="font-weight: 400;" width="165">Croatia</td>
</tr>
<tr>
<td style="font-weight: 400;" width="138">bg-pr.oxylabs.io:14000</td>
<td style="font-weight: 400;" width="140">by-pr.oxylabs.io:15000</td>
<td style="font-weight: 400;" width="165">hr-pr.oxylabs.io:16000</td>
</tr>
<tr>
<td style="font-weight: 400;" width="138">Cyprus</td>
<td style="font-weight: 400;" width="140">Czech Republic</td>
<td style="font-weight: 400;" width="165">Denmark</td>
</tr>
<tr>
<td style="font-weight: 400;" width="138">cy-pr.oxylabs.io:35000</td>
<td style="font-weight: 400;" width="140">cz-pr.oxylabs.io:18000</td>
<td style="font-weight: 400;" width="165">dk-pr.oxylabs.io:19000</td>
</tr>
<tr>
<td style="font-weight: 400;" width="138">Estonia</td>
<td style="font-weight: 400;" width="140">Finland</td>
<td style="font-weight: 400;" width="165">Hungary</td>
</tr>
<tr>
<td style="font-weight: 400;" width="138">ee-pr.oxylabs.io:20000</td>
<td style="font-weight: 400;" width="140">fi-pr.oxylabs.io:21000</td>
<td style="font-weight: 400;" width="165">hu-pr.oxylabs.io:23000</td>
</tr>
<tr>
<td style="font-weight: 400;" width="138">Iceland</td>
<td style="font-weight: 400;" width="140">Ireland</td>
<td style="font-weight: 400;" width="165">Latvia</td>
</tr>
<tr>
<td style="font-weight: 400;" width="138">is-pr.oxylabs.io:24000</td>
<td style="font-weight: 400;" width="140">ie-pr.oxylabs.io:25000</td>
<td style="font-weight: 400;" width="165">lv-pr.oxylabs.io:26000</td>
</tr>
<tr>
<td style="font-weight: 400;" width="138">Liechtenstein</td>
<td style="font-weight: 400;" width="140">Lithuania</td>
<td style="font-weight: 400;" width="165">Luxembourg</td>
</tr>
<tr>
<td style="font-weight: 400;" width="138">li-pr.oxylabs.io:27000</td>
<td style="font-weight: 400;" width="140">lt-pr.oxylabs.io:28000</td>
<td style="font-weight: 400;" width="165">lu-pr.oxylabs.io:29000</td>
</tr>
<tr>
<td style="font-weight: 400;" width="138">Malta</td>
<td style="font-weight: 400;" width="140">Monaco</td>
<td style="font-weight: 400;" width="165">Moldova</td>
</tr>
<tr>
<td style="font-weight: 400;" width="138">mt-pr.oxylabs.io:30000</td>
<td style="font-weight: 400;" width="140">mc-pr.oxylabs.io:31000</td>
<td style="font-weight: 400;" width="165">md-pr.oxylabs.io:32000</td>
</tr>
<tr>
<td style="font-weight: 400;" width="138">Montenegro</td>
<td style="font-weight: 400;" width="140">Norway</td>
<td style="font-weight: 400;" width="165">Romania</td>
</tr>
<tr>
<td style="font-weight: 400;" width="138">me-pr.oxylabs.io:33000</td>
<td style="font-weight: 400;" width="140">no-pr.oxylabs.io:34000</td>
<td style="font-weight: 400;" width="165">ro-pr.oxylabs.io:35000</td>
</tr>
<tr>
<td style="font-weight: 400;" width="138">Serbia</td>
<td style="font-weight: 400;" width="140">Slovakia</td>
<td style="font-weight: 400;" width="165">Slovenia</td>
</tr>
<tr>
<td style="font-weight: 400;" width="138">rs-pr.oxylabs.io:36000</td>
<td style="font-weight: 400;" width="140">sk-pr.oxylabs.io:37000</td>
<td style="font-weight: 400;" width="165">si-pr.oxylabs.io:38000</td>
</tr>
<tr>
<td style="font-weight: 400;" width="138">Switzerland</td>
<td style="font-weight: 400;" width="140">Macedonia</td>
<td style="font-weight: 400;" width="165">Bahamas</td>
</tr>
<tr>
<td style="font-weight: 400;" width="138">ch-pr.oxylabs.io:39000</td>
<td style="font-weight: 400;" width="140">mk-pr.oxylabs.io:40000</td>
<td style="font-weight: 400;" width="165">bs-pr.oxylabs.io:41000</td>
</tr>
<tr>
<td style="font-weight: 400;" width="138">Belize</td>
<td style="font-weight: 400;" width="140">British Virgin Islands</td>
<td style="font-weight: 400;" width="165">Costa Rica</td>
</tr>
<tr>
<td style="font-weight: 400;" width="138">bz-pr.oxylabs.io:42000</td>
<td style="font-weight: 400;" width="140">vg-pr.oxylabs.io:43000</td>
<td style="font-weight: 400;" width="165">cr-pr.oxylabs.io:44000</td>
</tr>
<tr>
<td style="font-weight: 400;" width="138">Cuba</td>
<td style="font-weight: 400;" width="140">Dominica</td>
<td style="font-weight: 400;" width="165">Haiti</td>
</tr>
<tr>
<td style="font-weight: 400;" width="138">cu-pr.oxylabs.io:45000</td>
<td style="font-weight: 400;" width="140">dm-pr.oxylabs.io:46000</td>
<td style="font-weight: 400;" width="165">ht-pr.oxylabs.io:47000</td>
</tr>
<tr>
<td style="font-weight: 400;" width="138">Honduras</td>
<td style="font-weight: 400;" width="140">Jamaica</td>
<td style="font-weight: 400;" width="165">Aruba</td>
</tr>
<tr>
<td style="font-weight: 400;" width="138">hn-pr.oxylabs.io:48000</td>
<td style="font-weight: 400;" width="140">jm-pr.oxylabs.io:49000</td>
<td style="font-weight: 400;" width="165">aw-pr.oxylabs.io:10000</td>
</tr>
<tr>
<td style="font-weight: 400;" width="138">Panama</td>
<td style="font-weight: 400;" width="140">Puerto Rico</td>
<td style="font-weight: 400;" width="165">Trinidad and Tobago</td>
</tr>
<tr>
<td style="font-weight: 400;" width="138">pa-pr.oxylabs.io:11000</td>
<td style="font-weight: 400;" width="140">pr-pr.oxylabs.io:12000</td>
<td style="font-weight: 400;" width="165">tt-pr.oxylabs.io:13000</td>
</tr>
<tr>
<td style="font-weight: 400;" width="138">Fiji</td>
<td style="font-weight: 400;" width="140">New Zealand</td>
<td style="font-weight: 400;" width="165">Bolivia</td>
</tr>
<tr>
<td style="font-weight: 400;" width="138">fj-pr.oxylabs.io:14000</td>
<td style="font-weight: 400;" width="140">nz-pr.oxylabs.io:15000</td>
<td style="font-weight: 400;" width="165">bo-pr.oxylabs.io:16000</td>
</tr>
<tr>
<td style="font-weight: 400;" width="138">Paraguay</td>
<td style="font-weight: 400;" width="140">Uruguay</td>
<td style="font-weight: 400;" width="165">Venezuela</td>
</tr>
<tr>
<td style="font-weight: 400;" width="138">py-pr.oxylabs.io:17000</td>
<td style="font-weight: 400;" width="140">uy-pr.oxylabs.io:18000</td>
<td style="font-weight: 400;" width="165">ve-pr.oxylabs.io:19000</td>
</tr>
</tbody>
</table>
</div>
<p>In this example a query to <code>ipinfo.io</code> is performed from a random Turkey IP:</p>
<pre>curl -x tr-pr.oxylabs.io:30000 -U "customer-USERNAME:PASSWORD" https://ipinfo.io
</pre>
<pre>pr.oxylabs.io:7777
us-pr.oxylabs.io:10000
ca-pr.oxylabs.io:30000
gb-pr.oxylabs.io:20000
de-pr.oxylabs.io:30000
fr-pr.oxylabs.io:40000
es-pr.oxylabs.io:10000
it-pr.oxylabs.io:20000
se-pr.oxylabs.io:30000
gr-pr.oxylabs.io:40000
pt-pr.oxylabs.io:10000
nl-pr.oxylabs.io:20000
be-pr.oxylabs.io:30000
ru-pr.oxylabs.io:40000
ua-pr.oxylabs.io:10000
pl-pr.oxylabs.io:20000
il-pr.oxylabs.io:20000
tr-pr.oxylabs.io:30000
au-pr.oxylabs.io:40000
my-pr.oxylabs.io:10000
th-pr.oxylabs.io:20000
kr-pr.oxylabs.io:30000
jp-pr.oxylabs.io:40000
ph-pr.oxylabs.io:10000
sg-pr.oxylabs.io:20000
cn-pr.oxylabs.io:30000
hk-pr.oxylabs.io:40000
tw-pr.oxylabs.io:10000
in-pr.oxylabs.io:20000
pk-pr.oxylabs.io:30000
ir-pr.oxylabs.io:40000
id-pr.oxylabs.io:10000
az-pr.oxylabs.io:20000
kz-pr.oxylabs.io:30000
ae-pr.oxylabs.io:40000
mx-pr.oxylabs.io:10000
br-pr.oxylabs.io:20000
ar-pr.oxylabs.io:30000
cl-pr.oxylabs.io:40000
pe-pr.oxylabs.io:10000
ec-pr.oxylabs.io:20000
co-pr.oxylabs.io:30000
za-pr.oxylabs.io:40000
eg-pr.oxylabs.io:10000
sa-pr.oxylabs.io:44000
dk-pr.oxylabs.io:19000
ao-pr.oxylabs.io:40000
cm-pr.oxylabs.io:41000
cf-pr.oxylabs.io:42000
td-pr.oxylabs.io:43000
bj-pr.oxylabs.io:44000
et-pr.oxylabs.io:45000
dj-pr.oxylabs.io:46000
gm-pr.oxylabs.io:47000
gh-pr.oxylabs.io:48000
ci-pr.oxylabs.io:49000
ke-pr.oxylabs.io:10000
lr-pr.oxylabs.io:11000
mg-pr.oxylabs.io:12000
ml-pr.oxylabs.io:13000
mr-pr.oxylabs.io:14000
mu-pr.oxylabs.io:15000
ma-pr.oxylabs.io:16000
mz-pr.oxylabs.io:17000
ng-pr.oxylabs.io:18000
sn-pr.oxylabs.io:19000
sc-pr.oxylabs.io:20000
zw-pr.oxylabs.io:21000
ss-pr.oxylabs.io:22000
sd-pr.oxylabs.io:23000
tg-pr.oxylabs.io:24000
tn-pr.oxylabs.io:25000
ug-pr.oxylabs.io:26000
zm-pr.oxylabs.io:27000
af-pr.oxylabs.io:28000
bh-pr.oxylabs.io:29000
bd-pr.oxylabs.io:30000
am-pr.oxylabs.io:31000
bt-pr.oxylabs.io:32000
mm-pr.oxylabs.io:33000
kh-pr.oxylabs.io:34000
ge-pr.oxylabs.io:36000
iq-pr.oxylabs.io:37000
jo-pr.oxylabs.io:38000
lb-pr.oxylabs.io:39000
mv-pr.oxylabs.io:40000
mn-pr.oxylabs.io:41000
om-pr.oxylabs.io:42000
qa-pr.oxylabs.io:43000
sa-pr.oxylabs.io:44000
vn-pr.oxylabs.io:45000
tm-pr.oxylabs.io:46000
uz-pr.oxylabs.io:47000
ye-pr.oxylabs.io:48000
al-pr.oxylabs.io:49000
ad-pr.oxylabs.io:10000
at-pr.oxylabs.io:11000
ba-pr.oxylabs.io:13000
bg-pr.oxylabs.io:14000
by-pr.oxylabs.io:15000
hr-pr.oxylabs.io:16000
cy-pr.oxylabs.io:35000
cz-pr.oxylabs.io:18000
dk-pr.oxylabs.io:19000
ee-pr.oxylabs.io:20000
fi-pr.oxylabs.io:21000
hu-pr.oxylabs.io:23000
is-pr.oxylabs.io:24000
ie-pr.oxylabs.io:25000
lv-pr.oxylabs.io:26000
li-pr.oxylabs.io:27000
lt-pr.oxylabs.io:28000
lu-pr.oxylabs.io:29000
mt-pr.oxylabs.io:30000
mc-pr.oxylabs.io:31000
md-pr.oxylabs.io:32000
me-pr.oxylabs.io:33000
no-pr.oxylabs.io:34000
ro-pr.oxylabs.io:35000
rs-pr.oxylabs.io:36000
sk-pr.oxylabs.io:37000
si-pr.oxylabs.io:38000
ch-pr.oxylabs.io:39000
mk-pr.oxylabs.io:40000
bs-pr.oxylabs.io:41000
bz-pr.oxylabs.io:42000
vg-pr.oxylabs.io:43000
cr-pr.oxylabs.io:44000
cu-pr.oxylabs.io:45000
dm-pr.oxylabs.io:46000
ht-pr.oxylabs.io:47000
hn-pr.oxylabs.io:48000
jm-pr.oxylabs.io:49000
aw-pr.oxylabs.io:10000
pa-pr.oxylabs.io:11000
pr-pr.oxylabs.io:12000
tt-pr.oxylabs.io:13000
fj-pr.oxylabs.io:14000
nz-pr.oxylabs.io:15000
bo-pr.oxylabs.io:16000
py-pr.oxylabs.io:17000
uy-pr.oxylabs.io:18000
ve-pr.oxylabs.io:19000
kw-pr.oxylabs.io:20000
</pre>
<hr />
<h3 id="sticky-proxy-entry-nodes">Sticky Proxy Entry Nodes</h3>
<p>Country-specific sticky proxy entry point will return the same IP with every new request while you will use the same port. IP stickiness works for up to 10 minutes. After that, the IP is replaced with a new one.</p>
<p>You do not need to pass any additional parameters, just <code>customer-username:password</code>. If you have whitelisted IPs, you do not need to pass login credentials. Country-specific ports do not support city-level results.</p>
<p>Please see the dashboard for entry point information or download a full list of sticky entry points in XLS <a class="custom_link" href="https://docs.oxylabs.io/resources/sticky-proxy-entry-points-oxylabs.xls" target="_blank" rel="nofollow noopener">here</a>.</p>
<div class="su-table su-table-responsive su-table-alternate">
<table width="678">
<tbody>
<tr>
<td style="font-weight: 400;" width="197">Random</td>
<td style="font-weight: 400;" width="223">USA</td>
<td style="font-weight: 400;" width="258">Canada</td>
</tr>
<tr>
<td style="font-weight: 400;" width="197">pr.oxylabs.io:10000 &#8211; 49999</td>
<td style="font-weight: 400;" width="223">us-pr.oxylabs.io:10001 &#8211; 19999</td>
<td style="font-weight: 400;" width="258">ca-pr.oxylabs.io:30001 &#8211; 39999</td>
</tr>
<tr>
<td style="font-weight: 400;" width="197">Great Britain</td>
<td style="font-weight: 400;" width="223">Germany</td>
<td style="font-weight: 400;" width="258">France</td>
</tr>
<tr>
<td style="font-weight: 400;" width="197">gb-pr.oxylabs.io:20001 &#8211; 29999</td>
<td style="font-weight: 400;" width="223">de-pr.oxylabs.io:30001 &#8211; 39999</td>
<td style="font-weight: 400;" width="258">fr-pr.oxylabs.io:40001 &#8211; 49999</td>
</tr>
<tr>
<td style="font-weight: 400;" width="197">Spain</td>
<td style="font-weight: 400;" width="223">Italy</td>
<td style="font-weight: 400;" width="258">Sweden</td>
</tr>
<tr>
<td style="font-weight: 400;" width="197">es-pr.oxylabs.io:10001 &#8211; 19999</td>
<td style="font-weight: 400;" width="223">it-pr.oxylabs.io:20001 &#8211; 29999</td>
<td style="font-weight: 400;" width="258">se-pr.oxylabs.io:30001 &#8211; 39999</td>
</tr>
<tr>
<td style="font-weight: 400;" width="197">Greece</td>
<td style="font-weight: 400;" width="223">Portugal</td>
<td style="font-weight: 400;" width="258">Netherlands</td>
</tr>
<tr>
<td style="font-weight: 400;" width="197">gr-pr.oxylabs.io:40001 &#8211; 49999</td>
<td style="font-weight: 400;" width="223">pt-pr.oxylabs.io:10001 &#8211; 19999</td>
<td style="font-weight: 400;" width="258">nl-pr.oxylabs.io:20001 &#8211; 29999</td>
</tr>
<tr>
<td style="font-weight: 400;" width="197">Belgium</td>
<td style="font-weight: 400;" width="223">Russia</td>
<td style="font-weight: 400;" width="258">Ukraine</td>
</tr>
<tr>
<td style="font-weight: 400;" width="197">be-pr.oxylabs.io:30001 &#8211; 39999</td>
<td style="font-weight: 400;" width="223">ru-pr.oxylabs.io:40001 &#8211; 49999</td>
<td style="font-weight: 400;" width="258">ua-pr.oxylabs.io:10001 &#8211; 19999</td>
</tr>
<tr>
<td style="font-weight: 400;" width="197">Poland</td>
<td style="font-weight: 400;" width="223">Israel</td>
<td style="font-weight: 400;" width="258">Turkey</td>
</tr>
<tr>
<td style="font-weight: 400;" width="197">pl-pr.oxylabs.io:20001 &#8211; 29999</td>
<td style="font-weight: 400;" width="223">il-pr.oxylabs.io:20001 &#8211; 29999</td>
<td style="font-weight: 400;" width="258">tr-pr.oxylabs.io:30001 &#8211; 39999</td>
</tr>
<tr>
<td style="font-weight: 400;" width="197">Australia</td>
<td style="font-weight: 400;" width="223">Malaysia</td>
<td style="font-weight: 400;" width="258">Thailand</td>
</tr>
<tr>
<td style="font-weight: 400;" width="197">au-pr.oxylabs.io:40001 &#8211; 49999</td>
<td style="font-weight: 400;" width="223">my-pr.oxylabs.io:10001 &#8211; 19999</td>
<td style="font-weight: 400;" width="258">th-pr.oxylabs.io:20001 &#8211; 29999</td>
</tr>
<tr>
<td style="font-weight: 400;" width="197">South Korea</td>
<td style="font-weight: 400;" width="223">Japan</td>
<td style="font-weight: 400;" width="258">Philippines</td>
</tr>
<tr>
<td style="font-weight: 400;" width="197">kr-pr.oxylabs.io:30001 &#8211; 39999</td>
<td style="font-weight: 400;" width="223">jp-pr.oxylabs.io:40001 &#8211; 49999</td>
<td style="font-weight: 400;" width="258">ph-pr.oxylabs.io:10001 &#8211; 19999</td>
</tr>
<tr>
<td style="font-weight: 400;" width="197">Singapore</td>
<td style="font-weight: 400;" width="223">China</td>
<td style="font-weight: 400;" width="258">Hong Kong</td>
</tr>
<tr>
<td style="font-weight: 400;" width="197">sg-pr.oxylabs.io:20001 &#8211; 29999</td>
<td style="font-weight: 400;" width="223">cn-pr.oxylabs.io:30001 &#8211; 39999</td>
<td style="font-weight: 400;" width="258">hk-pr.oxylabs.io:40001 &#8211; 49999</td>
</tr>
<tr>
<td style="font-weight: 400;" width="197">Taiwan</td>
<td style="font-weight: 400;" width="223">India</td>
<td style="font-weight: 400;" width="258">Pakistan</td>
</tr>
<tr>
<td style="font-weight: 400;" width="197">tw-pr.oxylabs.io:10001 &#8211; 19999</td>
<td style="font-weight: 400;" width="223">in-pr.oxylabs.io:20001 &#8211; 29999</td>
<td style="font-weight: 400;" width="258">pk-pr.oxylabs.io:30001 &#8211; 39999</td>
</tr>
<tr>
<td style="font-weight: 400;" width="197">Iran</td>
<td style="font-weight: 400;" width="223">Indonesia</td>
<td style="font-weight: 400;" width="258">Azerbaijan</td>
</tr>
<tr>
<td style="font-weight: 400;" width="197">ir-pr.oxylabs.io:40001 &#8211; 49999</td>
<td style="font-weight: 400;" width="223">id-pr.oxylabs.io:10001 &#8211; 19999</td>
<td style="font-weight: 400;" width="258">az-pr.oxylabs.io:20001 &#8211; 29999</td>
</tr>
<tr>
<td style="font-weight: 400;" width="197">Kazakhstan</td>
<td style="font-weight: 400;" width="223">UAE</td>
<td style="font-weight: 400;" width="258">Mexico</td>
</tr>
<tr>
<td style="font-weight: 400;" width="197">kz-pr.oxylabs.io:30001 &#8211; 39999</td>
<td style="font-weight: 400;" width="223">ae-pr.oxylabs.io:40001 &#8211; 49999</td>
<td style="font-weight: 400;" width="258">mx-pr.oxylabs.io:10001 &#8211; 19999</td>
</tr>
<tr>
<td style="font-weight: 400;" width="197">Brazil</td>
<td style="font-weight: 400;" width="223">Argentina</td>
<td style="font-weight: 400;" width="258">Chile</td>
</tr>
<tr>
<td style="font-weight: 400;" width="197">br-pr.oxylabs.io:20001 &#8211; 29999</td>
<td style="font-weight: 400;" width="223">ar-pr.oxylabs.io:30001 &#8211; 39999</td>
<td style="font-weight: 400;" width="258">cl-pr.oxylabs.io:40001 &#8211; 49999</td>
</tr>
<tr>
<td style="font-weight: 400;" width="197">Peru</td>
<td style="font-weight: 400;" width="223">Ecuador</td>
<td style="font-weight: 400;" width="258">Colombia</td>
</tr>
<tr>
<td style="font-weight: 400;" width="197">pe-pr.oxylabs.io:10001 &#8211; 19999</td>
<td style="font-weight: 400;" width="223">ec-pr.oxylabs.io:20001 &#8211; 29999</td>
<td style="font-weight: 400;" width="258">co-pr.oxylabs.io:30001 &#8211; 39999</td>
</tr>
<tr>
<td style="font-weight: 400;" width="197">South Africa</td>
<td style="font-weight: 400;" width="223">Egypt</td>
<td style="font-weight: 400;" width="258">Saudi Arabia</td>
</tr>
<tr>
<td style="font-weight: 400;" width="197">za-pr.oxylabs.io:40001 &#8211; 49999</td>
<td style="font-weight: 400;" width="223">eg-pr.oxylabs.io:10001 &#8211; 19999</td>
<td style="font-weight: 400;" width="258">sa-pr.oxylabs.io:44001 &#8211; 44999</td>
</tr>
<tr>
<td style="font-weight: 400;" width="197">Denmark</td>
<td style="font-weight: 400;" rowspan="2" width="223"></td>
<td style="font-weight: 400;" rowspan="2" width="258"></td>
</tr>
<tr>
<td style="font-weight: 400;" width="197">dk-pr.oxylabs.io:19001 &#8211; 19999</td>
</tr>
</tbody>
</table>
</div>
<p>In this example, a query to <code>ipinfo.io</code> is performed from Turkey IP, and the same IP will stay for up to 10 minutes with each request. We have chosen port 30001, however, Turkey sticky entry points cover ports from 30001 to 39999.</p>
<pre>curl -x tr-pr.oxylabs.io:30001 -U "customer-USERNAME:PASSWORD" https://ipinfo.io
</pre>
<pre>pr.oxylabs.io:10000 - 49999
us-pr.oxylabs.io:10001 - 19999
ca-pr.oxylabs.io:30001 - 39999
gb-pr.oxylabs.io:20001 - 29999
de-pr.oxylabs.io:30001 - 39999
fr-pr.oxylabs.io:40001 - 49999
es-pr.oxylabs.io:10001 - 19999
it-pr.oxylabs.io:20001 - 29999
se-pr.oxylabs.io:30001 - 39999
gr-pr.oxylabs.io:40001 - 49999
pt-pr.oxylabs.io:10001 - 19999
nl-pr.oxylabs.io:20001 - 29999
be-pr.oxylabs.io:30001 - 39999
ru-pr.oxylabs.io:40001 - 49999
ua-pr.oxylabs.io:10001 - 19999
pl-pr.oxylabs.io:20001 - 29999
il-pr.oxylabs.io:20001 - 29999
tr-pr.oxylabs.io:30001 - 39999
au-pr.oxylabs.io:40001 - 49999
my-pr.oxylabs.io:10001 - 19999
th-pr.oxylabs.io:20001 - 29999
kr-pr.oxylabs.io:30001 - 39999
jp-pr.oxylabs.io:40001 - 49999
ph-pr.oxylabs.io:10001 - 19999
sg-pr.oxylabs.io:20001 - 29999
cn-pr.oxylabs.io:30001 - 39999
hk-pr.oxylabs.io:40001 - 49999
tw-pr.oxylabs.io:10001 - 19999
in-pr.oxylabs.io:20001 - 29999
pk-pr.oxylabs.io:30001 - 39999
ir-pr.oxylabs.io:40001 - 49999
id-pr.oxylabs.io:10001 - 19999
az-pr.oxylabs.io:20001 - 29999
kz-pr.oxylabs.io:30001 - 39999
ae-pr.oxylabs.io:40001 - 49999
mx-pr.oxylabs.io:10001 - 19999
br-pr.oxylabs.io:20001 - 29999
ar-pr.oxylabs.io:30001 - 39999
cl-pr.oxylabs.io:40001 - 49999
pe-pr.oxylabs.io:10001 - 19999
ec-pr.oxylabs.io:20001 - 29999
co-pr.oxylabs.io:30001 - 39999
za-pr.oxylabs.io:40001 - 49999
eg-pr.oxylabs.io:10001 - 19999
sa-pr.oxylabs.io:44001 - 44999
dk-pr.oxylabs.io:19001 - 19999
</pre>
<hr />
<h2 id="additional-information">Additional Information</h2>
<h3 id="country-state-city-mapping">Country, State, City Mapping</h3>
<p>We use <a class="custom_link" href="https://www.maxmind.com/en/geoip2-databases" target="_blank" rel="nofollow noopener">MaxMind GeoIP2</a> database to assign our exit nodes <code>cc</code>, <code>st</code> and <code>city</code> values. This database is updated weekly.</p>
<p>Some other public IP databases may show different locations. In cases where location mismatch is crucial, we encourage to double-check if the location of the assigned proxy is the same on the IP database used by the target website.</p>
<hr />
<h3 id="response-codes">Response Codes</h3>
<p>These are the most common response codes that you can get while using our residential proxy pool. If you receive any other response code, get in touch with your dedicated account manager for more information.</p>
<div class="su-table su-table-responsive su-table-alternate">
<table>
<thead>
<tr>
<th>Response</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><code>400</code> Bad Request</td>
<td>Proxy server can return this error code if the request did not contain a host to connect to or there was a generic error when parsing HTTP request. Make sure your request is correctly formed and make sure to include URL in the request then try again.</td>
</tr>
<tr>
<td><code>407</code> Proxy Authentication Required</td>
<td>Request lacks proxy authentication information or username or password is invalid. Include Proxy-Authorization header in your request and make sure your username and password are correctly formed and then try again.</td>
</tr>
<tr>
<td><code>500</code> Internal Server Error</td>
<td>Proxy server has encountered an internal error. Retry request at a later time.</td>
</tr>
<tr>
<td><code>502</code> Bad Gateway</td>
<td>Proxy server received an invalid response from the upstream server. Retry request.</p>
<p>Response Code <code>502</code> signifies that the IP assigned to your session ID is no longer available. If you encounter this error, there are two ways to work around it. The first is to wait for one minute and the system will automatically assign a new IP address to your session ID. Another approach is to simply switch to a new session ID (i.e. change the sessid parameter) – this way you will receive a new IP address.</td>
</tr>
<tr>
<td><code>522</code> Timeout</td>
<td>Proxy server did not receive a response from the upstream server in time. Retry request.</td>
</tr>
<tr>
<td><code>525</code> No Exit Found</td>
<td>Custom HTTP status code &#8211; this means proxy was unable to find an exit node which satisfies the request. Change request filter parameters or try again at a later time.</td>
</tr>
</tbody>
</table>
</div>
<hr />
<h3 id="backconnect-entry-ips">Backconnect Entry IPs</h3>
<p>If you want to use your own backconnect entry node DNS name, you can do that by pointing your subdomain/domain to our entry node. To do that, you need to add a DNS <code>CNAME</code> record that has <code>pr.oxylabs.io</code> as the target. This is how such setup looks on Cloudflare DNS manager for <code>entry</code> subdomain:</p>
<p><img loading="lazy" decoding="async" class="aligncenter size-full wp-image-8129" src="https://www.proxysp.com/wp-content/uploads/2021/09/OxyLabs-Residential-Proxies-Backconnect-Entry-IPs.jpg" alt="OxyLabs Residential Proxies Backconnect Entry IPs" width="878" height="85" srcset="https://proxysp.com/wp-content/uploads/2021/09/OxyLabs-Residential-Proxies-Backconnect-Entry-IPs.jpg 878w, https://proxysp.com/wp-content/uploads/2021/09/OxyLabs-Residential-Proxies-Backconnect-Entry-IPs-300x29.jpg 300w, https://proxysp.com/wp-content/uploads/2021/09/OxyLabs-Residential-Proxies-Backconnect-Entry-IPs-768x74.jpg 768w" sizes="(max-width: 878px) 100vw, 878px" /></p>
<p>For more information, please contact <a class="custom_link" href="mailto:support@oxylabs.io" target="_blank" rel="nofollow noopener">support@oxylabs.io</a> or your account manager.</p>
<hr />
<h3 id="restricted-urls">Restricted URLs</h3>
<p>To avoid abuse and unclear activities, some websites are restricted on our residential proxy network. The list includes, but is not limited to websites such as all Google domains including Play, linkedin.com, sonyentertainmentnetwork.com, all Apple domains, including iTunes, netflix.com and others. For more information please contact our support staff at <a class="custom_link" href="mailto:support@oxylabs.io" target="_blank" rel="nofollow noopener">support@oxylabs.io</a>.</p>
<hr />
<h2 id="public-api">Public API</h2>
<p>To manage proxy users via Public API, please refer to this documentation in <a class="custom_link" href="https://residential-api.oxylabs.io/v1/docs#/" target="_blank" rel="nofollow noopener">OpenAPI format</a>. The API allows to create, delete, and modify proxy users, set their limits and see current usage, disable and enable them.</p>
<hr />
<h2 id="3rd-party-integrations">3rd Party Integrations</h2>
<p>Please note that you must use an HTTPS protocol when accessing <strong>China entry nodes</strong> for 3rd party tools to work correctly.</p>
<h3 id="oxylabs-proxy-manager">Oxylabs Proxy Manager</h3>
<p><a class="custom_link" href="https://chrome.google.com/webstore/detail/oxylabs-proxy-manager/infajoaodhhdogakhloedbppcbeajhoo" target="_blank" rel="nofollow noopener">Oxylabs Proxy Manager</a> is a proxy management extension for Chrome. It is not only free but also works with any proxy provider of your choice. Enable your proxy without having to jump through settings and menu options. The extension has an additional feature specifically designed to use with Oxylabs Residential Proxies, which enables to easily change Oxylabs Residential Proxy session without editing your username. Download the extension from Chrome Web Store <a class="custom_link" href="https://chrome.google.com/webstore/detail/oxylabs-proxy-manager/infajoaodhhdogakhloedbppcbeajhoo" target="_blank" rel="nofollow noopener">here</a></p>
<ul>
<li>Click the extension icon to open the application</li>
<li>If you haven't added any proxies yet, you will see <code>Add new proxy</code> button. Click it to continue.</li>
</ul>
<p><img loading="lazy" decoding="async" class="aligncenter size-full wp-image-8130" src="https://www.proxysp.com/wp-content/uploads/2021/09/OxyLabs-Residential-Proxy-Manager1.jpg" alt="OxyLabs Residential Proxy Manager1" width="426" height="422" srcset="https://proxysp.com/wp-content/uploads/2021/09/OxyLabs-Residential-Proxy-Manager1.jpg 426w, https://proxysp.com/wp-content/uploads/2021/09/OxyLabs-Residential-Proxy-Manager1-300x297.jpg 300w, https://proxysp.com/wp-content/uploads/2021/09/OxyLabs-Residential-Proxy-Manager1-150x150.jpg 150w" sizes="(max-width: 426px) 100vw, 426px" /></p>
<ul>
<li>Add proxy profile. Provide a name for the profile under <strong>Enter name</strong>. Enter <code>pr.oxylabs.io</code> as <strong>Proxy server IP</strong> and <code>7777</code> as <strong>Port</strong>. Fill in your <strong>Username</strong> and <strong>Password</strong>. Do not forget to add <code>customer-</code> before your username. Finally, click <strong>Save changes</strong>.</li>
</ul>
<p>You can also use country-specific entries. For example, if you put <code>us-pr.oxylabs.io</code> under <strong>Proxy server IP</strong> and <code>10001</code> under <strong>Port</strong>, you will receive US exit node with sticky session.</p>
<p>If you have whitelisted your IP, you can skip this step.</p>
<p><img loading="lazy" decoding="async" class="aligncenter size-full wp-image-8131" src="https://www.proxysp.com/wp-content/uploads/2021/09/OxyLabs-Residential-Proxy-Manager2.png" alt="OxyLabs Residential Proxy Manager2" width="964" height="445" srcset="https://proxysp.com/wp-content/uploads/2021/09/OxyLabs-Residential-Proxy-Manager2.png 964w, https://proxysp.com/wp-content/uploads/2021/09/OxyLabs-Residential-Proxy-Manager2-300x138.png 300w, https://proxysp.com/wp-content/uploads/2021/09/OxyLabs-Residential-Proxy-Manager2-768x355.png 768w" sizes="(max-width: 964px) 100vw, 964px" /></p>
<ul>
<li>Open the extension and click <strong>Connect</strong>. That's it, you are now using proxies.</li>
</ul>
<p><img loading="lazy" decoding="async" class="aligncenter size-full wp-image-8132" src="https://www.proxysp.com/wp-content/uploads/2021/09/OxyLabs-Residential-Proxy-Manager3.jpg" alt="OxyLabs Residential Proxy Manager3" width="420" height="366" srcset="https://proxysp.com/wp-content/uploads/2021/09/OxyLabs-Residential-Proxy-Manager3.jpg 420w, https://proxysp.com/wp-content/uploads/2021/09/OxyLabs-Residential-Proxy-Manager3-300x261.jpg 300w" sizes="(max-width: 420px) 100vw, 420px" /></p>
<ul>
<li>Chrome is notorious for caching proxy credentials, and on many proxy management extensions sticky sessions via username string does not work. If you are using sessions with main entry node (<code>pr.oxylabs.io:7777</code>), we created a special feature that allows rotating session much more easily. First, enter your username with <code>sessid</code> parameter, like this:</li>
</ul>
<p><img loading="lazy" decoding="async" class="aligncenter size-full wp-image-8133" src="https://www.proxysp.com/wp-content/uploads/2021/09/OxyLabs-Residential-Proxy-Manager4.jpg" alt="OxyLabs Residential Proxy Manager4" width="963" height="450" srcset="https://proxysp.com/wp-content/uploads/2021/09/OxyLabs-Residential-Proxy-Manager4.jpg 963w, https://proxysp.com/wp-content/uploads/2021/09/OxyLabs-Residential-Proxy-Manager4-300x140.jpg 300w, https://proxysp.com/wp-content/uploads/2021/09/OxyLabs-Residential-Proxy-Manager4-768x359.jpg 768w" sizes="(max-width: 963px) 100vw, 963px" /></p>
<ul>
<li>Then, open the extenion window. Connect to the proxy and you will see a new button &#8211; <strong>Refresh session</strong>. Click it to change session ID and get a new proxy.</li>
</ul>
<p><img loading="lazy" decoding="async" class="aligncenter size-full wp-image-8134" src="https://www.proxysp.com/wp-content/uploads/2021/09/OxyLabs-Residential-Proxy-Manager5.jpg" alt="OxyLabs Residential Proxy Manager5" width="433" height="419" srcset="https://proxysp.com/wp-content/uploads/2021/09/OxyLabs-Residential-Proxy-Manager5.jpg 433w, https://proxysp.com/wp-content/uploads/2021/09/OxyLabs-Residential-Proxy-Manager5-300x290.jpg 300w" sizes="(max-width: 433px) 100vw, 433px" /></p>
<hr />
<h3 id="switchyomega">SwitchyOmega</h3>
<p>SwitchyOmega is a powerful and reliable proxy manager that works with many popular browsers. First you need to get the plugin. For Chrome, click <a class="custom_link" href="https://chrome.google.com/webstore/detail/proxy-switchyomega/padekgcemlokbadohgkifijomclgjgif?hl=en" target="_blank" rel="nofollow noopener">here</a>, for Firefox click <a class="custom_link" href="https://addons.mozilla.org/en-US/firefox/addon/switchyomega/" target="_blank" rel="nofollow noopener">here</a>. Once you have it installed, you should:</p>
<ul>
<li>Open Switchy Omega options.</li>
</ul>
<p><img loading="lazy" decoding="async" class="aligncenter size-full wp-image-8135" src="https://www.proxysp.com/wp-content/uploads/2021/09/OxyLabs-Residential-Proxy-SwitchyOmega1.png" alt="OxyLabs Residential Proxy SwitchyOmega1" width="203" height="236" /></p>
<ul>
<li>Click <strong>New profile&#8230;</strong>.</li>
</ul>
<p><img loading="lazy" decoding="async" class="aligncenter size-full wp-image-8136" src="https://www.proxysp.com/wp-content/uploads/2021/09/OxyLabs-Residential-Proxy-SwitchyOmega2.jpg" alt="OxyLabs Residential Proxy SwitchyOmega2" width="594" height="555" srcset="https://proxysp.com/wp-content/uploads/2021/09/OxyLabs-Residential-Proxy-SwitchyOmega2.jpg 594w, https://proxysp.com/wp-content/uploads/2021/09/OxyLabs-Residential-Proxy-SwitchyOmega2-300x280.jpg 300w" sizes="(max-width: 594px) 100vw, 594px" /></p>
<ul>
<li>Give this new profile a name, choose <strong>Proxy Profile</strong> type and click <strong>Create</strong></li>
</ul>
<p><img loading="lazy" decoding="async" class="aligncenter size-full wp-image-8137" src="https://www.proxysp.com/wp-content/uploads/2021/09/OxyLabs-Residential-Proxy-SwitchyOmega3.jpg" alt="OxyLabs Residential Proxy SwitchyOmega3" width="598" height="610" srcset="https://proxysp.com/wp-content/uploads/2021/09/OxyLabs-Residential-Proxy-SwitchyOmega3.jpg 598w, https://proxysp.com/wp-content/uploads/2021/09/OxyLabs-Residential-Proxy-SwitchyOmega3-294x300.jpg 294w" sizes="(max-width: 598px) 100vw, 598px" /></p>
<ul>
<li>Change <strong>Protocol</strong> to <strong>HTTP</strong>. Under <strong>Server</strong> enter our backconnect entry node <code>pr.oxylabs.io</code>. Under <strong>Port</strong> add <code>7777</code></li>
</ul>
<p><img loading="lazy" decoding="async" class="aligncenter size-full wp-image-8138" src="https://www.proxysp.com/wp-content/uploads/2021/09/OxyLabs-Residential-Proxy-SwitchyOmega4.jpg" alt="OxyLabs Residential Proxy SwitchyOmega4" width="854" height="195" srcset="https://proxysp.com/wp-content/uploads/2021/09/OxyLabs-Residential-Proxy-SwitchyOmega4.jpg 854w, https://proxysp.com/wp-content/uploads/2021/09/OxyLabs-Residential-Proxy-SwitchyOmega4-300x69.jpg 300w, https://proxysp.com/wp-content/uploads/2021/09/OxyLabs-Residential-Proxy-SwitchyOmega4-768x175.jpg 768w" sizes="(max-width: 854px) 100vw, 854px" /></p>
<ul>
<li>You can also use country-specific entries. For example, if you put <code>us-pr.oxylabs.io</code> under <strong>Server</strong> and <code>10001</code> under <strong>Port</strong>, you will receive US exit node with sticky session.</li>
<li>Next, click the lock button on the right. Fill in your <strong>Username</strong> and <strong>Password</strong>. Do not forget to add <code>customer-</code> before your given username. Finally, click <strong>Save changes</strong>.</li>
</ul>
<p>If you have whitelisted your IP, please skip this step.</p>
<p><img loading="lazy" decoding="async" class="aligncenter size-full wp-image-8139" src="https://www.proxysp.com/wp-content/uploads/2021/09/OxyLabs-Residential-Proxy-SwitchyOmega5.jpg" alt="OxyLabs Residential Proxy SwitchyOmega5" width="599" height="266" srcset="https://proxysp.com/wp-content/uploads/2021/09/OxyLabs-Residential-Proxy-SwitchyOmega5.jpg 599w, https://proxysp.com/wp-content/uploads/2021/09/OxyLabs-Residential-Proxy-SwitchyOmega5-300x133.jpg 300w" sizes="(max-width: 599px) 100vw, 599px" /></p>
<ul>
<li>Click <strong>Apply changes</strong></li>
</ul>
<p><img loading="lazy" decoding="async" class="aligncenter size-full wp-image-8140" src="https://www.proxysp.com/wp-content/uploads/2021/09/OxyLabs-Residential-Proxy-SwitchyOmega6.jpg" alt="OxyLabs Residential Proxy SwitchyOmega6" width="380" height="383" srcset="https://proxysp.com/wp-content/uploads/2021/09/OxyLabs-Residential-Proxy-SwitchyOmega6.jpg 380w, https://proxysp.com/wp-content/uploads/2021/09/OxyLabs-Residential-Proxy-SwitchyOmega6-298x300.jpg 298w, https://proxysp.com/wp-content/uploads/2021/09/OxyLabs-Residential-Proxy-SwitchyOmega6-150x150.jpg 150w" sizes="(max-width: 380px) 100vw, 380px" /></p>
<ul>
<li>For the final step, click on SwitchyOmega icon and choose your newly configured proxy. You are now ready to go!</li>
</ul>
<p><img loading="lazy" decoding="async" class="aligncenter size-full wp-image-8141" src="https://www.proxysp.com/wp-content/uploads/2021/09/OxyLabs-Residential-Proxy-SwitchyOmega7.jpg" alt="OxyLabs Residential Proxy SwitchyOmega7" width="209" height="256" /></p>
<hr />
<h3 id="shadowrocket">Shadowrocket</h3>
<p>If you want to use our Residential Proxies with Shadowrocket, you can easily do that by following the instructions below.</p>
<ul>
<li>Open Shadowrocket app.</li>
<li>Click <strong>Add Server</strong>.</li>
</ul>
<p><img loading="lazy" decoding="async" class="aligncenter size-full wp-image-8143" src="https://www.proxysp.com/wp-content/uploads/2021/09/OxyLabs-Residential-Proxy-Shadowrocket1.png" alt="OxyLabs Residential Proxy Shadowrocket1" width="296" height="341" srcset="https://proxysp.com/wp-content/uploads/2021/09/OxyLabs-Residential-Proxy-Shadowrocket1.png 296w, https://proxysp.com/wp-content/uploads/2021/09/OxyLabs-Residential-Proxy-Shadowrocket1-260x300.png 260w" sizes="(max-width: 296px) 100vw, 296px" /></p>
<ul>
<li>In the following window click on <strong>Type</strong>.</li>
</ul>
<p><img loading="lazy" decoding="async" class="aligncenter size-full wp-image-8144" src="https://www.proxysp.com/wp-content/uploads/2021/09/OxyLabs-Residential-Proxy-Shadowrocket2.png" alt="OxyLabs Residential Proxy Shadowrocket2" width="297" height="415" srcset="https://proxysp.com/wp-content/uploads/2021/09/OxyLabs-Residential-Proxy-Shadowrocket2.png 297w, https://proxysp.com/wp-content/uploads/2021/09/OxyLabs-Residential-Proxy-Shadowrocket2-215x300.png 215w" sizes="(max-width: 297px) 100vw, 297px" /></p>
<ul>
<li>Choose <strong>HTTP</strong> and go back to the previous screen.</li>
</ul>
<p><img loading="lazy" decoding="async" class="aligncenter size-full wp-image-8145" src="https://www.proxysp.com/wp-content/uploads/2021/09/OxyLabs-Residential-Proxy-Shadowrocket3.png" alt="OxyLabs Residential Proxy Shadowrocket3" width="292" height="440" srcset="https://proxysp.com/wp-content/uploads/2021/09/OxyLabs-Residential-Proxy-Shadowrocket3.png 292w, https://proxysp.com/wp-content/uploads/2021/09/OxyLabs-Residential-Proxy-Shadowrocket3-199x300.png 199w" sizes="(max-width: 292px) 100vw, 292px" /></p>
<ul>
<li>Enter proxy and authentication information. Under <strong>Host</strong> type in <code>pr.oxylabs.io</code>. <strong>Port</strong> is <code>7777</code> to use our backconnect entry. Do not forget your crendentials under <strong>User</strong> and <strong>Password</strong>. Do not forget to add <code>customer-</code> before your given username. Once you are done, go back to the previous screen by pressing Back arrow.</li>
</ul>
<p>You can also use country-specific entries. For example, if you put <code>us-pr.oxylabs.io</code> under <strong>Host</strong> and <code>10001</code> under <strong>Port</strong>, you will receive US exit node with a sticky session.</p>
<p><img loading="lazy" decoding="async" class="aligncenter size-full wp-image-8146" src="https://www.proxysp.com/wp-content/uploads/2021/09/OxyLabs-Residential-Proxy-Shadowrocket4.png" alt="OxyLabs Residential Proxy Shadowrocket4" width="297" height="448" srcset="https://proxysp.com/wp-content/uploads/2021/09/OxyLabs-Residential-Proxy-Shadowrocket4.png 297w, https://proxysp.com/wp-content/uploads/2021/09/OxyLabs-Residential-Proxy-Shadowrocket4-199x300.png 199w" sizes="(max-width: 297px) 100vw, 297px" /></p>
<ul>
<li>You need to turn proxy on. Do that by activating a toggle under <strong>Not Connected</strong></li>
</ul>
<p><img loading="lazy" decoding="async" class="aligncenter size-full wp-image-8147" src="https://www.proxysp.com/wp-content/uploads/2021/09/OxyLabs-Residential-Proxy-Shadowrocket5.png" alt="OxyLabs Residential Proxy Shadowrocket5" width="301" height="344" srcset="https://proxysp.com/wp-content/uploads/2021/09/OxyLabs-Residential-Proxy-Shadowrocket5.png 301w, https://proxysp.com/wp-content/uploads/2021/09/OxyLabs-Residential-Proxy-Shadowrocket5-263x300.png 263w" sizes="(max-width: 301px) 100vw, 301px" /></p>
<ul>
<li>If that is your first time using Shadowrocket, you will get an iOS prompt to add Shadowrocket to VPN configurations. Click <strong>Add</strong>. You will need to enter your iPhone passcode to confirm.</li>
</ul>
<p><img loading="lazy" decoding="async" class="aligncenter size-full wp-image-8148" src="https://www.proxysp.com/wp-content/uploads/2021/09/OxyLabs-Residential-Proxy-Shadowrocket6.png" alt="OxyLabs Residential Proxy Shadowrocket6" width="296" height="413" srcset="https://proxysp.com/wp-content/uploads/2021/09/OxyLabs-Residential-Proxy-Shadowrocket6.png 296w, https://proxysp.com/wp-content/uploads/2021/09/OxyLabs-Residential-Proxy-Shadowrocket6-215x300.png 215w" sizes="(max-width: 296px) 100vw, 296px" /></p>
<ul>
<li>That is it. A toggle at the top of the app should now be activated.</li>
</ul>
<p><img loading="lazy" decoding="async" class="aligncenter size-full wp-image-8149" src="https://www.proxysp.com/wp-content/uploads/2021/09/OxyLabs-Residential-Proxy-Shadowrocket7.png" alt="OxyLabs Residential Proxy Shadowrocket7" width="298" height="324" srcset="https://proxysp.com/wp-content/uploads/2021/09/OxyLabs-Residential-Proxy-Shadowrocket7.png 298w, https://proxysp.com/wp-content/uploads/2021/09/OxyLabs-Residential-Proxy-Shadowrocket7-276x300.png 276w" sizes="(max-width: 298px) 100vw, 298px" /></p>
<ul>
<li>You can test if the proxy is working by visiting <strong>icanhazip.com</strong>.</li>
</ul>
<p><img loading="lazy" decoding="async" class="aligncenter size-full wp-image-8150" src="https://www.proxysp.com/wp-content/uploads/2021/09/OxyLabs-Residential-Proxy-Shadowrocket8.png" alt="OxyLabs Residential Proxy Shadowrocket8" width="298" height="311" srcset="https://proxysp.com/wp-content/uploads/2021/09/OxyLabs-Residential-Proxy-Shadowrocket8.png 298w, https://proxysp.com/wp-content/uploads/2021/09/OxyLabs-Residential-Proxy-Shadowrocket8-287x300.png 287w" sizes="(max-width: 298px) 100vw, 298px" /></p>
<hr />
<h3 id="proxifier">Proxifier</h3>
<p>If you want to use our Residential Proxies with Proxfier, you can easily do that by following the instructions below.</p>
<ul>
<li>Open Proxifier app.</li>
<li>Add proxies. Click on <strong>Proxies (1)</strong>. Click <strong>Add(2)</strong>.</li>
</ul>
<p><img loading="lazy" decoding="async" class="aligncenter size-full wp-image-8151" src="https://www.proxysp.com/wp-content/uploads/2021/09/OxyLabs-Residential-Proxy-Proxifier1.png" alt="OxyLabs Residential Proxy Proxifier1" width="596" height="500" srcset="https://proxysp.com/wp-content/uploads/2021/09/OxyLabs-Residential-Proxy-Proxifier1.png 596w, https://proxysp.com/wp-content/uploads/2021/09/OxyLabs-Residential-Proxy-Proxifier1-300x252.png 300w" sizes="(max-width: 596px) 100vw, 596px" /></p>
<ul>
<li>In the following window enter required information. <strong>Address(1)</strong>, which is <code>pr.oxylabs.io</code>, <strong>Port(2)</strong> which is <code>7777</code>, select <strong>HTTPS(3)</strong> protocol. In authentication box click <strong>Enable(4)</strong> and enter provided <strong>Username(5)</strong> and <strong>Password(6)</strong>. Do not forget to add <code>customer-</code> at the beginning of the username. If you have whitelisted your devices, do not click on <strong>Enable</strong>, your authenticiation will be done without username/password. If you wish, you can enable <strong>Appear as Web Browser</strong> option. Click <strong>OK</strong>.</li>
<li>You can also use country-specific entries. For example, if you put <strong>us-pr.oxylabs.io</strong> under <strong>Address(1)* and **10001</strong> under <strong>Port(2)</strong>, you will receive US exit node with sticky session.</li>
</ul>
<p><img loading="lazy" decoding="async" class="aligncenter size-full wp-image-8152" src="https://www.proxysp.com/wp-content/uploads/2021/09/OxyLabs-Residential-Proxy-Proxifier2.jpg" alt="OxyLabs Residential Proxy Proxifier2" width="479" height="499" srcset="https://proxysp.com/wp-content/uploads/2021/09/OxyLabs-Residential-Proxy-Proxifier2.jpg 479w, https://proxysp.com/wp-content/uploads/2021/09/OxyLabs-Residential-Proxy-Proxifier2-288x300.jpg 288w" sizes="(max-width: 479px) 100vw, 479px" /></p>
<ul>
<li>You will be prompted with a window asking <strong>if you want Proxifier to use this proxy by default</strong>? This means that this setup will be user for all of your browsers. It is up to you to decide. If you select <strong>Yes</strong>, you are done setting up. If you wish to use proxies on a particular browser, follow the next steps.</li>
<li>Click on <strong>Rules(1)</strong> and then click <strong>Add&#8230;(2)</strong>.</li>
</ul>
<p><img loading="lazy" decoding="async" class="aligncenter size-full wp-image-8153" src="https://www.proxysp.com/wp-content/uploads/2021/09/OxyLabs-Residential-Proxy-Proxifier3.jpg" alt="OxyLabs Residential Proxy Proxifier3" width="851" height="464" srcset="https://proxysp.com/wp-content/uploads/2021/09/OxyLabs-Residential-Proxy-Proxifier3.jpg 851w, https://proxysp.com/wp-content/uploads/2021/09/OxyLabs-Residential-Proxy-Proxifier3-300x164.jpg 300w, https://proxysp.com/wp-content/uploads/2021/09/OxyLabs-Residential-Proxy-Proxifier3-768x419.jpg 768w" sizes="(max-width: 851px) 100vw, 851px" /></p>
<ul>
<li>Click <strong>+(1)</strong> button to add applications that you want to use proxy settings. Select the browser with which you want to use these proxy settings and click on it. Finally, you have to change <strong>Action(2)</strong>. Click on it and select your created proxy.</li>
</ul>
<p><img loading="lazy" decoding="async" class="aligncenter size-full wp-image-8154" src="https://www.proxysp.com/wp-content/uploads/2021/09/OxyLabs-Residential-Proxy-Proxifier4.png" alt="OxyLabs Residential Proxy Proxifier4" width="538" height="546" srcset="https://proxysp.com/wp-content/uploads/2021/09/OxyLabs-Residential-Proxy-Proxifier4.png 538w, https://proxysp.com/wp-content/uploads/2021/09/OxyLabs-Residential-Proxy-Proxifier4-296x300.png 296w" sizes="(max-width: 538px) 100vw, 538px" /></p>
<ul>
<li>This is it, all of your requests, while using browser which you defined in your rules of Proxifier, will be done from proxies.</li>
</ul>
<hr />
<h3 id="multilogin">Multilogin</h3>
<p>Our proxies also work with Multilogin app. Setting up is easy, just follow the instructions below.</p>
<ul>
<li>Open <strong>Multilogin</strong> app.</li>
<li>Add proxies. Click on <strong>Create new</strong> under Browser profile.</li>
<li>In the following window enter <strong>Browser profile name</strong> (for example <strong>Oxylabs</strong>). Next, click <strong>Edit proxy settings</strong>.</li>
<li>Choose <strong>HTTP proxy</strong> as <strong>Connection type</strong>. Now fill in the required details: under <strong>New address</strong> and <strong>Port</strong> insert <code>pr.oxylabs.io</code> and <code>7777</code>. Under <strong>Login</strong> enter your username, and <strong>Password</strong>. Do not forget to add <code>customer-</code> at the beginning of the username. If you have whitelisted your devices, you do not need to provide the login credentials.</li>
<li>You can also use country-specific entries. For example, if you put <strong>us-pr.oxylabs.io</strong> under <strong>New address</strong> and <strong>10001</strong> under <strong>Port</strong>, you will receive US exit node with a sticky session.</li>
<li>Click <strong>Check proxy</strong>. If everything is fine, you should get a response indicating <strong>External IP</strong>.</li>
<li>Confirm changes by clicking <strong>Create profile</strong>.</li>
<li>This is it, you are good to go.</li>
</ul>
<hr />
<h3 id="postern">Postern</h3>
<p>Postern is a very popular proxy/VPN management application on Android. You can get it on <a class="custom_link" href="https://play.google.com/store/apps/details?id=com.tunnelworkshop.postern&hl=en" target="_blank" rel="nofollow noopener">Google Play Store</a>. Here is a step-by-step guide how to configure our Residential Proxies on Postern:</p>
<ul>
<li>Open the app.</li>
<li>Click <strong>Add Proxy</strong>.</li>
</ul>
<p><img loading="lazy" decoding="async" class="aligncenter size-full wp-image-8156" src="https://www.proxysp.com/wp-content/uploads/2021/09/OxyLabs-Residential-Proxy-Postern1.png" alt="OxyLabs Residential Proxy Postern1" width="348" height="350" srcset="https://proxysp.com/wp-content/uploads/2021/09/OxyLabs-Residential-Proxy-Postern1.png 348w, https://proxysp.com/wp-content/uploads/2021/09/OxyLabs-Residential-Proxy-Postern1-298x300.png 298w, https://proxysp.com/wp-content/uploads/2021/09/OxyLabs-Residential-Proxy-Postern1-150x150.png 150w" sizes="(max-width: 348px) 100vw, 348px" /></p>
<ul>
<li>In the following window enter required proxy information. <strong>Server Name</strong> is <strong>Oxylabs</strong>, <strong>Server Address</strong> is <strong>pr.oxylabs.io</strong>. Under <strong>Server Port</strong> enter <strong>7777</strong>. Click <strong>Server Type</strong> and choose <strong>HTTPS/HTTP CONNECT</strong>. Next, enter your login credentials under <strong>Username</strong> and <strong>Password</strong>. For this to work, you must type <strong>customer-</strong> before you type in your username, e.g., <strong>customer-username</strong>.Finally, click <strong>Save</strong>.</li>
</ul>
<p>You can also use country-specific entries. For example, if you put <strong>us-pr.oxylabs.io</strong> under <strong>Server Address</strong> and <strong>10001</strong> under <strong>Server Port</strong>, you will receive the US exit node with sticky session.</p>
<p><img loading="lazy" decoding="async" class="aligncenter size-full wp-image-8157" src="https://www.proxysp.com/wp-content/uploads/2021/09/OxyLabs-Residential-Proxy-Postern2.png" alt="OxyLabs Residential Proxy Postern2" width="351" height="611" srcset="https://proxysp.com/wp-content/uploads/2021/09/OxyLabs-Residential-Proxy-Postern2.png 351w, https://proxysp.com/wp-content/uploads/2021/09/OxyLabs-Residential-Proxy-Postern2-172x300.png 172w" sizes="(max-width: 351px) 100vw, 351px" /></p>
<ul>
<li>Now, open the app menu and go to <strong>Rules</strong>.</li>
</ul>
<p><img loading="lazy" decoding="async" class="aligncenter size-full wp-image-8158" src="https://www.proxysp.com/wp-content/uploads/2021/09/OxyLabs-Residential-Proxy-Postern3.png" alt="OxyLabs Residential Proxy Postern3" width="348" height="496" srcset="https://proxysp.com/wp-content/uploads/2021/09/OxyLabs-Residential-Proxy-Postern3.png 348w, https://proxysp.com/wp-content/uploads/2021/09/OxyLabs-Residential-Proxy-Postern3-210x300.png 210w" sizes="(max-width: 348px) 100vw, 348px" /></p>
<ul>
<li>Click <strong>Add Rule</strong></li>
</ul>
<p><img loading="lazy" decoding="async" class="aligncenter size-full wp-image-8159" src="https://www.proxysp.com/wp-content/uploads/2021/09/OxyLabs-Residential-Proxy-Postern4.png" alt="OxyLabs Residential Proxy Postern4" width="346" height="405" srcset="https://proxysp.com/wp-content/uploads/2021/09/OxyLabs-Residential-Proxy-Postern4.png 346w, https://proxysp.com/wp-content/uploads/2021/09/OxyLabs-Residential-Proxy-Postern4-256x300.png 256w" sizes="(max-width: 346px) 100vw, 346px" /></p>
<ul>
<li>Under <strong>Match Method</strong> select <strong>Match All</strong>. Choose <strong>Proxy/Tunnel</strong> as the <strong>Rule</strong>. <strong>Proxy/Proxy Group</strong> should automatically fill up with <strong>Oxylabs &#8211; pr.oxylabs.io:7777&#8243;</strong>. Click <strong>Save</strong>.</li>
</ul>
<p><img loading="lazy" decoding="async" class="aligncenter size-full wp-image-8160" src="https://www.proxysp.com/wp-content/uploads/2021/09/OxyLabs-Residential-Proxy-Postern5.png" alt="OxyLabs Residential Proxy Postern5" width="348" height="457" srcset="https://proxysp.com/wp-content/uploads/2021/09/OxyLabs-Residential-Proxy-Postern5.png 348w, https://proxysp.com/wp-content/uploads/2021/09/OxyLabs-Residential-Proxy-Postern5-228x300.png 228w" sizes="(max-width: 348px) 100vw, 348px" /></p>
<ul>
<li>Now you need to turn on the VPN. Open the app menu and click on <strong>VPN Off</strong> to activate the connection. That is it, you are now using proxies.</li>
</ul>
<p><img loading="lazy" decoding="async" class="aligncenter size-full wp-image-8161" src="https://www.proxysp.com/wp-content/uploads/2021/09/OxyLabs-Residential-Proxy-Postern6.png" alt="OxyLabs Residential Proxy Postern6" width="346" height="499" srcset="https://proxysp.com/wp-content/uploads/2021/09/OxyLabs-Residential-Proxy-Postern6.png 346w, https://proxysp.com/wp-content/uploads/2021/09/OxyLabs-Residential-Proxy-Postern6-208x300.png 208w" sizes="(max-width: 346px) 100vw, 346px" /></p>
<h4></h4>
<hr />
<h3 id="gologin">GoLogin</h3>
<p>GoLogin is a multi-login browser management application for Windows, Linux and Mac OS. Get it on its official website <a class="custom_link" href="https://gologin.app/" target="_blank" rel="nofollow noopener">here</a>. Here is a step-by-step guide how to configure our Residential Proxies on GoLogin for Windows:</p>
<ul>
<li>Open the app.</li>
<li>Click <strong>Create Your First Profile</strong>.</li>
</ul>
<p><img loading="lazy" decoding="async" class="aligncenter size-full wp-image-8164" src="https://www.proxysp.com/wp-content/uploads/2021/09/OxyLabs-Residential-Proxy-GoLogin1.png" alt="OxyLabs Residential Proxy GoLogin1" width="915" height="275" srcset="https://proxysp.com/wp-content/uploads/2021/09/OxyLabs-Residential-Proxy-GoLogin1.png 915w, https://proxysp.com/wp-content/uploads/2021/09/OxyLabs-Residential-Proxy-GoLogin1-300x90.png 300w, https://proxysp.com/wp-content/uploads/2021/09/OxyLabs-Residential-Proxy-GoLogin1-768x231.png 768w" sizes="(max-width: 915px) 100vw, 915px" /></p>
<ul>
<li>In the following window enter the required proxy information. Under <strong>Profile Name</strong> write <strong>Oxylabs</strong>. Next, choose <strong>Connection Type</strong> as <strong>HTTP Proxy</strong>. Under <strong>Proxy Host and Port</strong> enter <strong>pr.oxylabs.io</strong> and <strong>7777</strong>. Next, enter your login credentials under <strong>Username</strong> and <strong>Password</strong>. Finally, click <strong>Create Profile</strong>.</li>
</ul>
<p>You can also use country-specific entries. For example, if you put <strong>us-pr.oxylabs.io</strong> and <strong>10001</strong> under <strong>Proxy Host and Port</strong>, you will receive the US exit node with a sticky session. To fully utilize all available Residential Proxies features such as <a href="#session-control">sessions</a> and <a href="#select-country">country</a>, <a href="#select-state">state</a>, <a href="#select-city">city</a> geolocation parameters, please reffer to the corresponding sections in the documentation.</p>
<p><img loading="lazy" decoding="async" class="aligncenter size-full wp-image-8165" src="https://www.proxysp.com/wp-content/uploads/2021/09/OxyLabs-Residential-Proxy-GoLogin2.png" alt="OxyLabs Residential Proxy GoLogin2" width="574" height="500" srcset="https://proxysp.com/wp-content/uploads/2021/09/OxyLabs-Residential-Proxy-GoLogin2.png 574w, https://proxysp.com/wp-content/uploads/2021/09/OxyLabs-Residential-Proxy-GoLogin2-300x261.png 300w" sizes="(max-width: 574px) 100vw, 574px" /></p>
<ul>
<li>All set, now simply click <strong>Run</strong> and wait for the browser to load.</li>
</ul>
<p><img loading="lazy" decoding="async" class="aligncenter size-full wp-image-8166" src="https://www.proxysp.com/wp-content/uploads/2021/09/OxyLabs-Residential-Proxy-GoLogin3.png" alt="OxyLabs Residential Proxy GoLogin3" width="915" height="344" srcset="https://proxysp.com/wp-content/uploads/2021/09/OxyLabs-Residential-Proxy-GoLogin3.png 915w, https://proxysp.com/wp-content/uploads/2021/09/OxyLabs-Residential-Proxy-GoLogin3-300x113.png 300w, https://proxysp.com/wp-content/uploads/2021/09/OxyLabs-Residential-Proxy-GoLogin3-768x289.png 768w" sizes="(max-width: 915px) 100vw, 915px" /></p>
<ul>
<li style="list-style-type: none;">
<ul>
<li>If everything is fine, a website http://myip.gologin.app will open and show the IP information.</li>
</ul>
</li>
</ul>
<p><img loading="lazy" decoding="async" class="aligncenter size-full wp-image-8167" src="https://www.proxysp.com/wp-content/uploads/2021/09/OxyLabs-Residential-Proxy-GoLogin4.png" alt="OxyLabs Residential Proxy GoLogin4" width="692" height="500" srcset="https://proxysp.com/wp-content/uploads/2021/09/OxyLabs-Residential-Proxy-GoLogin4.png 692w, https://proxysp.com/wp-content/uploads/2021/09/OxyLabs-Residential-Proxy-GoLogin4-300x217.png 300w" sizes="(max-width: 692px) 100vw, 692px" /></p>
<hr />
<h3 id="kameleo">Kameleo</h3>
<p>Kameleo is a multi-login browser management application for Windows and Android. Get it on its official website <a class="custom_link" href="https://kameleo.io/downloads/" target="_blank" rel="nofollow noopener">here</a>. Here is a step-by-step guide how to configure our Residential Proxies on Kameleo for Windows:</p>
<ul>
<li>Open the app.</li>
<li>Click <strong>APPLICATION SETTINGS</strong>.</li>
</ul>
<p><img loading="lazy" decoding="async" class="aligncenter size-full wp-image-8168" src="https://www.proxysp.com/wp-content/uploads/2021/09/OxyLabs-Residential-Proxy-Kameleo1.png" alt="OxyLabs Residential Proxy Kameleo1" width="605" height="400" srcset="https://proxysp.com/wp-content/uploads/2021/09/OxyLabs-Residential-Proxy-Kameleo1.png 605w, https://proxysp.com/wp-content/uploads/2021/09/OxyLabs-Residential-Proxy-Kameleo1-300x198.png 300w" sizes="(max-width: 605px) 100vw, 605px" /></p>
<ul>
<li>In the following window enter the required proxy information under <strong>Global proxy settings</strong>. For <strong>Upstream Proxy Type</strong> choose <strong>Http</strong>. Next, fill in <strong>Proxy IP or hostname</strong> with <strong>pr.oxylabs.io</strong>. Under <strong>Proxy Port</strong> enter <strong>7777</strong>. Finally, enter your login credentials under <strong>Username</strong> and <strong>Password</strong>. Close the window to save settings.</li>
</ul>
<p>You can also use country-specific entries. For example, if you put <strong>us-pr.oxylabs.io</strong> under <strong>Proxy IP or hostname</strong> and <strong>10001</strong> under <strong>Proxy Port</strong>, you will receive the US exit node with a sticky session.</p>
<p><img loading="lazy" decoding="async" class="aligncenter size-full wp-image-8169" src="https://www.proxysp.com/wp-content/uploads/2021/09/OxyLabs-Residential-Proxy-Kameleo2.png" alt="OxyLabs Residential Proxy Kameleo2" width="606" height="339" srcset="https://proxysp.com/wp-content/uploads/2021/09/OxyLabs-Residential-Proxy-Kameleo2.png 606w, https://proxysp.com/wp-content/uploads/2021/09/OxyLabs-Residential-Proxy-Kameleo2-300x168.png 300w" sizes="(max-width: 606px) 100vw, 606px" /></p>
<ul>
<li>That is it, you are ready to go. Either create a <strong>NEW PROFILE</strong> or click <strong>QUICK PROFILE</strong> to launch the browser which now has proxy enabled.</li>
</ul>
<hr />
<h3 id="clonbrowser">ClonBrowser</h3>
<p>ClonBrowser is another multi-login browser management application for Windows and Mac. Get it on its official website <a class="custom_link" href="https://www.clonbrowser.com/download" target="_blank" rel="nofollow noopener">here</a>. Here is a step-by-step guide how to configure our Residential Proxies on ClonBrowser for Windows:</p>
<ul>
<li>Open the app.</li>
<li>Click <strong>Create a New browser profile</strong>.</li>
</ul>
<p><img loading="lazy" decoding="async" class="aligncenter size-full wp-image-8170" src="https://www.proxysp.com/wp-content/uploads/2021/09/OxyLabs-Residential-Proxy-ClonBrowser1.jpg" alt="OxyLabs Residential Proxy ClonBrowser1" width="783" height="500" srcset="https://proxysp.com/wp-content/uploads/2021/09/OxyLabs-Residential-Proxy-ClonBrowser1.jpg 783w, https://proxysp.com/wp-content/uploads/2021/09/OxyLabs-Residential-Proxy-ClonBrowser1-300x192.jpg 300w, https://proxysp.com/wp-content/uploads/2021/09/OxyLabs-Residential-Proxy-ClonBrowser1-768x490.jpg 768w" sizes="(max-width: 783px) 100vw, 783px" /></p>
<ul>
<li>Click <strong>Setting</strong> next to <strong>Proxy settings</strong>.</li>
</ul>
<p><img loading="lazy" decoding="async" class="aligncenter size-full wp-image-8171" src="https://www.proxysp.com/wp-content/uploads/2021/09/OxyLabs-Residential-Proxy-ClonBrowser2.png" alt="OxyLabs Residential Proxy ClonBrowser2" width="715" height="500" srcset="https://proxysp.com/wp-content/uploads/2021/09/OxyLabs-Residential-Proxy-ClonBrowser2.png 715w, https://proxysp.com/wp-content/uploads/2021/09/OxyLabs-Residential-Proxy-ClonBrowser2-300x210.png 300w" sizes="(max-width: 715px) 100vw, 715px" /></p>
<ul>
<li>In the following window choose <strong>Http</strong> as the <strong>Connection type</strong>. Under <strong>IP or host</strong> enter <strong>pr.oxylabs.io</strong>. Fill in <strong>7777</strong> for <strong>Port</strong>. Finally, enter your login credentials under <strong>Username</strong> in <strong>customer-username</strong> format and <strong>Password</strong>.</li>
</ul>
<p>You can also use country-specific entries. For example, if you put <strong>us-pr.oxylabs.io</strong> under <strong>Proxy IP or hostname</strong> and <strong>10001</strong> under <strong>Proxy Port</strong>, you will receive the US exit node with a sticky session.</p>
<p>You can check if the proxy works by clicking <strong>Connection test</strong>. If everything is fine, click <strong>Create profile</strong>.</p>
<ul>
<li>That is all, you can now launch the browser by clicking <strong>Start</strong> under <strong>Option</strong>.</li>
</ul>
<p><img loading="lazy" decoding="async" class="aligncenter wp-image-8172" src="https://www.proxysp.com/wp-content/uploads/2021/09/OxyLabs-Residential-Proxy-ClonBrowser3.png" alt="OxyLabs Residential Proxy ClonBrowser3" width="858" height="236" srcset="https://proxysp.com/wp-content/uploads/2021/09/OxyLabs-Residential-Proxy-ClonBrowser3.png 956w, https://proxysp.com/wp-content/uploads/2021/09/OxyLabs-Residential-Proxy-ClonBrowser3-300x83.png 300w, https://proxysp.com/wp-content/uploads/2021/09/OxyLabs-Residential-Proxy-ClonBrowser3-768x211.png 768w" sizes="(max-width: 858px) 100vw, 858px" /></p>
<hr />
<h3 id="adspower">AdsPower</h3>
<p>AdsPower is a multi-login browser management application for Windows and Mac. You get it on its official website <a class="custom_link" href="https://www.adspower.net/?code=fmtc1m&source=oxylabs" target="_blank" rel="nofollow noopener">here</a>. Here is the step-by-step guide how to configure our Residential Proxies on AdsPower for Windows:</p>
<ul>
<li>Open the app.</li>
<li>Click <strong>Upload.</strong>.</li>
</ul>
<p><img loading="lazy" decoding="async" class="aligncenter size-full wp-image-8173" src="https://www.proxysp.com/wp-content/uploads/2021/09/OxyLabs-Residential-Proxy-AdsPower1.png" alt="OxyLabs Residential Proxy AdsPower1" width="258" height="191" /></p>
<ul>
<li>Under <strong>Proxy Type</strong> choose <strong>http</strong>. Now fill in the form bellow. Enter <strong>pr.oxylabs.io</strong> for <strong>Proxy Host</strong> and <strong>7777</strong> for <strong>Proxy Port</strong>. Enter your login credentials <strong>customer-username</strong> under <strong>Proxy User</strong> and your <strong>password</strong> for <strong>Password</strong>.</li>
</ul>
<p>You can also use country specific entries. For example, if you put <strong>us-pr.oxylabs.io</strong> under <strong>Proxy Host</strong> and <strong>10001</strong> under *<em>Proxy Port</em>, you will receive US exit node with sticky session.</p>
<p>You can check if the proxy works by clicking <strong>Check Proxy</strong>. If everything is fine, click <strong>Create profile</strong>.</p>
<p><img loading="lazy" decoding="async" class="aligncenter size-full wp-image-8174" src="https://www.proxysp.com/wp-content/uploads/2021/09/OxyLabs-Residential-Proxy-AdsPower2.png" alt="OxyLabs Residential Proxy AdsPower2" width="689" height="393" srcset="https://proxysp.com/wp-content/uploads/2021/09/OxyLabs-Residential-Proxy-AdsPower2.png 689w, https://proxysp.com/wp-content/uploads/2021/09/OxyLabs-Residential-Proxy-AdsPower2-300x171.png 300w" sizes="(max-width: 689px) 100vw, 689px" /></p>
<ul>
<li>That's all, you can now launch the browser by clicking <strong>Open</strong> under <strong>Account Management</strong>.</li>
</ul>
<p><img loading="lazy" decoding="async" class="aligncenter size-full wp-image-8175" src="https://www.proxysp.com/wp-content/uploads/2021/09/OxyLabs-Residential-Proxy-AdsPower3.png" alt="OxyLabs Residential Proxy AdsPower3" width="564" height="250" srcset="https://proxysp.com/wp-content/uploads/2021/09/OxyLabs-Residential-Proxy-AdsPower3.png 564w, https://proxysp.com/wp-content/uploads/2021/09/OxyLabs-Residential-Proxy-AdsPower3-300x133.png 300w" sizes="(max-width: 564px) 100vw, 564px" /></p>
<hr />
<h3 id="vmlogin">VMLogin</h3>
<p>Virtual Multi Login, or VMLogin, is a tool for creating virtual browser profiles that help control browser fingerprinting, setup business workflows, and develop web automation, among other things. To use VMLogin with Oxylabs Residential Proxies, download the latest version of VMLogin <a class="custom_link" href="https://vmlogin.us/download.html" target="_blank" rel="nofollow noopener">here</a>.</p>
<ul>
<li>Launch VMLogin and create a new browser profile. You can either click <strong>Get random profile</strong> (1), or select your settings.</li>
<li>Click on <strong>Setting proxy server</strong> (2)</li>
</ul>
<p><img loading="lazy" decoding="async" class="aligncenter size-full wp-image-8177" src="https://www.proxysp.com/wp-content/uploads/2021/09/OxyLabs-Residential-Proxy-VMLogin1.png" alt="OxyLabs Residential Proxy VMLogin1" width="675" height="500" srcset="https://proxysp.com/wp-content/uploads/2021/09/OxyLabs-Residential-Proxy-VMLogin1.png 675w, https://proxysp.com/wp-content/uploads/2021/09/OxyLabs-Residential-Proxy-VMLogin1-300x222.png 300w" sizes="(max-width: 675px) 100vw, 675px" /></p>
<ul>
<li>Create a new Residential Proxy user.</li>
</ul>
<p><img loading="lazy" decoding="async" class="aligncenter wp-image-8178" src="https://www.proxysp.com/wp-content/uploads/2021/09/OxyLabs-Residential-Proxy-VMLogin2.png" alt="OxyLabs Residential Proxy VMLogin2" width="815" height="317" srcset="https://proxysp.com/wp-content/uploads/2021/09/OxyLabs-Residential-Proxy-VMLogin2.png 961w, https://proxysp.com/wp-content/uploads/2021/09/OxyLabs-Residential-Proxy-VMLogin2-300x117.png 300w, https://proxysp.com/wp-content/uploads/2021/09/OxyLabs-Residential-Proxy-VMLogin2-768x299.png 768w" sizes="(max-width: 815px) 100vw, 815px" /></p>
<ul>
<li>Click on <strong>Setting proxy server</strong> and choose <strong>HTTP Proxy</strong> as the Connection type. Under IP or host enter <strong>pr.oxylabs.io</strong>. Fill in <strong>7777</strong> for <strong>Port</strong>. Finally, enter your login credentials under <strong>Username</strong> (in customer-username format) and <strong>Password</strong>. You can check if the proxy works by clicking <strong>Test Proxy</strong>. If everything is fine, save profile and launch the browser.</li>
</ul>
<p><img loading="lazy" decoding="async" class="aligncenter size-full wp-image-8179" src="https://www.proxysp.com/wp-content/uploads/2021/09/OxyLabs-Residential-Proxy-VMLogin3.png" alt="OxyLabs Residential Proxy VMLogin3" width="686" height="500" srcset="https://proxysp.com/wp-content/uploads/2021/09/OxyLabs-Residential-Proxy-VMLogin3.png 686w, https://proxysp.com/wp-content/uploads/2021/09/OxyLabs-Residential-Proxy-VMLogin3-300x219.png 300w" sizes="(max-width: 686px) 100vw, 686px" /></p>
<ul>
<li>You can also use country specific entries. For example, if you put <strong>us-pr.oxylabs.io</strong> under Proxy <strong>IP address</strong> and <strong>10001</strong> under Proxy <strong>Port</strong>, you will receive a US exit node with a sticky session.</li>
</ul>
<p><img loading="lazy" decoding="async" class="aligncenter size-full wp-image-8180" src="https://www.proxysp.com/wp-content/uploads/2021/09/OxyLabs-Residential-Proxy-VMLogin4.png" alt="OxyLabs Residential Proxy VMLogin4" width="714" height="500" srcset="https://proxysp.com/wp-content/uploads/2021/09/OxyLabs-Residential-Proxy-VMLogin4.png 714w, https://proxysp.com/wp-content/uploads/2021/09/OxyLabs-Residential-Proxy-VMLogin4-300x210.png 300w" sizes="(max-width: 714px) 100vw, 714px" /></p>
<ul>
<li>This is all, you are ready to use Residential Proxies with VMLogin.</li>
</ul>
<hr />
<h3 id="undetectable">Undetectable</h3>
<p>Firstly, you will need to get Undetectable. To do that, simply go to <a class="custom_link" href="https://undetectable.io/" target="_blank" rel="nofollow noopener">undetectable.io</a>, sign up, and download the browser.</p>
<p>Then, open the application and click &#8220;+&#8221; to create a new profile.</p>
<p><img loading="lazy" decoding="async" class="aligncenter wp-image-8181" src="https://www.proxysp.com/wp-content/uploads/2021/09/OxyLabs-Residential-Proxy-Undetectable1.png" alt="OxyLabs Residential Proxy Undetectable1" width="679" height="456" srcset="https://proxysp.com/wp-content/uploads/2021/09/OxyLabs-Residential-Proxy-Undetectable1.png 745w, https://proxysp.com/wp-content/uploads/2021/09/OxyLabs-Residential-Proxy-Undetectable1-300x201.png 300w" sizes="(max-width: 679px) 100vw, 679px" /></p>
<p>In the following window, under <em>New Profile</em>, enter the new profile name. Choose the settings (OS, browser, configurations, and screen) of how you want your browser to be recognized by websites.</p>
<p>Also, you can select the main and additional languages, while geo-location will be determined by your proxy.</p>
<p><img loading="lazy" decoding="async" class="aligncenter size-full wp-image-8182" src="https://www.proxysp.com/wp-content/uploads/2021/09/OxyLabs-Residential-Proxy-Undetectable2.png" alt="OxyLabs Residential Proxy Undetectable2" width="749" height="500" srcset="https://proxysp.com/wp-content/uploads/2021/09/OxyLabs-Residential-Proxy-Undetectable2.png 749w, https://proxysp.com/wp-content/uploads/2021/09/OxyLabs-Residential-Proxy-Undetectable2-300x200.png 300w" sizes="(max-width: 749px) 100vw, 749px" /></p>
<p>Go to the <em>Proxy</em> tab and select the <em>&#8220;New proxy&#8221;</em> option in the box.</p>
<p><img loading="lazy" decoding="async" class="aligncenter size-full wp-image-8183" src="https://www.proxysp.com/wp-content/uploads/2021/09/OxyLabs-Residential-Proxy-Undetectable3.png" alt="OxyLabs Residential Proxy Undetectable3" width="747" height="500" srcset="https://proxysp.com/wp-content/uploads/2021/09/OxyLabs-Residential-Proxy-Undetectable3.png 747w, https://proxysp.com/wp-content/uploads/2021/09/OxyLabs-Residential-Proxy-Undetectable3-300x201.png 300w" sizes="(max-width: 747px) 100vw, 747px" /></p>
<p>You can choose either SOCKS5 or HTTP (select HTTP proxy as a connection type). Now fill in proxy and authentication details: type <strong>pr.oxylabs.io</strong> for your Host and use <strong>7777</strong> for <em>Port</em>. Enter your credentials in the <em>Login</em> and <em>Password</em> spaces. Do not forget to add customer- at the beginning of your username. If you have whitelisted your devices, you do not need to provide login credentials.</p>
<p>You can also use country-specific entries. For example, if you put <strong>us- pr.oxylabs.io</strong> under <em>Host</em> and <strong>10001</strong> under Port, you will receive US exit node with a sticky session. Please check out our <a href="#country-specific-entry-nodes">complete list of country-secific entry nodes</a>.</p>
<p>Click the <em>Check</em> button. If everything is fine, you should get a response indicating External IP. Press the Save Proxy button to confirm the changes.</p>
<p><img loading="lazy" decoding="async" class="aligncenter size-full wp-image-8184" src="https://www.proxysp.com/wp-content/uploads/2021/09/OxyLabs-Residential-Proxy-Undetectable4.png" alt="OxyLabs Residential Proxy Undetectable4" width="750" height="500" srcset="https://proxysp.com/wp-content/uploads/2021/09/OxyLabs-Residential-Proxy-Undetectable4.png 750w, https://proxysp.com/wp-content/uploads/2021/09/OxyLabs-Residential-Proxy-Undetectable4-300x200.png 300w" sizes="(max-width: 750px) 100vw, 750px" /></p>
<p>Now save the profile by pressing the <em>Save</em> button, and you will see it appear on the left side menu. Edit your profiles easily by simply clicking on them.</p>
<p><img loading="lazy" decoding="async" class="aligncenter size-full wp-image-8185" src="https://www.proxysp.com/wp-content/uploads/2021/09/OxyLabs-Residential-Proxy-Undetectable5.png" alt="OxyLabs Residential Proxy Undetectable5" width="748" height="500" srcset="https://proxysp.com/wp-content/uploads/2021/09/OxyLabs-Residential-Proxy-Undetectable5.png 748w, https://proxysp.com/wp-content/uploads/2021/09/OxyLabs-Residential-Proxy-Undetectable5-300x201.png 300w" sizes="(max-width: 748px) 100vw, 748px" /></p>
<p>That's it! You have successfully set up your proxies with Undetectable.io.</p>
<hr />
<h3 id="puppeteer">Puppeteer</h3>
<p>Before getting started with Puppeteer, you’ll need to install some basic tools: Node.js and a code editor of your choice. After that, create a Node.js project and install the required packages. You may find a detailed guide on how to install and run Puppeteer on our <a href="https://oxylabs.io/blog/puppeteer-tutorial" target="_blank" rel="nofollow noopener">blog post</a>.</p>
<p>Once everything is set up, we can move on to the next part – Oxylabs Residential Proxies integration with Puppeteer.</p>
<ul>
<li>Within Puppeteer, fill in the value, for example:</li>
</ul>
<p><code>pr.oxylabs.io:7777</code></p>
<ul>
<li>Under ‘page.authenticate’ input your Oxylabs proxy sub-user username in the ‘username’ value and your password.</li>
<li>The example of a code looks like this:</li>
</ul>
<pre>const puppeteer = require('puppeteer');
(async () =&gt; {
  const browser = await puppeteer.launch({
    headless: false,
    args: ['--proxy-server=pr.oxylabs.io:7777]  
});
  const page = await browser.newPage();
    await page.authenticate({
        username: 'USERNAME',
        password: 'PASSWORD'
    });
    await page.goto('https://ip.oxylabs.io');
    await page.screenshot({path: 'example.png'});
    await browser.close();
})();
</pre>
<p>You can also use country-specific entries. For example, if you put <code>us-pr.oxylabs.io</code> under ‘host’ and <code>10001</code> under ‘port’, you will receive a US exit node with a sticky session. Please check out our <a href="#quick-start">documentation</a> for a complete list of country-specific entry nodes.</p>
<p>And that’s it! You’ve successfully integrated Oxylabs Residential proxies with Puppeteer.</p>
<hr />
<h4>References,</h4>
<p><a href="https://docs.oxylabs.io/residential/index.html" target="_blank" rel="nofollow noopener">https://docs.oxylabs.io/residential/index.html</a></p>
<hr />
<blockquote><p><strong>Disclaimer</strong>: This part of the content is mainly from the merchant. If the merchant does not want it to be displayed on my website, please <a href="https://www.proxysp.com/contact-us/">contact us</a> to delete your content.</p></blockquote>
]]></content:encoded>
					
					<wfw:commentRss>https://proxysp.com/oxylabs-residential-proxies/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">7621</post-id>	</item>
		<item>
		<title>IPv6 Proxies (By BlazingSEO) : Learn Manuals Before You Buy</title>
		<link>https://proxysp.com/ipv6-proxies-blazingseo/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=ipv6-proxies-blazingseo</link>
					<comments>https://proxysp.com/ipv6-proxies-blazingseo/#respond</comments>
		
		<dc:creator><![CDATA[admin]]></dc:creator>
		<pubDate>Thu, 01 Jan 1970 00:00:00 +0000</pubDate>
				<category><![CDATA[BlazingSEO Proxies]]></category>
		<guid isPermaLink="false">https://www.proxysp.com/?p=7671</guid>

					<description><![CDATA[Can you believeBlazing SEO provides IPv6 Proxies? Through our article you will know if it's worth having their IPv6 Proxies. What Are IPv6 Proxies? IPv6 Proxies &#8230;<p class="read-more"> <a class="ast-button" href="https://proxysp.com/ipv6-proxies-blazingseo/"> <span class="screen-reader-text">IPv6 Proxies (By BlazingSEO) : Learn Manuals Before You Buy</span> Read More &#187;</a></p>]]></description>
										<content:encoded><![CDATA[<blockquote><p>Can you believeBlazing SEO provides IPv6 Proxies? Through our article you will know if it's worth having their IPv6 Proxies.</p></blockquote>
<h2 class="heading">What Are IPv6 Proxies?</h2>
<p>IPv6 Proxies are proxies that are similar to our <a href="https://www.proxysp.com/dedicated-proxies-blazingseo/" target="_blank" rel="noopener">Dedicated proxies</a> in the sense that they are only used by one single person. However, the Dedicated proxies are in IPv4 format, and the IPv6 are in a different format (explained below).</p>
<p>IPv4 has been the standard IP address used for most device's public IP addresses and proxies. All of our proxies are in IPv4 format. Example &#8211; 192.117.63.126 However, IPv4 addresses are actually running out entirely across the internet as more and more devices are introduced into the market and IPv6 will be the next step once the IPv4 runs out.</p>
<p>IPv6 looks VERY different from IPv4. You'll know its an IPv6 just by glancing. You can see that IPv6 is much longer and more complicated. As well as being separated by a colon &#8220;:&#8221;. However, IPv4 and IPv6 work in a very similar way when being used as a proxy.<br />
Example &#8211; 2001:0db8:85a3:0000:0000:8a2e:0370:7334</p>
<p>IPv6 support is available on many major sites, and because IPv6 is very new, many of the proxies can be cleaner than our IPv4, making it a better option.</p>
<h3><strong>Advantages:</strong></h3>
<ul>
<li>A private proxy is a proxy that is used only by you.</li>
<li>It hides your IP(or MAC) address while adding security and protecting your privacy.</li>
<li><a href="https://www.proxysp.com/private-proxies/" target="_blank" rel="noopener">Private proxies</a> deliver fully anonymous surfing on the internet. It is important to remember that you leave a digital footprint in the form of your IP address when using the web. This means that almost anyone can see you online, including hackers and spammers. A private proxy server can almost guarantee your IP address will be invisible.</li>
<li>Higher speed since no one else is working with the same proxy.</li>
<li>Ability to bypass filters and firewalls since a private proxy server can circumvent these types of blocked websites.</li>
<li>Ability to unblock numerous applications and bypass numerous internet restrictions (i.e. <a href="https://www.proxysp.com/youtube-proxies/" target="_blank" rel="noopener">unblock YouTube</a>, <a href="https://www.proxysp.com/best-facebook-proxy/" target="_blank" rel="noopener">Facebook</a>, <a href="https://www.proxysp.com/best-facebook-proxy/" target="_blank" rel="noopener">Twitter</a> at work or school where the “IT administrator” has restricted your access to these and similar sites).</li>
<li>Cleaner than IPv4</li>
<li>Protect privacy for minimal worry about your personal information being exposed or compromised when you make purchases or surf on the web.</li>
<li>Deliver a higher level of security on internet since a private proxy provides a unique internet address dedicated to only you.</li>
<li>Avoid and block spam successfully.</li>
<li>Get around geographic restrictions (Restricted content based on country).</li>
</ul>
<p>These proxies are best used for account use because the proxy never changes (Unless you would like the proxies to change).</p>
<p>IPv6 is best because only one person is using it. This means faster speeds, and better reliability site wise for the proxy. To compare, if the proxy was<a href="https://www.proxysp.com/shared-proxy/" target="_blank" rel="noopener"> shared</a> (Semi-Dedicated/Rotating), the other person using the proxy might've already created an account for a certain site. As result, the other users on the proxy will not be able to use that same proxy on the same site and create another account.</p>
<h3><strong>Typical Uses of IPv6 Proxies:</strong></h3>
<ul>
<li>Social Media</li>
<li>Games</li>
<li>Account Creation/Use</li>
<li>General Browsing</li>
<li>SEO</li>
</ul>
<h3><strong>Locations:</strong></h3>
<ul>
<li>USA</li>
</ul>
<div class="icon">
<div class="icon">
<hr />
<h2 class="heading">How Does Your Authorization Scheme Work for IPv6 Proxies?</h2>
<p>In short, you are provided with IPv6 addresses upon purchase. Each of the IPv6 addresses will have its own unique username: password combination for authorization. Note: the password will be the same for all IPs, only the username is unique.</p>
<p>Your connections are then tunneled through a static IPv4 IP address used in your browser configuration. For more information, check out the graphic below:</p>
<p><img loading="lazy" decoding="async" class="aligncenter size-full wp-image-7876" src="https://www.proxysp.com/wp-content/uploads/2021/09/IPv6-proxies-authorization-receive.jpg" alt="IPv6 proxies authorization-receive" width="597" height="387" srcset="https://proxysp.com/wp-content/uploads/2021/09/IPv6-proxies-authorization-receive.jpg 597w, https://proxysp.com/wp-content/uploads/2021/09/IPv6-proxies-authorization-receive-300x194.jpg 300w" sizes="(max-width: 597px) 100vw, 597px" /></p>
<p><img loading="lazy" decoding="async" class="aligncenter size-full wp-image-7877" src="https://www.proxysp.com/wp-content/uploads/2021/09/IPv6-proxies-authorization-setting.jpg" alt="IPv6 proxies authorization-setting" width="585" height="522" srcset="https://proxysp.com/wp-content/uploads/2021/09/IPv6-proxies-authorization-setting.jpg 585w, https://proxysp.com/wp-content/uploads/2021/09/IPv6-proxies-authorization-setting-300x268.jpg 300w" sizes="(max-width: 585px) 100vw, 585px" /></p>
<p><img loading="lazy" decoding="async" class="aligncenter size-full wp-image-7878" src="https://www.proxysp.com/wp-content/uploads/2021/09/IPv6-proxies-authorization-input.jpg" alt="IPv6 proxies authorization-input" width="489" height="529" srcset="https://proxysp.com/wp-content/uploads/2021/09/IPv6-proxies-authorization-input.jpg 489w, https://proxysp.com/wp-content/uploads/2021/09/IPv6-proxies-authorization-input-277x300.jpg 277w" sizes="(max-width: 489px) 100vw, 489px" /></p>
<p><img loading="lazy" decoding="async" class="aligncenter size-full wp-image-7879" src="https://www.proxysp.com/wp-content/uploads/2021/09/IPv6-proxies-authorization-enter.jpg" alt="IPv6 proxies authorization-enter" width="581" height="243" srcset="https://proxysp.com/wp-content/uploads/2021/09/IPv6-proxies-authorization-enter.jpg 581w, https://proxysp.com/wp-content/uploads/2021/09/IPv6-proxies-authorization-enter-300x125.jpg 300w" sizes="(max-width: 581px) 100vw, 581px" /></p>
<p><img loading="lazy" decoding="async" class="aligncenter size-full wp-image-7880" src="https://www.proxysp.com/wp-content/uploads/2021/09/IPv6-proxies-authorization-verify.jpg" alt="IPv6 proxies authorization-verify" width="589" height="105" srcset="https://proxysp.com/wp-content/uploads/2021/09/IPv6-proxies-authorization-verify.jpg 589w, https://proxysp.com/wp-content/uploads/2021/09/IPv6-proxies-authorization-verify-300x53.jpg 300w" sizes="(max-width: 589px) 100vw, 589px" /></p>
<hr />
<h2 class="heading">What Additional Information Can Blazing SEO Provide about Their IPv6 Proxy Offering?</h2>
<p dir="ltr"><span dir="ltr">With an IPv6 proxy, you can easily manage social media, scrape the web for valuable data, and more!</span></p>
<h3 dir="ltr">Quality Virgin IPv6 Proxy</h3>
<p dir="ltr">Our high quality IPs are clean and ready to use. Vetted by new clients, each IP is linked to our ASN (a full /32). Each /64 subnet you purchase includes a single static IP. With sizes ranging from 4.2 billion /64 subnets, 16.6 million /56 subnets, and 65,000 /48 subnets, you’ll be fully equipped to tackle the digital world. Plus, we’re growing, and soon we’ll be diversifying our pool with 12.6 billion /64 addresses and 3 different /32 subnets.</p>
<h3 dir="ltr">Unbeatable Price</h3>
<p dir="ltr"><span dir="ltr">With 4 billion /64 level IPv6 proxies, finding what you need is easier than ever. IPv4 pricing has nothing on the cost-effective IPv6 proxy, rated at $0.20/ip/month. A full wallet and massive stock of IP addresses? Sweet victory.   </span></p>
<h3 dir="ltr">Diverse Use Cases</h3>
<p dir="ltr">Switch from project to project with ease thanks to our various use-cases. Need proxies on the /64 level? We have you covered. From search engines to social media, IPv6 proxies will establish you as a digital trailblazer. As a bonus, we offer username: password authentication. Upon purchase, you’ll receive a unique username and password combination for each IP in your account.</p>
<h3 dir="ltr">Dedicated IPv6 Through And Through</h3>
<p dir="ltr"><span dir="ltr">Downtime is wasted time. With an uptime rate of 99%, our IPv6 proxies run with efficiency and effectiveness. In addition, our IPv6 proxies offer total control over performance, speeds, and how a subnet is perceived by a website. Double selling subnets? Not on our watch. </span></p>
</div>
</div>
<div>
<p><strong><div class="su-heading su-heading-style-modern-2-orange su-heading-align-center" id="" style="font-size:30px;margin-bottom:20px"><div class="su-heading-inner">FAQs</div></div></strong></p>
<ul>
<li class="heading"><strong>What sites will IPv6 IPs work for?</strong></li>
</ul>
<p>To help answer this question, here is a<a href="https://ipv6-test.com/validate.php" target="_blank" rel="nofollow noopener"> link</a> that helps check if a site is IPv6 compatible. All you need to do is enter the website URL and the site will tell you whether or not that URL has an IPv6 server able to receive traffic. In addition to this site, there is also a<a href="https://www.6connect.com/ipv6/ipv6-progress-report-top-sites-2019/" target="_blank" rel="nofollow noopener"> list of top sites</a> that are IPv6 compatible.</p>
<hr />
<ul>
<li class="heading"><strong>How many locations does Blazing SEO offer for IPv6 proxies?</strong></li>
</ul>
<p>As of right now, only Los Angeles, but as their subnet network grows, so too will their list of locations!</p>
<hr />
<ul>
<li class="heading"><strong>What are Blazing SEO IPv6 proxy's bandwidth limits?</strong></li>
</ul>
<p>Like Blazing SEO IPv4 offering, They offer unlimited bandwidth on their IPv6 proxies. This is subject to abnormal usage (e.g. &#8211; 1000 TB per month).</p>
<hr />
<ul>
<li class="heading"><strong>Does Blazing SEO have rotating IPv6 proxies?</strong></li>
</ul>
<p>Currently, Blazing SEO does not have a rotating system in place for their IPv6 proxies. Instead of a rotating system, they are able to offer thousands of IPs at a low cost. It’s for this reason that you’re able to buy more dedicated IPv6 proxies at a cheaper rate than rotating IPv4 IPs.</p>
<hr />
<ul>
<li class="heading"><strong>Do Blazing SEO offer replacements on IPv6 proxies?</strong></li>
</ul>
<p>Replacements are available upon request. There are some restrictions, so please reach out to Blazing SEO support team at <span dir="ltr">support@blazingseo.com</span><span dir="ltr"> with any questions regarding replacements. </span></p>
<hr />
<ul>
<li class="heading"><strong>Where can I find additional information about IPv6 proxies?</strong></li>
</ul>
<p>If you’re asking the question, “do I need IPv6 for proxies?” There is an abundance of information available on the subject. Do a little digging on your own or check out websites like<a href="https://www.ripe.net/about-us/press-centre/understanding-ip-addressing" target="_blank" rel="nofollow noopener"> RIPE</a>, which provide handy charts about IP addressing. Between the internet, our expert knowledge, and support staff that’s available 24/7, your questions will be answered.</p>
<hr />
<h4 id="references" class="ftwp-heading">References,</h4>
</div>
<ul>
<li><a href="https://portal.blazingseollc.com/en/support/solutions/articles/64000256608-what-are-ipv6-proxies" target="_blank" rel="nofollow noopener">https://portal.blazingseollc.com/en/support/solutions/articles/64000256608-what-are-ipv6-proxies</a></li>
<li><a href="https://portal.blazingseollc.com/en/support/solutions/articles/64000262778-what-sites-will-ipv6-ips-work-for-" target="_blank" rel="nofollow noopener">https://portal.blazingseollc.com/en/support/solutions/articles/64000262778-what-sites-will-ipv6-ips-work-for-</a></li>
<li><a href="https://portal.blazingseollc.com/en/support/solutions/articles/64000262779-how-many-locations-do-you-offer-for-ipv6-proxies-" target="_blank" rel="nofollow noopener">https://portal.blazingseollc.com/en/support/solutions/articles/64000262779-how-many-locations-do-you-offer-for-ipv6-proxies-</a></li>
<li><a href="https://portal.blazingseollc.com/en/support/solutions/articles/64000262776-how-does-your-authorization-scheme-work-for-ipv6-proxies-" target="_blank" rel="nofollow noopener">https://portal.blazingseollc.com/en/support/solutions/articles/64000262776-how-does-your-authorization-scheme-work-for-ipv6-proxies-</a></li>
<li><a href="https://portal.blazingseollc.com/en/support/solutions/articles/64000262777-what-are-your-bandwidth-limits-" target="_blank" rel="nofollow noopener">https://portal.blazingseollc.com/en/support/solutions/articles/64000262777-what-are-your-bandwidth-limits-</a></li>
<li><a href="https://portal.blazingseollc.com/en/support/solutions/articles/64000262780-do-you-have-rotating-ipv6-proxies-" target="_blank" rel="nofollow noopener">https://portal.blazingseollc.com/en/support/solutions/articles/64000262780-do-you-have-rotating-ipv6-proxies-</a></li>
<li><a href="https://portal.blazingseollc.com/en/support/solutions/articles/64000262781-do-you-offer-replacements-on-ipv6-proxies-" target="_blank" rel="nofollow noopener">https://portal.blazingseollc.com/en/support/solutions/articles/64000262781-do-you-offer-replacements-on-ipv6-proxies-</a></li>
<li><a href="https://portal.blazingseollc.com/en/support/solutions/articles/64000262782-where-can-i-find-additional-information-about-ipv6-proxies" target="_blank" rel="nofollow noopener">https://portal.blazingseollc.com/en/support/solutions/articles/64000262782-where-can-i-find-additional-information-about-ipv6-proxies</a></li>
<li><a href="https://portal.blazingseollc.com/en/support/solutions/articles/64000262787-what-additional-information-can-you-provide-about-blazing-seo-s-ipv6-proxy-offering-" target="_blank" rel="nofollow noopener">https://portal.blazingseollc.com/en/support/solutions/articles/64000262787-what-additional-information-can-you-provide-about-blazing-seo-s-ipv6-proxy-offering-</a></li>
</ul>
<hr />
<blockquote><p><strong>Disclaimer</strong>: This part of the content is mainly from the merchant. If the merchant does not want it to be displayed on my website, please <a href="https://www.proxysp.com/contact-us/">contact us</a> to delete your content.</p></blockquote>
]]></content:encoded>
					
					<wfw:commentRss>https://proxysp.com/ipv6-proxies-blazingseo/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">7671</post-id>	</item>
		<item>
		<title>How to Use OxyLabs Proxy [Part 1]: OxyLabs Datacenter Proxies Manual</title>
		<link>https://proxysp.com/oxylabs-datacenter-proxies/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=oxylabs-datacenter-proxies</link>
					<comments>https://proxysp.com/oxylabs-datacenter-proxies/#respond</comments>
		
		<dc:creator><![CDATA[admin]]></dc:creator>
		<pubDate>Thu, 01 Jan 1970 00:00:00 +0000</pubDate>
				<category><![CDATA[How to Use OxyLabs Proxy (OxyLabs User Manual Navigation)]]></category>
		<guid isPermaLink="false">https://www.proxysp.com/?p=7589</guid>

					<description><![CDATA[Want to use OxyLabs' datacenter proxies? Then you can't miss this article. It is the most comprehensive OxyLabs datacenter proxies user guide. Quick Start Before we &#8230;<p class="read-more"> <a class="ast-button" href="https://proxysp.com/oxylabs-datacenter-proxies/"> <span class="screen-reader-text">How to Use OxyLabs Proxy [Part 1]: OxyLabs Datacenter Proxies Manual</span> Read More &#187;</a></p>]]></description>
										<content:encoded><![CDATA[<blockquote><p>Want to use OxyLabs' datacenter proxies? Then you can't miss this article. It is the most comprehensive OxyLabs datacenter proxies user guide.</p></blockquote>
<h2>Quick Start</h2>
<p>Before we begin, please make sure you have received a username, password, and all URLs linking to your IP list from a Sales Representative, Dedicated Account Manager, or Support Team.</p>
<p>There are two ways you can get to your IP list. You can either access the IP list directly from your browser by opening the URL you received (e.g.: <code>https://proxy.oxylabs.io/all</code>). You will then be asked to enter your login credentials (HTTP Basic Auth).</p>
<p>Or you can retrieve the list by making a GET request to the URL you received (for example: <code>https://proxy.oxylabs.io/all</code>). Don't forget to replace <code>USERNAME</code> and <code>PASSWORD</code> with your proxy user credentials.</p>
<div class="inside-code">
<pre>curl <span class="nt">-u</span> <span class="s2">"USERNAME:PASSWORD"</span> https://proxy.oxylabs.io/all</pre>
<p><span style="font-size: 16px;">To make a request using a proxy, you will need to choose an IP address from the acquired list and specify it in the request parameters. You can see an example in cURL below. You can find more code samples in other languages </span><a href="#making-requests">here</a> <span style="font-size: 16px;">or</span><span style="font-size: 16px;"> full code examples on our </span><a class="custom_link" style="font-size: 16px; background-color: #ffffff;" href="https://github.com/oxylabs/product-integrations/tree/master/datacenter-proxies" target="_blank" rel="nofollow noopener">GitHub</a>.</p>
</div>
<div class="inside-code">
<pre>curl <span class="nt">-x</span> 1.2.3.4:60000 <span class="nt">-U</span> <span class="s2">"USERNAME:PASSWORD"</span> http://ip.oxylabs.io</pre>
<p><span style="font-size: 16px;">If there are any questions we have not covered in this doccumentation, please contact your Dedicated Account Manager or our Support at </span><a class="custom_link" style="font-size: 16px; background-color: #ffffff;" href="mailto:support@oxylabs.io" target="_blank" rel="nofollow noopener">support@oxylabs.io</a><span style="font-size: 16px;">.</span></p>
</div>
<hr />
<h2>Proxy Lists</h2>
<hr />
<h3>Basic</h3>
<p>You should receive a URL to your proxy list from your Dedicated Account Manager or our Support and it should look something like this:</p>
<pre>https://proxy.oxylabs.io/key/a27c5343ce4c4637a85a9297ddf1cace</pre>
<p>Simply open this URL in your browser (or any other prefered software). You will then be asked to enter your login credentials (HTTP Basic Auth):</p>
<p><img loading="lazy" decoding="async" class="aligncenter size-full wp-image-8075" src="https://www.proxysp.com/wp-content/uploads/2021/09/OxyLabs-Proxy-Authentication-Required.jpg" alt="OxyLabs Proxy Authentication Required" width="358" height="238" srcset="https://proxysp.com/wp-content/uploads/2021/09/OxyLabs-Proxy-Authentication-Required.jpg 358w, https://proxysp.com/wp-content/uploads/2021/09/OxyLabs-Proxy-Authentication-Required-300x199.jpg 300w" sizes="(max-width: 358px) 100vw, 358px" /></p>
<p>Once you do that, the list of proxies will be shown in a plain text.</p>
<p>If you have multiple lists and wish to get all IPs assigned to your account, you can use this URL:</p>
<pre>https://proxy.oxylabs.io/all</pre>
<p>You can also include <code>?showCountry</code> or <code>?showCity</code> at the end of your URL to get IPs with their corresponding locations.</p>
<hr />
<h3>RESTful</h3>
<h4 id="showing-all-available-proxy-lists">Showing All Available Proxy Lists</h4>
<p>With this endpoint, you can retrieve proxy lists that belong to your user:</p>
<div class="endpoint">
<pre class="endpoint-body">GET https://api.oxylabs.io/v1/proxies/lists</pre>
</div>
<pre>curl -U username:password "https://api.oxylabs.io/v1/proxies/lists"
</pre>
<p><strong>Sample output:</strong></p>
<pre class="highlight json tab-json">[
{
"uuid": "123e4567-e89b-12d3-a456-426655440000",
"key": "12345678",
"updated_timestamp": "2016-09-28T13:03:50+0300",
"ips_count": 2000,
"href": "http://api.oxylabs.io/v1/proxies/lists/123e4567-e89b-12d3-a456-426655440000"
}
]</pre>
<hr />
<h4>Retrieving a Specific Proxy List</h4>
<p>With this endpoint, you can retrieve a specific proxy list:</p>
<pre class="endpoint-body">GET https://api.oxylabs.io/v1/proxies/lists/{uuid}</pre>
<p>Request parameters:<br />
<div class="su-table su-table-responsive su-table-alternate">
<table>
<thead>
<tr>
<th>Parameter</th>
<th> Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><code>uuid</code></td>
<td>The uuid of the proxy-list to retrieve</td>
</tr>
</tbody>
</table>
</div>
<pre>curl -u username:password "https://api.oxylabs.io/v1/proxies/lists/{uuid}"
</pre>
<p><strong>Sample output:</strong></p>
<pre>[
{
"ip": "127.0.0.1",
"port": "60000",
"country": "US"
},
{ 
"ip": "127.0.0.2",
"port": "60000",
"country": "GB"
}
]</pre>
<hr />
<h2 id="making-requests">Making Requests</h2>
<p>By default, Oxylabs proxies and Proxy Rotator use a basic <a class="custom_link" href="https://en.wikipedia.org/wiki/Basic_access_authentication" target="_blank" rel="nofollow noopener">HTTP authentication</a> that requires you to provide a username and password. You can get your credentials by contacting your Dedicated Account Manager or our Support Team at <a class="custom_link" href="mailto:support@oxylabs.io" target="_blank" rel="nofollow noopener">support@oxylabs.io</a>.</p>
<p>We also support authentication based on whitelisted IP addresses. See <a href="#whitelisting-ips">Whitelisting IPs</a>.</p>
<p>Depending on your authentication method, you might need to change the proxy port:</p>
<p><strong>Proxy</strong></p>
<div class="su-table su-table-responsive su-table-alternate">
<table>
<thead>
<tr>
<th>Port</th>
<th>Usage</th>
</tr>
</thead>
<tbody>
<tr>
<td><code>60000</code></td>
<td>Required with proxies when login credentials are used (username and password). This port is used with proxy <a href="#proxy-rotator">Proxy Rotator </a>as well when used with both login credentials and whitelisted IPs.</td>
</tr>
<tr>
<td><code>65432</code></td>
<td>Required with proxies when authorization is done via whitelisted IPs</td>
</tr>
</tbody>
</table>
</div>
<p>If you want to use Datacenter Proxies via user/pass authentification method:</p>
<pre>curl -x 1.2.3.4:60000 -U user1:pass1 http://ip.oxylabs.io</pre>
<p>If you want to use Datacenter Proxies via Whitelisted IP authentification method:</p>
<pre>curl -x 1.2.3.4:65432 http://ip.oxylabs.io</pre>
<hr />
<h2 id="whitelisting-ips">Whitelisting IPs</h2>
<h3 id="dashboard">Dashboard</h3>
<p>We also support authentication based on an IP address. If you are using proxies directly (without proxy <a class="custom_link" href="#proxy-rotator">Proxy Rotator</a>), you can whitelist your IPs by yourself. Just log into <a class="custom_link" href="https://stats.oxylabs.io/" target="_blank" rel="nofollow noopener">https://stats.oxylabs.io</a> and on the sidebar at the bottom you will see a section named &#8220;Add Whitelist&#8221;. After clicking on the link you will be navigated to self-whitelist page which looks like this:</p>
<p><img loading="lazy" decoding="async" class="aligncenter size-full wp-image-8076" src="https://www.proxysp.com/wp-content/uploads/2021/09/OxyLabs-Whitelisting-IPs.png" alt="OxyLabs Whitelisting IPs" width="607" height="195" srcset="https://proxysp.com/wp-content/uploads/2021/09/OxyLabs-Whitelisting-IPs.png 607w, https://proxysp.com/wp-content/uploads/2021/09/OxyLabs-Whitelisting-IPs-300x96.png 300w" sizes="(max-width: 607px) 100vw, 607px" /></p>
<h2></h2>
<p>Here you can manage your whitelisted IPs that you can use to access proxies. You can whitelist individual IPs, as well as up to 24 subnets. If you would like to whitelist a larger subnet, please contact your Dedicated Account Manager or Support Team at <a class="custom_link" href="mailto:support@oxylabs.io" target="_blank" rel="nofollow noopener">support@oxylabs.io</a>.</p>
<p>If you are using proxy <a class="custom_link" href="#proxy-rotator">Proxy Rotator</a> or <a href="https://www.proxysp.com/socks-proxy/" target="_blank" rel="noopener">SOCKS proxies</a>, you cannot whitelist your IP address by yourself. Instead, you will have to give us a list of IP address you want to use to connect to proxies. We will whitelist them (add them to firewall exception rules). After doing so, you will be able to access your proxies without login credentials.</p>
<p>Bear in mind, that if you are using whitelisted IPs to access your proxies, you will need to use port <code>65432</code>. For proxy <a class="custom_link" href="#proxy-rotator">Proxy Rotator</a>, the port remains <code>60000</code>.</p>
<hr />
<h3 id="restful-2">RESTful</h3>
<p>You can also whitelist IPs by sending queries directly to our endpoints. Please note there is a 5-minute cooldown for confirming any changes to your whitelisted IP list.</p>
<h4 id="getting-whitelisted-ips-list">Getting Whitelisted IPs List</h4>
<pre>GET https://api.oxylabs.io/v1/whitelisted_ips</pre>
<div class="su-table su-table-responsive su-table-alternate">
<table>
<thead>
<tr>
<th>Response</th>
<th> Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><code>200</code></td>
<td>Success. Response body contains all currently whitelisted IPs and their ids.</td>
</tr>
</tbody>
</table>
</div>
<pre>curl -U username:password "https://api.oxylabs.io/v1/whitelisted_ips"</pre>
<p>Sample output:</p>
<pre>{
"data": [
{
"id": 9765,
"address": "127.0.0.1"
},
{
"id": 9766,
"address": "127.0.0.2"
}
]
}</pre>
<hr />
<h4 id="adding-a-whitelisted-ip">Adding a Whitelisted IP</h4>
<pre>POST https://api.oxylabs.io/v1/whitelisted_ips</pre>
<div class="su-table su-table-responsive su-table-alternate">
<table>
<thead>
<tr>
<th>Response</th>
<th> Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><code>201</code></td>
<td>Success. The IP address has been added to the list. Response body contains the newly added <code>address</code> and <code>id</code>.</td>
</tr>
<tr>
<td><code>422</code></td>
<td>Error. Request body contains an invalid IP address. Response body contains the error message.</td>
</tr>
</tbody>
</table>
</div>
<pre>curl -X POST -u username:password "https://api.oxylabs.io/v1/whitelisted_ips"
--header "Content-Type: application/json" --data '{"address": "127.0.0.1"}'</pre>
<pre>{
"error": {
"message": "This is not a valid IP address.",
"code": 422
}
}</pre>
<p>Sample output:</p>
<pre>{
"id": 9767,
"address": "127.0.0.1"
}</pre>
<hr />
<h4 id="removing-a-whitelisted-ip">Removing a Whitelisted IP</h4>
<pre>DELETE https://api.oxylabs.io/v1/whitelisted_ips/{id}</pre>
<div class="su-table su-table-responsive su-table-alternate">
<table>
<thead>
<tr>
<th>Parameter</th>
<th> Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><code>id</code></td>
<td>The <code>id</code> of the IP address you want to delete (you can get it from GET whitelisted IPs endpoint)</td>
</tr>
</tbody>
</table>
</div>
<div class="su-table su-table-responsive su-table-alternate">
<table>
<thead>
<tr>
<th>Response</th>
<th>  Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><code>204</code></td>
<td>Success. The IP address has been removed from the list. Response body is empty.</td>
</tr>
<tr>
<td><code>403</code></td>
<td>Error. Request contains an invalid <code>id</code>. Response body contains the error message &#8220;Access Denied&#8221;.</td>
</tr>
</tbody>
</table>
</div>
<pre>curl -X DELETE -u username:password "https://api.oxylabs.io/v1/whitelisted_ips/{id}"</pre>
<hr />
<h4 id="saving-changes-5min-cooldown">Saving Changes (5min Cooldown)</h4>
<pre>POST https://api.oxylabs.io/v1/whitelisted_ips/upload_to_servers</pre>
<div class="su-table su-table-responsive su-table-alternate">
<table>
<thead>
<tr>
<th>Response</th>
<th> Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><code>202</code></td>
<td>Success. Changes to your whitelisted IP list have been confirmed. Response body is empty.</td>
</tr>
<tr>
<td><code>429</code></td>
<td>Error. Changes have not been confirmed, the endpoint is on a 5 minute cooldown. Response body contains the error message &#8220;You have exceed the rate limit for the endpoint. Please try again later&#8221;</td>
</tr>
</tbody>
</table>
</div>
<pre>curl -X POST -u username:password "https://api.oxylabs.io/v1/whitelisted_ips/upload_to_servers"</pre>
<hr />
<h2>Datacenter Proxy API</h2>
<h3 id="replacing-subnet-ips">Replacing subnet IPs</h3>
<pre>POST https://api.oxylabs.io/v1/proxy-list/rest/proxy-lists/{PROXY_LIST_UUID}/by-uuid/network-modification-requests/replace</pre>
<p>For you to replace IPs from a specific subnet in your existing proxy list while using Proxy Management API, you will need to make a POST request to the endpoint above with specific subnets you want to replace. To make it work correctly, you must insert a proxy list UUID that can be queried from the API (as described <a href="#showing-all-available-proxy-lists">here</a>).</p>
<div class="su-table su-table-responsive su-table-alternate">
<table>
<thead>
<tr>
<th>Response</th>
<th> Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><code>id</code></td>
<td>Initiated replacement process ID</td>
</tr>
<tr>
<td><code>status</code></td>
<td>Status describes the state of initiated replacement process</td>
</tr>
<tr>
<td><code>message</code></td>
<td>Initiated process type</td>
</tr>
<tr>
<td><code>created_at</code></td>
<td>Timestamp of the initiated process</td>
</tr>
<tr>
<td><code>link_to_list_plain</code></td>
<td>Link to the list of proxies in plain text</td>
</tr>
<tr>
<td><code>link_to_list_json</code></td>
<td>Link to the list of proxies formatted in JSON</td>
</tr>
</tbody>
</table>
</div>
<pre>curl -X POST -H "Content-Type: application/json" -d '{"subnets": ["x.x.x.0/24","y.y.y.0/24"]}' https://api.oxylabs.io/v1/proxy-list/rest/proxy-lists/{PROXY_LIST_UUID}/by-uuid/subnet-replacement-requests -u user:pass</pre>
<p>Sample output:</p>
<pre>{
    "id": "1", 
    "status": "processing", 
    "message": None, 
    "type": "replace", 
    "created_at": "2021-01-01T00:00:00+00:00", 
    "link_to_list_plain": "https://proxy.oxylabs.io/key/4f34fe5862603138c1bc5ce28b181aef", 
    "link_to_list_json": "https://api.oxylabs.io/v1/proxies/lists/8f11274c-a900-11eb-b910-901b0ec4424b"
}
</pre>
<hr />
<h3 id="checking-replacement-status">Checking replacement status</h3>
<pre>GET https://api.oxylabs.io/v1/proxy-list/rest/subnet-replacement-requests/{INITIATED_REPLACEMENT_PROCESS_ID}
</pre>
<p>To confirm that the subnet replacement was a success, you must make a GET request to the endpoint above while inserting <em>Initiated replacement process ID</em> from the replacement process initiated before.</p>
<div class="su-table su-table-responsive su-table-alternate">
<table>
<thead>
<tr>
<th>Response</th>
<th> Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><code>id</code></td>
<td>Initiated replacement process ID</td>
</tr>
<tr>
<td><code>status</code></td>
<td>Status describes the state of initiated replacement process</td>
</tr>
<tr>
<td><code>message</code></td>
<td>Initiated process type</td>
</tr>
<tr>
<td><code>created_at</code></td>
<td>Timestamp of the initiated process</td>
</tr>
<tr>
<td><code>link_to_list_plain</code></td>
<td>Link to the list of proxies in plain text</td>
</tr>
<tr>
<td><code>link_to_list_json</code></td>
<td>Link to the list of proxies formatted in JSON</td>
</tr>
</tbody>
</table>
</div>
<pre>curl -u user:pass https://api.oxylabs.io/v1/proxy-list/rest/subnet-replacement-requests/{INITIATED_REPLACEMENT_PROCESS_ID}"
</pre>
<p>Sample output:</p>
<pre>{
    "created_at": "2021-01-01T00:00:00+00:00",
    "id": "1",
    "link_to_list_json": "https://api.oxylabs.io/v1/proxies/lists/8f11274c-a900-11eb-b910-901b0ec4424b",
    "link_to_list_plain": "https://proxy.oxylabs.io/key/4f34fe5862603138c1bc5ce28b181aef",
    "message": None,
    "status": "completed",
    "type": "replace"
}
</pre>
<hr />
<h3 id="listing-replaced-and-new-ips">Listing replaced and new IPs</h3>
<pre>GET https://api.oxylabs.io/v1/proxy-list/rest/network-modification-requests/{INITIATED_REPLACEMENT_PROCESS_ID}/ips
</pre>
<p>When the replacement request has been processed, removed IPs can be found by making a GET request to the endpoint above while inserting initiated replacement process ID from the replacement process initiated before.</p>
<p>Only 100 replaced IPs will be displayed with the initial request, and pagination metadata will be in the response. In order to fetch the remaining list of replaced IPs, pagination must be used. For pagination, please format the endpoint below:</p>
<pre>GET https://api.oxylabs.io/v1/proxy-list/rest/network-modification-requests/{INITIATED_REPLACEMENT_PROCESS_ID}/ips?fields=metadata.total&after={metadata_after}
</pre>
<div class="su-table su-table-responsive su-table-alternate">
<table>
<thead>
<tr>
<th>Response</th>
<th> Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><code>items</code></td>
<td>A list that contains replaced IP IDs, IPs adressed, and subnet addresses</td>
</tr>
<tr>
<td><code>id</code></td>
<td>Proxy ID within the replacement process</td>
</tr>
<tr>
<td><code>ip</code></td>
<td>Proxy IP adress</td>
</tr>
<tr>
<td><code>subnet</code></td>
<td>Subnet from which the IP is assigned</td>
</tr>
<tr>
<td><code>type</code></td>
<td><code>redundant</code> &#8211; IP that have been replaced, <code>new</code>&#8211; New IP that have been assigned instead of <code>redundant</code>one</td>
</tr>
<tr>
<td><code>metadata</code></td>
<td>Cursor pagination data showing boundaries from which IP address in the replaced IPs list data it has been fetched</td>
</tr>
</tbody>
</table>
</div>
<pre>curl -u user:pass "https://api.oxylabs.io/v1/proxy-list/rest/network-modification-requests/{INITIATED_REPLACEMENT_PROCESS_ID}/ips"
</pre>
<p>Sample output:</p>
<pre>{
  "items": [
    {
      "id": "1",
      "ip": "127.1.0.1",
      "subnet": "127.1.0.0/24",
      "type": "redundant"
    },
    {
      "id": "2",
      "ip": "127.1.1.2",
      "subnet": "127.1.1.0/24",
      "type": "new"
    }
  ],
  "metadata": {
    "after": "'100'",
    "before": "'None'",
    "total": 100
  }
}
</pre>
<hr />
<h2 id="proxy-rotator">Proxy Rotator &#8211; Optional</h2>
<p>This service is optional and is not included in subscription. Instead of connecting to individual IPs, we provide you with a single endpoint to your assigned proxy list. With every request, the endpoint fetches a different IP. To learn how to use the endpoint as a proxy, please see the example on the right.</p>
<p><strong>Note</strong>: Proxy Rotator should be used only with port <code>60000</code>.</p>
<pre>curl --proxy vm.oxylabs.io:60000 http://ip.oxylabs.io
</pre>
<hr />
<h3>Session Control Using Proxy Rotator</h3>
<p>It is possible to keep the same IP address with the Proxy Rotator. Firstly, you will need to know how many proxies your Proxy Rotator has. Then simply add <code>--proxy-header "Proxy-Server: sXXX"</code> header to your request, where <code>sXXX</code> is the number of the proxy, for example, <code>s5</code> or <code>s2541</code>.</p>
<pre>user1@machine:~$ curl -x vm.oxylabs.io:60000 -U user:pass http://ip.oxylabs.io --proxy-header "Proxy-Server: s10"
1.2.30.40
user1@machine:~$ curl -x vm.oxylabs.io:60000 -U user:pass http://ip.oxylabs.io --proxy-header "Proxy-Server: s10"
1.2.30.40
user1@machine:~$ curl -x vm.oxylabs.io:60000 -U user:pass http://ip.oxylabs.io --proxy-header "Proxy-Server: s10"
1.2.30.40
</pre>
<hr />
<h2>Response Codes</h2>
<div class="su-table su-table-responsive su-table-alternate">
<table>
<thead>
<tr>
<th>Response</th>
<th> Error Message</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><code>407</code></td>
<td>Proxy Authentication Required</td>
<td>You are accessing proxy through 60000 port, but you have not provided authorization header, or your credentials are incorrect.</td>
</tr>
<tr>
<td><code>504</code></td>
<td>Gateway Timeout</td>
<td>Proxy server timed out. Waiting for a response from the target server. Usually about 60s.</td>
</tr>
<tr>
<td><code>503</code></td>
<td>Service Unavailable</td>
<td>Failed to connect to the target server. DNS failure to resolve the target server address.</td>
</tr>
<tr>
<td><code>401</code></td>
<td>Unauthorized</td>
<td>Incorrect credentials.</td>
</tr>
<tr>
<td><code>404</code></td>
<td>Not Found</td>
<td>The resource specified could not be found.</td>
</tr>
<tr>
<td><code>500</code></td>
<td>Internal Server Error</td>
<td>We had a problem with our server. Try again later.</td>
</tr>
</tbody>
</table>
</div>
<p>These are the most common response codes that you can get while using our Datacentre Proxies. If you receive any other response code, please get in touch with your Dedicated Account Manager for more information.</p>
<hr />
<h2>3rd Party Integrations</h2>
<h3 id="oxylabs-proxy-manager">Oxylabs Proxy Manager</h3>
<p><a class="custom_link" href="https://chrome.google.com/webstore/detail/oxylabs-proxy-manager/infajoaodhhdogakhloedbppcbeajhoo" target="_blank" rel="nofollow noopener">Oxylabs Proxy Manager</a> is a proxy management extension for Chrome. It is not only free but also works with any proxy provider of your choice. Enable your proxy without having to jump through settings and menu options. Download the extension from Chrome Web Store <a class="custom_link" href="https://chrome.google.com/webstore/detail/oxylabs-proxy-manager/infajoaodhhdogakhloedbppcbeajhoo" target="_blank" rel="nofollow noopener">here</a></p>
<ul>
<li>Click the extension icon to open the application</li>
<li>If you haven't added any proxies yet, you will see <strong>Add new proxy</strong> button. Click it to continue.</li>
</ul>
<p><img loading="lazy" decoding="async" class="aligncenter size-full wp-image-8078" src="https://www.proxysp.com/wp-content/uploads/2021/09/OxyLabs-Add-new-proxy.jpg" alt="OxyLabs Add new proxy" width="434" height="431" srcset="https://proxysp.com/wp-content/uploads/2021/09/OxyLabs-Add-new-proxy.jpg 434w, https://proxysp.com/wp-content/uploads/2021/09/OxyLabs-Add-new-proxy-300x298.jpg 300w, https://proxysp.com/wp-content/uploads/2021/09/OxyLabs-Add-new-proxy-150x150.jpg 150w" sizes="(max-width: 434px) 100vw, 434px" /></p>
<ul>
<li>Add proxy profile. Provide a name for the profile under <strong>Enter name</strong>. Enter on of the proxies you have purchased from us as <strong>Proxy server IP</strong> and <code>60000</code> as <strong>Port</strong> if you are using username:password authentication method, and <code>65432</code> if you are using whitelisted IPs.</li>
</ul>
<p>Fill in your <strong>Username</strong> and <strong>Password</strong>. Finally, click <strong>Save changes</strong>. If you have whitelisted your IP, you don't need to do this step at all.</p>
<p><img loading="lazy" decoding="async" class="aligncenter wp-image-8079" src="https://www.proxysp.com/wp-content/uploads/2021/09/OxyLabs-Save-changes.png" alt="OxyLabs Save changes" width="829" height="383" srcset="https://proxysp.com/wp-content/uploads/2021/09/OxyLabs-Save-changes.png 963w, https://proxysp.com/wp-content/uploads/2021/09/OxyLabs-Save-changes-300x139.png 300w, https://proxysp.com/wp-content/uploads/2021/09/OxyLabs-Save-changes-768x355.png 768w" sizes="(max-width: 829px) 100vw, 829px" /></p>
<ul>
<li>Open the extension and click <strong>Connect</strong>. That's it, you are now using datacenter proxies.</li>
</ul>
<p><img loading="lazy" decoding="async" class="aligncenter size-full wp-image-8080" src="https://www.proxysp.com/wp-content/uploads/2021/09/OxyLabs-click-Connect.jpg" alt="OxyLabs click Connect" width="430" height="371" srcset="https://proxysp.com/wp-content/uploads/2021/09/OxyLabs-click-Connect.jpg 430w, https://proxysp.com/wp-content/uploads/2021/09/OxyLabs-click-Connect-300x259.jpg 300w" sizes="(max-width: 430px) 100vw, 430px" /></p>
<hr />
<h3 id="switchyomega">SwitchyOmega</h3>
<p>SwitchyOmega is a powerful and reliable proxy manager that works with many popular browsers. From our own experience, it is one of the best proxy plugins out there. We highly recommend using SwitchyOmega with our proxies. To do that, you will need to get the plugin. For Chrome, click <a class="custom_link" href="https://chrome.google.com/webstore/detail/proxy-switchyomega/padekgcemlokbadohgkifijomclgjgif?hl=en" target="_blank" rel="nofollow noopener">here</a>, for Firefox click <a class="custom_link" href="https://addons.mozilla.org/en-US/firefox/addon/switchyomega/" target="_blank" rel="nofollow noopener">here</a>. Once you have it installed, you should:</p>
<ul>
<li>Open Switchy Omega options.</li>
</ul>
<p><img loading="lazy" decoding="async" class="aligncenter size-full wp-image-8081" src="https://www.proxysp.com/wp-content/uploads/2021/09/OxyLabs-SwitchyOmega1.png" alt="OxyLabs SwitchyOmega1" width="195" height="230" /></p>
<ul>
<li>Click <strong>New profile&#8230;</strong></li>
</ul>
<p><img loading="lazy" decoding="async" class="aligncenter wp-image-8082" src="https://www.proxysp.com/wp-content/uploads/2021/09/OxyLabs-SwitchyOmega2.jpg" alt="OxyLabs SwitchyOmega2" width="537" height="461" srcset="https://proxysp.com/wp-content/uploads/2021/09/OxyLabs-SwitchyOmega2.jpg 579w, https://proxysp.com/wp-content/uploads/2021/09/OxyLabs-SwitchyOmega2-300x258.jpg 300w" sizes="(max-width: 537px) 100vw, 537px" /></p>
<ul>
<li>Give the new profile a name, choose <strong>Proxy Profile</strong> type and click <strong>Create</strong></li>
</ul>
<p><img loading="lazy" decoding="async" class="aligncenter wp-image-8083" src="https://www.proxysp.com/wp-content/uploads/2021/09/OxyLabs-SwitchyOmega3.jpg" alt="OxyLabs SwitchyOmega3" width="543" height="557" srcset="https://proxysp.com/wp-content/uploads/2021/09/OxyLabs-SwitchyOmega3.jpg 590w, https://proxysp.com/wp-content/uploads/2021/09/OxyLabs-SwitchyOmega3-293x300.jpg 293w" sizes="(max-width: 543px) 100vw, 543px" /></p>
<ul>
<li>Change <strong>Protocol</strong> to <strong>HTTP</strong>. Under <strong>Server</strong> enter one of the proxies you have purchased from us. Under <strong>Port</strong> add <code>60000</code> if you are using username:password authentication method, and <code>65432</code> if you are using whitelisted IPs.</li>
</ul>
<p><img loading="lazy" decoding="async" class="aligncenter wp-image-8084" src="https://www.proxysp.com/wp-content/uploads/2021/09/OxyLabs-SwitchyOmega4.jpg" alt="OxyLabs SwitchyOmega4" width="793" height="177" srcset="https://proxysp.com/wp-content/uploads/2021/09/OxyLabs-SwitchyOmega4.jpg 856w, https://proxysp.com/wp-content/uploads/2021/09/OxyLabs-SwitchyOmega4-300x67.jpg 300w, https://proxysp.com/wp-content/uploads/2021/09/OxyLabs-SwitchyOmega4-768x171.jpg 768w" sizes="(max-width: 793px) 100vw, 793px" /></p>
<ul>
<li>Next, click the lock button on the right. Fill in your <strong>Username</strong> and <strong>Password</strong>. Click <strong>Save changes</strong>.</li>
</ul>
<p>If you have whitelisted your IP, you don't need to do this step at all.</p>
<p><img loading="lazy" decoding="async" class="aligncenter size-full wp-image-8085" src="https://www.proxysp.com/wp-content/uploads/2021/09/OxyLabs-SwitchyOmega5.jpg" alt="OxyLabs SwitchyOmega5" width="297" height="230" /></p>
<ul>
<li>Click <strong>Apply changes</strong></li>
</ul>
<p><img loading="lazy" decoding="async" class="aligncenter size-full wp-image-8086" src="https://www.proxysp.com/wp-content/uploads/2021/09/OxyLabs-SwitchyOmega6.jpg" alt="OxyLabs SwitchyOmega6" width="378" height="380" srcset="https://proxysp.com/wp-content/uploads/2021/09/OxyLabs-SwitchyOmega6.jpg 378w, https://proxysp.com/wp-content/uploads/2021/09/OxyLabs-SwitchyOmega6-298x300.jpg 298w, https://proxysp.com/wp-content/uploads/2021/09/OxyLabs-SwitchyOmega6-150x150.jpg 150w" sizes="(max-width: 378px) 100vw, 378px" /></p>
<ul>
<li>For the final step, click on SwitchyOmega icon and choose your newly configured proxy. You are now ready to go!</li>
</ul>
<p><img loading="lazy" decoding="async" class="aligncenter size-full wp-image-8087" src="https://www.proxysp.com/wp-content/uploads/2021/09/OxyLabs-SwitchyOmega7.png" alt="OxyLabs SwitchyOmega7" width="198" height="255" /></p>
<hr />
<h3 id="foxyproxy">FoxyProxy</h3>
<p>FoxyProxy is a simple proxy manager that works with many popular browsers. First, you will need to get FoxyProxy. For Chrome, click <a class="custom_link" href="https://chrome.google.com/webstore/detail/foxyproxy-standard/gcknhkkoolaabfmlnjonogaaifnjlfnp?hl=en" target="_blank" rel="nofollow noopener">here</a>, for Firefox click <a class="custom_link" href="https://addons.mozilla.org/en-US/firefox/addon/foxyproxy-standard/" target="_blank" rel="nofollow noopener">here</a>. Once you have it installed, you should:</p>
<ul>
<li>Open FoxyProxy Options.</li>
<li>Click <strong>Add</strong>.</li>
<li>In <strong>IP address, DNS name, server name</strong> fields enter one of the proxies.</li>
<li>In <strong>Port</strong> field enter port. If you use user/pass authentication port is <code>60000</code>. If you have whitelisted your IP the port is <code>65432</code>.</li>
<li>In <strong>Username (optional)</strong> field you should enter your username. If you have whitelisted your IP, leave this field blank as the plugin will authorize through it and ignore everything you write in this field.</li>
<li>In <strong>Password (Optional)</strong> field you should enter your password. If you have whitelisted your IP and wish to authorise through it, leave this field blank.</li>
<li>After filling in all fields press <strong>Save</strong>.</li>
<li>In order to get all of your requests running through this setup, you must press on the FoxyProxy plugin icon (1) and click on <em>Use proxy Proxy for all URLs (ignore patterns)</em> (2).</li>
</ul>
<p>(1)</p>
<p><img loading="lazy" decoding="async" class="aligncenter size-full wp-image-8089" src="https://www.proxysp.com/wp-content/uploads/2021/09/OxyLabs-FoxyProxy1.jpg" alt="OxyLabs FoxyProxy1" width="421" height="326" srcset="https://proxysp.com/wp-content/uploads/2021/09/OxyLabs-FoxyProxy1.jpg 421w, https://proxysp.com/wp-content/uploads/2021/09/OxyLabs-FoxyProxy1-300x232.jpg 300w" sizes="(max-width: 421px) 100vw, 421px" /></p>
<p>(2)</p>
<p><img loading="lazy" decoding="async" class="aligncenter wp-image-8090" src="https://www.proxysp.com/wp-content/uploads/2021/09/OxyLabs-FoxyProxy2.png" alt="OxyLabs FoxyProxy2" width="851" height="436" srcset="https://proxysp.com/wp-content/uploads/2021/09/OxyLabs-FoxyProxy2.png 955w, https://proxysp.com/wp-content/uploads/2021/09/OxyLabs-FoxyProxy2-300x154.png 300w, https://proxysp.com/wp-content/uploads/2021/09/OxyLabs-FoxyProxy2-768x393.png 768w" sizes="(max-width: 851px) 100vw, 851px" /></p>
<ul>
<li>That is it, you are done!</li>
</ul>
<hr />
<h3 id="proxifier">Proxifier</h3>
<p>To use Datacenter Proxies with Proxfier, simply follow these steps:</p>
<ul>
<li>Open Proxifier app.</li>
<li>Add proxies. Click on <strong>Proxies (1)</strong>. Click <strong>Add(2)</strong>.</li>
</ul>
<p><img loading="lazy" decoding="async" class="aligncenter size-full wp-image-8091" src="https://www.proxysp.com/wp-content/uploads/2021/09/OxyLabs-Proxifier1.png" alt="OxyLabs Proxifier1" width="592" height="500" srcset="https://proxysp.com/wp-content/uploads/2021/09/OxyLabs-Proxifier1.png 592w, https://proxysp.com/wp-content/uploads/2021/09/OxyLabs-Proxifier1-300x253.png 300w" sizes="(max-width: 592px) 100vw, 592px" /></p>
<ul>
<li>In the following window, enter the required information. <strong>IP Address(1)</strong>, <strong>Port(2)</strong> which for the username/pass authentication is <code>60000</code> and for whitelisted IP authentication &#8211; <code>65432</code> , select <strong>HTTPS(3)</strong> protocol. In the authentication box click <strong>Enable(4)</strong> and enter provided <strong>Username(5)</strong> and <strong>Password(6)</strong>.</li>
</ul>
<p>Do not forget to add <code>customer-</code> at the beginning of the username. If you have whitelisted your devices, do not click on <strong>Enable</strong>, your authenticiation will be done without username/password. If you wish, you can enable <strong>Appear as Web Browser</strong> option. Click <strong>OK</strong>.</p>
<p><img loading="lazy" decoding="async" class="aligncenter size-full wp-image-8092" src="https://www.proxysp.com/wp-content/uploads/2021/09/OxyLabs-Proxifier2.png" alt="OxyLabs Proxifier2" width="468" height="510" srcset="https://proxysp.com/wp-content/uploads/2021/09/OxyLabs-Proxifier2.png 468w, https://proxysp.com/wp-content/uploads/2021/09/OxyLabs-Proxifier2-275x300.png 275w" sizes="(max-width: 468px) 100vw, 468px" /></p>
<ul>
<li>You will be asked <strong>Do you want Proxifier to use this proxy by default</strong>? This means that this setup will be used for all of your browsers. It is up to you to decide whether you want that or not. If you select <strong>Yes</strong>, you are done setting up. If you wish to use proxies just on a particular browser, follow these next steps.</li>
<li>Click on <strong>Rules(1)</strong> and then click <strong>Add&#8230;(2)</strong>.</li>
</ul>
<p><img loading="lazy" decoding="async" class="aligncenter size-full wp-image-8093" src="https://www.proxysp.com/wp-content/uploads/2021/09/OxyLabs-Proxifier3.png" alt="OxyLabs Proxifier3" width="846" height="461" srcset="https://proxysp.com/wp-content/uploads/2021/09/OxyLabs-Proxifier3.png 846w, https://proxysp.com/wp-content/uploads/2021/09/OxyLabs-Proxifier3-300x163.png 300w, https://proxysp.com/wp-content/uploads/2021/09/OxyLabs-Proxifier3-768x418.png 768w" sizes="(max-width: 846px) 100vw, 846px" /></p>
<ul>
<li>Click <strong>+(1)</strong> button to add applications that you want to use the proxy settings with. Select a browser that you want to use these proxy settings with and click on it. Finally, you have to change <strong>Action(2)</strong>. Click on it and select your created proxy.</li>
</ul>
<p><img loading="lazy" decoding="async" class="aligncenter size-full wp-image-8094" src="https://www.proxysp.com/wp-content/uploads/2021/09/OxyLabs-Proxifier4.png" alt="OxyLabs Proxifier4" width="527" height="543" srcset="https://proxysp.com/wp-content/uploads/2021/09/OxyLabs-Proxifier4.png 527w, https://proxysp.com/wp-content/uploads/2021/09/OxyLabs-Proxifier4-291x300.png 291w" sizes="(max-width: 527px) 100vw, 527px" /></p>
<ul>
<li>That is it. Now all of your requests (while using a browser) will be made via proxies.</li>
</ul>
<hr />
<h4>References</h4>
<p><a href="https://docs.oxylabs.io/dc/index.html#quick-start" target="_blank" rel="nofollow noopener">https://docs.oxylabs.io/dc/index.html</a></p>
<hr />
<p>&nbsp;</p>
<blockquote><p><strong>Disclaimer</strong>: This part of the content is mainly from the merchant. If the merchant does not want it to be displayed on my website, please <a href="https://www.proxysp.com/contact-us/">contact us</a> to delete your content.</p></blockquote>
<p>&nbsp;</p>
<pre></pre>
]]></content:encoded>
					
					<wfw:commentRss>https://proxysp.com/oxylabs-datacenter-proxies/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">7589</post-id>	</item>
		<item>
		<title>BlazingSEO Account &#038; Billing Issues: Learn Manuals Before You Buy</title>
		<link>https://proxysp.com/blazingseo-account-billing-issues/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=blazingseo-account-billing-issues</link>
					<comments>https://proxysp.com/blazingseo-account-billing-issues/#respond</comments>
		
		<dc:creator><![CDATA[admin]]></dc:creator>
		<pubDate>Thu, 01 Jan 1970 00:00:00 +0000</pubDate>
				<category><![CDATA[BlazingSEO Proxies]]></category>
		<guid isPermaLink="false">https://www.proxysp.com/?p=7709</guid>

					<description><![CDATA[If you have decided to purchase the Blaze SEO proxy, please check out the purchasing process and user manual. BlazingSEO Purchase Are There Any Discount Codes &#8230;<p class="read-more"> <a class="ast-button" href="https://proxysp.com/blazingseo-account-billing-issues/"> <span class="screen-reader-text">BlazingSEO Account &#038; Billing Issues: Learn Manuals Before You Buy</span> Read More &#187;</a></p>]]></description>
										<content:encoded><![CDATA[<blockquote><p>If you have decided to purchase the Blaze SEO proxy, please check out the purchasing process and user manual.</p></blockquote>
<h2>BlazingSEO Purchase</h2>
<h3 class="heading">Are There Any Discount Codes Available?</h3>
<p>We have the code<strong> BHW</strong> for 5% recurring on our proxies and <strong>5OFF </strong>for a 5 % recurring discount on our servers.</p>
<hr />
<h3 class="heading">What do I do If I Do Not Receive A Verification Code?</h3>
<p>If you are not receiving your verification code after signing up or after signing in from a new device, please contact our support team by <a href="support@blazingseollc.com" target="_blank" rel="nofollow noopener">email</a>.</p>
<hr />
<h3 class="heading">Why Are My Proxies Are Not Assigning?</h3>
<p>There may not be some locations available at this time. We highly recommend assigning your proxies to the &#8220;<strong>Mixed</strong>&#8221; location preference in your dashboard <a href="https://blazingseollc.com/proxy/dashboard/locations" target="_blank" rel="nofollow noopener">here</a>. Once the proxies are assigned to the respective &#8220;Mixed&#8221; location setting then the proxies will be provided to you. If for some reason they are not provided to you after selecting the &#8220;Mixed&#8221; location after 10 minutes please let us know right away.</p>
<hr />
<h3 class="heading">Why Are My Proxies Not Showing in My Dashboard or Are Blank?</h3>
<p>If you have purchased proxies, and find that there are blank areas where proxies should be in your proxy dashboard, then this means that you have selected a location that we may not have in stock currently.</p>
<p>In this case, you have a few options:</p>
<ol>
<li>You may wait up to 48+ hours, and we may receive more stock in, but it is not guaranteed.</li>
<li><strong>Recommended</strong> &#8211;  Change your proxy locations to <strong>Mixed</strong> under the Location Preferences tab in the proxy dashboard <a href="https://blazingseollc.com/proxy/dashboard/locations" target="_blank" rel="nofollow noopener">here</a>.</li>
</ol>
<ul>
<li>You should receive the proxy in about 10 minutes after changing the location to mixed, and saving.</li>
<li>Note: <em>Setting to Mixed location will provide better subnet diversity, which is the best thing to have when connecting to websites. You will spread across more ISPs, ASNs, and A+B+C class subnets.  </em></li>
</ul>
<hr />
<h3 class="heading">How Do I Purchase More Replacements?</h3>
<p>We currently offer one free proxy replacement, per proxy, per 30 days. So if one of your proxies is not working to a site you using the proxies on, then you may use one of your replacements.</p>
<p>If you have used all your replacements, then you will receive more than 30 days from the day that you used the replacements. So if you used the replacements 15 days into your 30 day billing period, then you will receive the new replacements 15 days into your next 30 day billing period.</p>
<p>If you would not like to wait for this, you are able to purchase additional replacements. Currently, you will need to speak with our support team and they will be able to assist you in completing this process at the link.</p>
<p>We will be implementing a client friendly way of doing this soon.</p>
<hr />
<h2>BlazingSEO Account</h2>
<h3 class="heading">What do I do After I Complete the Purchase Process?</h3>
<p>After you have completed the purchase, to access your proxies, follow the instructions below:</p>
<p>1. Please login your account <a href="https://billing.blazingseollc.com/hosting/clientarea.php" target="_blank" rel="nofollow noopener">here</a>. You may also follow the below video guide on how to access your client area too</p>
<div class="su-youtube su-u-responsive-media-yes"><iframe loading="lazy" width="600" height="400" src="https://www.youtube.com/embed/XJoHmvKvfNM?" frameborder="0" allowfullscreen allow="autoplay; encrypted-media; picture-in-picture" title=""></iframe></div>
<p>2.  After logging in, you may access your proxies <a href="http://blazingseollc.com/proxy/dashboard/" target="_blank" rel="nofollow noopener">here</a>. You may also use the Shortcuts link found on the bottom left corner of, &#8220;<strong>Log In To Proxy Dashboard</strong>&#8220;, to login to your proxy dashboard as well.</p>
<p>If this is your first time logging in, you will need to assign your proxy's location in, and after saving your assigned proxy's locations, your proxies will appear on your proxy dashboard.</p>
<p>Make sure you authorize your computer's IP address prior to usage, so that your proxies will grant usage access to the IP that you authorize. You may follow this video guide on how to do just that: How to authorize your IP address for proxies:</p>
<div class="su-youtube su-u-responsive-media-yes"><iframe loading="lazy" width="600" height="400" src="https://www.youtube.com/embed/SxRB6Pq_esI?" frameborder="0" allowfullscreen allow="autoplay; encrypted-media; picture-in-picture" title=""></iframe></div>
<hr />
<h3 class="heading">Can You Tell Me How to Login to My Dashboard and Manage My Account?</h3>
<p>This article highlights <strong>Login </strong>Areas, and<strong> Account Managemen</strong>t locations for your account.</p>
<p><strong>Login Option 1 &#8211; <a href="https://billing.blazingseollc.com/hosting/clientarea.php" target="_blank" rel="nofollow noopener"><em>Control Panel</em></a></strong><em> </em></p>
<p>Proxy Dashboard Login (found under Shortcuts&gt;&#8221;Log In to Proxy Dashboard&#8221;)</p>
<ul>
<li><span dir="ltr"><em><a dir="ltr" href="https://billing.blazingseollc.com/hosting/clientarea.php?action=services" target="_blank" rel="nofollow noopener">To Manage Your Services</a></em>, </span></li>
<li><em><a href="https://billing.blazingseollc.com/hosting/clientarea.php?action=invoices" target="_blank" rel="nofollow noopener">Pay / Download Invoices</a></em><em>, </em></li>
<li><em><a href="https://billing.blazingseollc.com/hosting/clientarea.php?action=changepw" target="_blank" rel="nofollow noopener">Change Account Password</a></em></li>
<li><em><a href="https://billing.blazingseollc.com/hosting/clientarea.php?action=details" target="_blank" rel="nofollow noopener">Update Billing Information / Address</a></em></li>
</ul>
<p>Please login using your registered email address and the password you've set during registration. If you have forgotten your password, please use &#8220;<a href="https://billing.blazingseollc.com/hosting/pwreset.php" target="_blank" rel="nofollow noopener"><em>Forgot Password?</em></a>&#8221; to reset your password.</p>
<hr />
<p><strong>Login Option 2 &#8211; <a href="http://blazingseollc.com/proxy/dashboard/" target="_blank" rel="nofollow noopener"><em>Proxy Dashboard</em></a></strong><em> </em></p>
<p>To View and Administer Your Proxies, Authorize Your IP Addresses, Set Authorization Type (IP Authorization or Username/Password Authorization),</p>
<ul>
<li><span dir="ltr"><em><a dir="ltr" href="https://blazingseollc.com/proxy/checkout/upgrade" target="_blank" rel="nofollow noopener">Upgrade A Proxy Subscription</a></em></span></li>
<li><em><a href="https://blazingseollc.com/proxy/checkout/buy" target="_blank" rel="nofollow noopener">Purchase A New Proxy Subscription</a></em></li>
<li><span dir="ltr"><em><a href="http://blazingseollc.com/proxy/dashboard/replace" target="_blank" rel="noopener">Replace Proxies</a>, <a href="http://blazingseollc.com/proxy/dashboard/locations" target="_blank" rel="nofollow noopener">Proxy Location Settings</a> </em></span></li>
<li><span dir="ltr"><a href="http://blazingseollc.com/proxy/dashboard/settings" target="_blank" rel="nofollow noopener"><em>Proxy Settings</em></a></span></li>
</ul>
<p>Please login using your registered email address and the password you've set during registration.</p>
<hr />
<h3 class="heading">How do I Reset or Change My Password?</h3>
<p>If you would like to change your account password, you may do so at <a href="https://billing.blazingseollc.com/hosting/clientarea.php?action=changepw" target="_blank" rel="nofollow noopener">this link</a>.</p>
<hr />
<h3 class="heading">How do I Remove a Cancellation Request?</h3>
<p>If you have accidentally requested cancellation for your respective subscription you can remove it through your client area. Please follow the steps below on how to remove your cancellation request.</p>
<p>1. Login to your client area</p>
<p style="font-size: 16px; font-style: normal; font-weight: 400;"><img loading="lazy" decoding="async" class="aligncenter wp-image-8055" src="https://www.proxysp.com/wp-content/uploads/2021/09/remove-a-cancellation-request1.jpg" alt="remove a cancellation request1" width="464" height="279" srcset="https://proxysp.com/wp-content/uploads/2021/09/remove-a-cancellation-request1.jpg 512w, https://proxysp.com/wp-content/uploads/2021/09/remove-a-cancellation-request1-300x180.jpg 300w" sizes="(max-width: 464px) 100vw, 464px" /></p>
<p>&nbsp;</p>
<p>2. Then proceed to your activ<span style="font-size: 16px;">e service(s) that you request a cancellation for</span></p>
<p>&nbsp;</p>
<p><img loading="lazy" decoding="async" class="aligncenter size-full wp-image-8056" src="https://www.proxysp.com/wp-content/uploads/2021/09/remove-a-cancellation-request2.jpg" alt="remove a cancellation request2" width="478" height="164" srcset="https://proxysp.com/wp-content/uploads/2021/09/remove-a-cancellation-request2.jpg 478w, https://proxysp.com/wp-content/uploads/2021/09/remove-a-cancellation-request2-300x103.jpg 300w" sizes="(max-width: 478px) 100vw, 478px" /></p>
<p>3. From there you will select &#8220;Continue billing&#8221;</p>
<p><img loading="lazy" decoding="async" class="aligncenter wp-image-8057" src="https://www.proxysp.com/wp-content/uploads/2021/09/remove-a-cancellation-request3.jpg" alt="remove a cancellation request3" width="303" height="437" srcset="https://proxysp.com/wp-content/uploads/2021/09/remove-a-cancellation-request3.jpg 353w, https://proxysp.com/wp-content/uploads/2021/09/remove-a-cancellation-request3-208x300.jpg 208w" sizes="(max-width: 303px) 100vw, 303px" /></p>
<p>4. Next select &#8220;Ok&#8221; after this window shows</p>
<p><img loading="lazy" decoding="async" class="aligncenter wp-image-8058" src="https://www.proxysp.com/wp-content/uploads/2021/09/remove-a-cancellation-request4.jpg" alt="remove a cancellation request4" width="506" height="212" srcset="https://proxysp.com/wp-content/uploads/2021/09/remove-a-cancellation-request4.jpg 669w, https://proxysp.com/wp-content/uploads/2021/09/remove-a-cancellation-request4-300x126.jpg 300w" sizes="(max-width: 506px) 100vw, 506px" /></p>
<hr />
<h2 data-wpview-marker="https%3A%2F%2Fportal.blazingseollc.com%2Fen%2Fsupport%2Fsolutions%2Farticles%2F64000256665-what-do-i-do-after-i-complete-the-purchase-process-%3Cbr%3Ehttps%3A%2F%2Fportal.blazingseollc.com%2Fen%2Fsupport%2Fsolutions%2Farticles%2F64000256605-can-you-tell-me-how-to-login-to-my-dashboard-and-manage-my-account-%3Cbr%3Ehttps%3A%2F%2Fportal.blazingseollc.com%2Fen%2Fsupport%2Fsolutions%2Farticles%2F64000256664-how-do-i-reset-or-change-my-password-%3Cbr%3Ehttps%3A%2F%2Fportal.blazingseollc.com%2Fen%2Fsupport%2Fsolutions%2Farticles%2F64000256662-how-do-i-remove-a-cancellation-request-">BlazingSEO Refund & Cancel</h2>
<h3 class="heading">Does Blazing SEO Process Refunds?</h3>
<p>Blazing SEO does not guarantee refunds for lack of usage or dissatisfaction with the Services. The refund policies can also be referred to in their <a href="https://rayobyte.com/tos-and-aup/" target="_blank" rel="nofollow noopener">TOS and AUP</a>.</p>
<p><strong>Trial Refunds</strong></p>
<p><span dir="ltr">We offer a 2 day trial for our products so that you are able to test our proxies for your specific use-case prior to purchasing. If you find that the proxies do not work for you purpose, you can <a href="support@blazingseo.com" target="_blank" rel="nofollow noopener">contact</a> and request a refund.</span></p>
<p><span dir="ltr">Once you pass the two-day trial period you can continue to use them and they will automatically renew monthly until you cancel. If you believe you are entitled to a refund due to a special circumstance, you can submit a refund request but we do not guarantee refunds to any individual.</span></p>
<p><strong>3/6/12 month Refunds</strong></p>
<p>If you have purchased a 3/6/12 month service with us, then please contact our support for details on refunds.</p>
<hr />
<h3 class="heading">How Do I Cancel a Proxy Trial?</h3>
<p>If you would like to cancel your proxy trial service, and not renew, you will need to request a refund and your service will be cancelled at that time. We do offer two day trials and we encourage you to use those two days to fully test the proxies for your use case.  Refunds can be processed if you notify us within the first two days of sign up.  If you decide that particular type of proxy may not meet your needs but there is another type you'd like to purchase, our support team can work with you to determine the best type of proxy to recommend based on your use case.  If you have questions, please <a href="support@blazingseo.com" target="_blank" rel="nofollow noopener">email</a>.</p>
<hr />
<h3 class="heading">How Do I Cancel My Service?</h3>
<p>Video on how to cancel:</p>
<div class="su-youtube su-u-responsive-media-yes"><iframe loading="lazy" width="600" height="400" src="https://www.youtube.com/embed/PsScsw9_lnw?" frameborder="0" allowfullscreen allow="autoplay; encrypted-media; picture-in-picture" title=""></iframe></div>
<p>Text instructions:</p>
<p>1. Access your Client Area.</p>
<p><img loading="lazy" decoding="async" class="aligncenter wp-image-8059" src="https://www.proxysp.com/wp-content/uploads/2021/09/cancel-my-service1.jpg" alt="cancel my service1" width="394" height="237" srcset="https://proxysp.com/wp-content/uploads/2021/09/cancel-my-service1.jpg 505w, https://proxysp.com/wp-content/uploads/2021/09/cancel-my-service1-300x181.jpg 300w" sizes="(max-width: 394px) 100vw, 394px" /></p>
<p>2. You will then select the active service you want to cancel.</p>
<p><img loading="lazy" decoding="async" class="aligncenter wp-image-8060" src="https://www.proxysp.com/wp-content/uploads/2021/09/cancel-my-service2.jpg" alt="cancel my service2" width="597" height="376" srcset="https://proxysp.com/wp-content/uploads/2021/09/cancel-my-service2.jpg 794w, https://proxysp.com/wp-content/uploads/2021/09/cancel-my-service2-300x189.jpg 300w, https://proxysp.com/wp-content/uploads/2021/09/cancel-my-service2-768x484.jpg 768w" sizes="(max-width: 597px) 100vw, 597px" /></p>
<p>3. Select &#8216;Request Cancellation'.</p>
<p><img loading="lazy" decoding="async" class="aligncenter wp-image-8061" src="https://www.proxysp.com/wp-content/uploads/2021/09/cancel-my-service3.jpg" alt="cancel my service3" width="616" height="319" srcset="https://proxysp.com/wp-content/uploads/2021/09/cancel-my-service3.jpg 966w, https://proxysp.com/wp-content/uploads/2021/09/cancel-my-service3-300x155.jpg 300w, https://proxysp.com/wp-content/uploads/2021/09/cancel-my-service3-768x398.jpg 768w" sizes="(max-width: 616px) 100vw, 616px" /></p>
<p>4. Enter a reason for the cancellation, then click the final Cancellation button.</p>
<p><img loading="lazy" decoding="async" class="aligncenter wp-image-8062" src="https://www.proxysp.com/wp-content/uploads/2021/09/cancel-my-service4.jpg" alt="cancel my service4" width="662" height="341" srcset="https://proxysp.com/wp-content/uploads/2021/09/cancel-my-service4.jpg 971w, https://proxysp.com/wp-content/uploads/2021/09/cancel-my-service4-300x154.jpg 300w, https://proxysp.com/wp-content/uploads/2021/09/cancel-my-service4-768x395.jpg 768w" sizes="(max-width: 662px) 100vw, 662px" /></p>
<p>This cancellation request will ensure that your service is cancelled at the end of the 30 day period of the service, and that you will not be charged again for the service.</p>
<p><em>*Please double check and make sure all of your payment subscription are cancelled through PayPal. You may cancel your recurring subscription payment profile in your PayPal account by following this guide <a href="https://www.paypal.com/li/smarthelp/article/how-do-i-cancel-a-recurring-payment,-subscription,-or-automatic-billing-agreement-i-have-with-a-merchant-faq1067" target="_blank" rel="noopener">here.</a></em></p>
<p><em>Please make sure your subscription is properly cancelled in PayPal, in order to prevent PayPal from automatically sending payment on your behalf for renewal.</em></p>
<hr />
<div>
<h4 id="references" class="ftwp-heading">References,</h4>
</div>
<ul>
<li><a href="https://portal.blazingseollc.com/en/support/solutions/articles/64000256658-are-there-any-discount-codes-available" target="_blank" rel="nofollow noopener">https://portal.blazingseollc.com/en/support/solutions/articles/64000256658-are-there-any-discount-codes-available</a></li>
<li><a href="https://portal.blazingseollc.com/en/support/solutions/articles/64000256674-what-do-i-do-if-i-do-not-receive-a-verification-code" target="_blank" rel="nofollow noopener">https://portal.blazingseollc.com/en/support/solutions/articles/64000256674-what-do-i-do-if-i-do-not-receive-a-verification-code</a></li>
<li><a href="https://portal.blazingseollc.com/en/support/solutions/articles/64000256634-why-are-my-proxies-are-not-assigning" target="_blank" rel="nofollow noopener">https://portal.blazingseollc.com/en/support/solutions/articles/64000256634-why-are-my-proxies-are-not-assigning</a></li>
<li><a href="https://portal.blazingseollc.com/en/support/solutions/articles/64000256616-why-are-my-proxies-not-showing-in-my-dashboard-or-are-blank" target="_blank" rel="nofollow noopener">https://portal.blazingseollc.com/en/support/solutions/articles/64000256616-why-are-my-proxies-not-showing-in-my-dashboard-or-are-blank</a></li>
<li><a href="https://portal.blazingseollc.com/en/support/solutions/articles/64000256619-how-do-i-purchase-more-replacements-" target="_blank" rel="nofollow noopener">https://portal.blazingseollc.com/en/support/solutions/articles/64000256619-how-do-i-purchase-more-replacements-</a></li>
<li><a href="https://portal.blazingseollc.com/en/support/solutions/articles/64000256665-what-do-i-do-after-i-complete-the-purchase-process" target="_blank" rel="nofollow noopener">https://portal.blazingseollc.com/en/support/solutions/articles/64000256665-what-do-i-do-after-i-complete-the-purchase-process</a></li>
<li><a href="https://portal.blazingseollc.com/en/support/solutions/articles/64000256605-can-you-tell-me-how-to-login-to-my-dashboard-and-manage-my-account" target="_blank" rel="nofollow noopener">https://portal.blazingseollc.com/en/support/solutions/articles/64000256605-can-you-tell-me-how-to-login-to-my-dashboard-and-manage-my-account</a></li>
<li><a href="https://portal.blazingseollc.com/en/support/solutions/articles/64000256664-how-do-i-reset-or-change-my-password" target="_blank" rel="nofollow noopener">https://portal.blazingseollc.com/en/support/solutions/articles/64000256664-how-do-i-reset-or-change-my-password</a></li>
<li><a href="https://portal.blazingseollc.com/en/support/solutions/articles/64000256662-how-do-i-remove-a-cancellation-request-" target="_blank" rel="nofollow noopener">https://portal.blazingseollc.com/en/support/solutions/articles/64000256662-how-do-i-remove-a-cancellation-request-</a></li>
<li><a href="https://portal.blazingseollc.com/en/support/solutions/articles/64000256660-does-blazing-seo-process-refunds" target="_blank" rel="nofollow noopener">https://portal.blazingseollc.com/en/support/solutions/articles/64000256660-does-blazing-seo-process-refunds</a></li>
<li><a href="https://portal.blazingseollc.com/en/support/solutions/articles/64000256670-how-do-i-cancel-a-proxy-trial" target="_blank" rel="nofollow noopener">https://portal.blazingseollc.com/en/support/solutions/articles/64000256670-how-do-i-cancel-a-proxy-trial</a></li>
<li><a href="https://portal.blazingseollc.com/en/support/solutions/articles/64000256659-how-do-i-cancel-my-service-" target="_blank" rel="nofollow noopener">https://portal.blazingseollc.com/en/support/solutions/articles/64000256659-how-do-i-cancel-my-service-</a></li>
</ul>
<hr />
<blockquote><p><strong>Disclaimer</strong>: This part of the content is mainly from the merchant. If the merchant does not want it to be displayed on my website, please <a href="https://www.proxysp.com/contact-us/">contact us</a> to delete your content.</p></blockquote>
]]></content:encoded>
					
					<wfw:commentRss>https://proxysp.com/blazingseo-account-billing-issues/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">7709</post-id>	</item>
		<item>
		<title>How to Use OxyLabs Proxy [Part 3]: OxyLabs Next-Gen Residential Proxies</title>
		<link>https://proxysp.com/oxylabs-next-gen-residential-proxies/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=oxylabs-next-gen-residential-proxies</link>
					<comments>https://proxysp.com/oxylabs-next-gen-residential-proxies/#respond</comments>
		
		<dc:creator><![CDATA[admin]]></dc:creator>
		<pubDate>Thu, 01 Jan 1970 00:00:00 +0000</pubDate>
				<category><![CDATA[How to Use OxyLabs Proxy (OxyLabs User Manual Navigation)]]></category>
		<guid isPermaLink="false">https://www.proxysp.com/?p=7622</guid>

					<description><![CDATA[Did you heard of the Next-Gen Residential Proxies by Oxylabs? This article will show you how to use it in detail. Quick Start Next-Gen Residential Proxies &#8230;<p class="read-more"> <a class="ast-button" href="https://proxysp.com/oxylabs-next-gen-residential-proxies/"> <span class="screen-reader-text">How to Use OxyLabs Proxy [Part 3]: OxyLabs Next-Gen Residential Proxies</span> Read More &#187;</a></p>]]></description>
										<content:encoded><![CDATA[<blockquote><p>Did you heard of the Next-Gen Residential Proxies by Oxylabs? This article will show you how to use it in detail.</p></blockquote>
<h2 id="quick-start">Quick Start</h2>
<p>Next-Gen Residential Proxies are built for heavy-duty data retrieval operations. They enable effortless web data extraction without any delays or errors. The product is as customizable as a regular proxy, but at the same time it guarantees a much higher success rate. Custom headers and IP stickiness are both supported, alongside reusable cookies and POST requests.</p>
<p>If you have ever used regular proxies for data scraping, integrating Next-Gen Residential Proxies will be a breeze. The only difference is that we require to accept our certificate, or ignore it altogether with <code>-k</code> or <code>--insecure</code> cURL flags (or an equivalent expression in the language of your choice).</p>
<p>To make a request using Next-Gen Residential Proxies, we need to use <code>ngrp.oxylabs.io:60000</code> endpoint. Below is an example in cURL. You can find code samples in other languages <a href="#making-requests">here</a> or full code examples on our <a class="custom_link" href="https://github.com/oxylabs/product-integrations/tree/master/next-gen-residential-proxies" target="_blank" rel="nofollow noopener">GitHub</a>.</p>
<pre>curl -k -x ngrp.oxylabs.io:60000 -U "USERNAME:PASSWORD" http://ip.oxylabs.io
</pre>
<p>If you have any questions not covered by this documentation, please contact your account manager or our support staff at <a class="custom_link" href="mailto:support@oxylabs.io" target="_blank" rel="nofollow noopener">support@oxylabs.io</a>.</p>
<hr />
<h2 id="making-requests">Making requests</h2>
<pre>GET ngrp.oxylabs.io:60000
</pre>
<p>The easiest way to start is to send us a simple query without any custom options. We will add all standard headers on our end, pick the fastest proxy and deliver you the response body.</p>
<p>To utilize desired functionalities of Next-Gen Residential Proxies such as setting up proxy geolocation or reusing the same IP via session control, we need to send additional headers with the request.</p>
<p>Here's the full list of supported functionalities and headers:</p>
<p><span class="test">Query parameters</span></p>
<div class="su-table su-table-responsive su-table-alternate">
<table>
<thead>
<tr>
<th>Parameter</th>
<th>Description</th>
<th></th>
</tr>
</thead>
<tbody>
<tr>
<td><code>X-Oxylabs-Session-Id</code></td>
<td>If you need to reuse the same IP for multiple requests, add a session ID which can be a random string of characters</td>
<td></td>
</tr>
<tr>
<td><code>X-Oxylabs-Geo-Location</code></td>
<td>To use an IP address from a specific location, specify a country of or a city, for example <code>Germany</code>. Supported geo-locations can be found <a class="custom_link" href="https://docs.oxylabs.io/resources/universal-supported-geo_location-values.csv" target="_blank" rel="noopener">here</a>.</td>
<td></td>
</tr>
<tr>
<td><code>Headers</code></td>
<td>You can add your own headers such as <code>User-Agent</code>, or any other, insted of using pre-generated ones.</td>
<td></td>
</tr>
<tr>
<td><code>Cookies</code></td>
<td>You can add your own cookies, for example <code>Cookie: NID=1234567890</code>, to your requests.</td>
<td></td>
</tr>
<tr>
<td><code>X-Oxylabs-Status-Code</code></td>
<td>In case your target returns a custom status code with a successful response, you can send the status code of the response and our system will not retry the request.</td>
<td></td>
</tr>
<tr>
<td><code>X-Oxylabs-Render</code></td>
<td>If you wish to render JavaScript use <code>html</code> to get a rendered HTML or <code>png</code> to get a screenshot of the page.</td>
<td></td>
</tr>
<tr>
<td><code>X-Oxylabs-Parser-Type</code></td>
<td>This header can be used to select parser type. Currently <code>ecommerce-product</code> is supported.</td>
<td></td>
</tr>
<tr>
<td><code>X-Oxylabs-Parse</code></td>
<td>THe headers is used to to parse the data from the website. Value <code>1</code> must pe passed to enable parsing.</td>
</tr>
</tbody>
</table>
</div>
<pre>curl -k -v -x ngrp.oxylabs.io:60000 -U user:pass1 "https://ip.oxylabs.io"
</pre>
<hr />
<h3 id="session">Session</h3>
<p>If you want to use the same proxy to make multiple requests, you can do that by adding the <code>X-Oxylabs-Session-Id</code> header with a randomly-generated string for the session ID. We will assign a proxy to this ID and keep it for up to 10 minutes. After that a new proxy will be assigned to that particular session ID.</p>
<pre>curl -k -v -x ngrp.oxylabs.io:60000 -U user:pass1 "https://ip.oxylabs.io" -H "X-Oxylabs-Session-Id: 123randomString"
</pre>
<hr />
<h3 id="geo-location">Geo-Location</h3>
<p>Some websites will not serve content if accessed from unsupported geo-locations. You can specify in your request which country you want to access the target from. Just add the <code>X-Oxylabs-Geo-Location</code> header with the value set to a country name, for example, <code>Germany</code> for Germany or <code>United States</code> for the United States.</p>
<p>Next-Gen Residential Proxies also support city-level targeting. If you want to add a city, simply add the city name before the country, e.g,: <code>Munich, Germany</code>.</p>
<p>The full list of supported geo-location parameter values can be found <a class="custom_link" href="https://docs.oxylabs.io/resources/universal-supported-geo_location-values.csv" target="_blank" rel="noopener">here</a>.</p>
<pre>curl -k -v -x ngrp.oxylabs.io:60000 -U user:pass1 "https://ip.oxylabs.io" -H "X-Oxylabs-Geo-Location: Munich,Germany"
</pre>
<hr />
<h3 id="headers">Headers</h3>
<p>If you know more than we do about a particular target, you can add your own headers to your request. It can be both standard headers, such as <code>User-Agent</code> or <code>Accept-Language</code>, and something completely custom and target-specific.</p>
<pre>curl -k -v -x ngrp.oxylabs.io:60000 -U user:pass1 "https://ip.oxylabs.io" -H "Your-Custom-Header: interesting header content" -H "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Ubuntu Chromium/73.0.3683.86 Chrome/73.0.3683.86 Safari/537.36" -H "Accept-Language: en-US"
</pre>
<hr />
<h3 id="cookies">Cookies</h3>
<p>The system also allows setting custom cookies to target website. With your initial request we will return all response headers and cookies. You can modify them on your end and send them back to our system with the next request. It may be a good idea to reuse the cookies if you use the same IP address to make a few consecutive requests (see <a href="#session">Session</a> for more)</p>
<pre>curl -k -v -x ngrp.oxylabs.io:60000 -U user:pass1 "https://ip.oxylabs.io" -H "Cookie: NID=1234567890; 1P_JAR=0987654321"
</pre>
<hr />
<h3 id="custom-status-code">Custom Status Code</h3>
<p>By default we assume that the request is successful as long as it returns a 2xx or a 4xx status code. However, sometimes websites return the required content together with a non-standard HTTPS status code. If one of your targets does that, you can indicate which status codes are acceptable and actually valuable for you. Simply add <code>X-Oxylabs-Status-Code</code> header with all HTTP response codes that actually work for you. Please note that 2xx and 4xx will still be automatically marked as successful.</p>
<pre>curl -k -v -x ngrp.oxylabs.io:60000 -U user:pass1 "https://ip.oxylabs.io" -H "X-Oxylabs-Status-Code: 500,501,502,503" 
</pre>
<hr />
<h3 id="post-requests">POST Requests</h3>
<p>Next-Gen Residential Proxies don't only support sending <code>GET</code> requests, but also let you <code>POST</code> to a web endpoint of your choice. This means that you can send data to a target website, which can then make the website return a different result.</p>
<pre>curl -X POST -k -v -x ngrp.oxylabs.io:60000 -U user:pass1 "https://ip.oxylabs.io" -d "@/path/to/file.json"
</pre>
<hr />
<h3 id="javascript-rendering">JavaScript rendering</h3>
<p>Enable JavaScript rendering. Use when the target requires JavaScript to load content. There are two available values for this parameter: <code>html</code> (get raw output) and <code>png</code> (get a Base64-encoded screenshot).</p>
<pre>curl -k -v -x ngrp.oxylabs.io:60000 -U user:pass1 "https://ip.oxylabs.io" -H "X-Oxylabs-Render: html"
</pre>
<hr />
<h3 id="adaptive-parsing">Adaptive parsing</h3>
<p>Adaptive parsing is capable of parsing the most important fields from any e-commerce product page. To enable adaptive parsing for e-commerce product pages it is required to send two additional headers: <code>X-Oxylabs-Parser-Type: ecommerce_product</code> to select the parser type and <code>X-Oxylabs-Parse: 1</code> to parse the retrieved page.</p>
<p>Fields that can be parsed by Next-Gen Residential Proxies Adaptive Parsing for e-commerce product pages:</p>
<ul>
<li>Title</li>
<li>Regular price</li>
<li>Offer price</li>
<li>Currency</li>
<li>Product description</li>
<li>Product IDs</li>
<li>Image URLs</li>
<li>URLs from the page</li>
</ul>
<pre>curl -v -k -x ngrp.oxylabs.io:60000 -U user:pass1 "https://ip.oxylabs.io" -H "X-Oxylabs-Parser-Type: ecommerce_product" -H "X-Oxylabs-Parse: 1"
</pre>
<p>Sample output:</p>
<pre>{
    "results": [
        {
            "content": {
                "url": "https://ip.oxylabs.io/product/product_example.html",
                "body": {
                    "price": 11.99,
                    "title": "Example product title",
                    "currency": "$",
                    "old_price": 15.99,
                    "description": null,
                    "image_links": [
                        "https://ip.oxylabs.io/img/product_example.png"
                    ],
                    "ids_from_url": [],
                    "simple_links": [
                        {
                            "link": "https://ip.oxylabs.io/product/another_example.html",
                            "description": "Another product example"
                        }
                    ],
                    "ids_from_html": [
                        {
                            "Product number": "14158288"
                        }
                    ],
                    "price_range_lower": null,
                    "price_range_upper": null
                },
                "meta": {
                    "title": "Example product meta title",
                    "keywords": [],
                    "description": "Example product description"
                },
                "parse_status_code": 12000
            },
            "created_at": "2020-01-01 10:00:00",
            "updated_at": "2020-01-01 10:00:07",
            "id": 29964797,
            "page": 1,
            "url": "https://ip.oxylabs.io/product/product_example.html",
            "job_id": "6699272813062145025",
            "status_code": 200
        }
    ]
}
</pre>
<hr />
<h2 id="usage-statistics">Usage Statistics</h2>
<p>You can find your usage statistics by visiting our <a class="custom_link" href="https://client-monitor.oxylabs.io/v1/dashboard" target="_blank" rel="nofollow noopener">Dashboard</a> or by querying the following endpoint:</p>
<pre>GET https://data.oxylabs.io/v1/stats
</pre>
<p>By default the API will return all time usage statistics. Adding <code>?group_by=month</code> will return monthly stats, while <code>?group_by=day</code> will return daily numbers. Traffic is being displayed in bytes.</p>
<p>his query will return all time statistics. You can find your daily and monthly usage by adding either <code>?group_by=day</code> or <code>?group_by=month</code>. Traffic is being displayed in bytes.</p>
<pre>curl --user user:pass1 'https://data.oxylabs.io/v1/stats'
</pre>
<p>Sample output:</p>
<pre>{
    "meta": {
        "group_by": null,
        "date_from": null,
        "date_to": null,
        "source": null
    },
    "data": {
        "sources": [
            {
                "results_count_all": "1482",
                "results_count": "0",
                "realtime_results_count": "0",
                "super_api_results_count": "12777",
                "render": "0",
                "geo_location": "0",
                "average_response_time": 2.18,
                "request_traffic": "6629", 
                "response_traffic": "17850",
                "title": "universal"
            }
        ]
    }
}
</pre>
<hr />
<h2 id="sample-response">Sample Response</h2>
<p>This is what the response looks like. To see headers and cookies, Verbose mode must be enabled.</p>
<pre>HTTP/1.1 200 OK
X-Job-Id: 1234567890123456
X-Session-Id: 123randomString
cf-cache-status: DYNAMIC
cf-ray: 55c2ab837eddcba8-VIE
content-encoding: gzip
content-length: 72657
content-type: text/html
date: Tue, 1 Jan 2020 00:00:01 GMT,expect-ct: max-age=604800,report-uri="https://report-uri.cloudflare.com/cdn-cgi/beacon/expect-ct"
last-modified: Tue, 1 Dec 2020 00:00:00 GMT
server: cloudflare
status: 200
strict-transport-security: max-age=31536000
X-DNS-Prefetch-Control: off
Set-Cookie: NID=1234567890; expires=Wed, 29-Jul-2020 10:56:21 GMT
Set-Cookie: 1P_JAR=0987654321; expires=Wed, 29-Jul-2020 10:56:21 GMT
x-cache: MISS from localhost
x-cache-lookup: MISS from localhost:3129content here
</pre>
<p>&nbsp;</p>
<hr />
<h4>References</h4>
<p><a href="https://docs.oxylabs.io/next-gen-residential-proxies/index.html#quick-start" target="_blank" rel="nofollow noopener">https://docs.oxylabs.io/next-gen-residential-proxies/index.html#quick-start</a></p>
<hr />
<blockquote><p><strong>Disclaimer:</strong> This part of the content is mainly from the merchant. If the merchant does not want it to be displayed on my website, please <a href="https://www.proxysp.com/contact-us/">contact us</a> to delete your content.</p></blockquote>
]]></content:encoded>
					
					<wfw:commentRss>https://proxysp.com/oxylabs-next-gen-residential-proxies/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">7622</post-id>	</item>
		<item>
		<title>Sneaker Proxies (By BlazingSEO) : Learn Manuals Before You Buy</title>
		<link>https://proxysp.com/sneaker-proxies-blazingseo/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=sneaker-proxies-blazingseo</link>
					<comments>https://proxysp.com/sneaker-proxies-blazingseo/#respond</comments>
		
		<dc:creator><![CDATA[admin]]></dc:creator>
		<pubDate>Thu, 01 Jan 1970 00:00:00 +0000</pubDate>
				<category><![CDATA[BlazingSEO Proxies]]></category>
		<guid isPermaLink="false">https://www.proxysp.com/?p=7736</guid>

					<description><![CDATA[How much do you know about Blazing SEO's sneaker prxoies? Before you purchase, please read this detailed manuals! What Are Sneaker Proxies? A sneaker proxy is &#8230;<p class="read-more"> <a class="ast-button" href="https://proxysp.com/sneaker-proxies-blazingseo/"> <span class="screen-reader-text">Sneaker Proxies (By BlazingSEO) : Learn Manuals Before You Buy</span> Read More &#187;</a></p>]]></description>
										<content:encoded><![CDATA[<blockquote><p>How much do you know about Blazing SEO's sneaker prxoies? Before you purchase, please read this detailed manuals!</p></blockquote>
<h2 class="heading">What Are Sneaker Proxies?</h2>
<p>A sneaker proxy is a dedicated proxy that allows for customers who are looking to purchase a limited shoe to be able to do so through the sneaker sites.</p>
<p>Typically users will purchase as many <a href="https://www.proxysp.com/best-sneaker-proxies/" target="_blank" rel="noopener">sneaker proxies</a> as their budget allows, a VPS, and a bot. However, these 3 components are not necessarily required. In theory, they could try using their home computer and try going to the shoe site normally purchase. Their chances might not be as great though, because they would only be using one IP (their home IP).</p>
<p>For the best chance at success, users need multiple sneaker proxies, and a sneaker server, which we provide. The server is in the same datacenter as the website server and proxies, allowing for the absolute fastest connection to the footsites. Giving the best chance to cop sneakers. Also, the more proxies you have, the less chance that the footsite will block all the proxies, and in a result, you have a much greater chance of getting the shoes you want.</p>
<h3><strong>Advantages:</strong></h3>
<ul>
<li>The proxy is only used by you (not shared).</li>
<li>Can be used with shoe servers for fastest possible speeds</li>
<li>In same datacenters as shoe site servers.</li>
<li>Higher speed since no one else is working with the same proxy.</li>
<li>Ability to bypass filters and firewalls since a private proxy server can circumvent these types of blocked websites.</li>
<li>Protect privacy for minimal worry about your personal information being exposed or compromised when you make purchases or surf on the web.</li>
<li>Deliver a higher level of security on the internet since a private proxy provides a unique internet address dedicated to only you.</li>
</ul>
<p>These proxies are best used for account use because the proxy never changes (Unless you would like the proxies to change).</p>
<h3><strong>Locations:</strong></h3>
<p>USA</p>
<hr />
<h2 class="heading">What Is the Difference Between Dedicated Proxies and Sneaker Proxies?</h2>
<p>What is the difference between our USA Dedicated proxies and our sneaker proxies? A lot &#8212; if you're a sneaker buyer.</p>
<p>Dedicated proxies DO allow you to choose your &#8220;location&#8221; after purchasing, however, what most people do not realize is that the location is the GEOLOCATION, not the HOSTED LOCATION of the proxy. The geolocation is an arbitrary location to appear as if you're from somewhere you're not, but your proxies will be located all around the USA in various datacenters.</p>
<p>Sneaker proxies allow you to choose the HOSTED LOCATION after purchasing: either LA or NY. This allows you to select the city that is CLOSEST to your server/computer. Having a proxy server closest to your server is the ideal situation for the fastest speeds possible.</p>
<hr />
<div class="icon">
<div class="icon">
<h2 class="heading">How Many Tasks Can I Run on a Blazing Server?</h2>
<p>If you are using one of our servers then you might want to know how many tasks you can run on your server.</p>
<p>We recommend following the guide below.</p>
<p><strong>RAM/CORES</strong></p>
<p>2GB/2Core = 15 task</p>
<p>4GB/4Core = 25 task</p>
<p>6GB/6Core = 50 task</p>
<p>8GB/8Core = 70 task</p>
<p>10GB/10Core = 85 task</p>
<p>14GB/14Core = 100 task</p>
<p>18GB /18Core = 130 task</p>
<p>24GB/24Core = 160 task</p>
<ul>
<li><em>Running more tasks than recommended could cause the server to freeze, slow down, and the <a href="https://www.proxysp.com/best-sneaker-bot/" target="_blank" rel="noopener">bots</a> will not run properly.</em></li>
</ul>
<hr />
<h2 class="heading">What Are the Proxy Speeds for Sneaker Purchases?</h2>
<p>A lot of questions have come up this week about our proxy speeds. The answer I've typed out 100 times has not changed from customer to customer, so I am writing here to explain why your speeds in your software do not reflect our proxy speeds, but rather your server speeds (and if you're on a home computer, then you're in for some slowwww speeds&#8230;)</p>
<p>In any connection to a website through a proxy, the networking process goes as followed:</p>
<p>server (or home computer)  -&gt;  proxy server  -&gt;  website  -&gt;  proxy server  -&gt;  server</p>
<p>This gets your data sent to the website, and awaits the reply from the website.</p>
<p>Now imagine you having a server that is located in Florida, or even worse, a home computer that has 50 Mbps speed (most home internet does). If you're connecting from Florida, to a proxy server located in LA, then have to wait for that reply back after the website returns the data to the proxy server &#8212; you're looking at TWO cross-country (3000+ miles each way) trips to get the connection closed.</p>
<p>In no near future will you be able to have 100ms or fewer speeds when you're connecting to another server 3000 miles away.</p>
<p>This is why I discredit ANY speed tests anyone performs on our proxies because it is solely dependent on their server's speed (it must match our proxy speeds which are 1 Gbps), and their server's locations. <strong>The ideal situation for sneaker buying is having a server located in the same datacenter as the proxies, which we offer at <a href="http://shoeservers.com/" target="_blank" rel="noopener">http://shoeservers.com/</a>.</strong> This makes the distance from server to proxy, and back, almost 0, which only leaves the latency to/from the website.</p>
<hr />
<h2 class="heading">How do I Prevent My IP from Being Banned?</h2>
<p>There are some websites that have higher site security than most sites. Especially sneaker sites. It is very important that you use proxies that support whatever site you attempt to access. Proxies will allow you to navigate your way around site security much better while hiding your real IP.</p>
<p>You can check out our proxy packages here <a href="https://blazingseollc.com/proxy/purchase/" rel="noreferrer noopener" target="_blank">https://blazingseollc.com/proxy/purchase/</a> Please keep in mind that none of our dedicated, semi-dedicated, and rotating proxies do not support any sneaker sites.</p>
<hr />
<h2 class="heading">Why Is My AIO Proxy Tester Showing that a Connection Timed out?</h2>
<p>When the AIO proxy tester is used to test it shows a timeout. This is <strong>NOT TESTING CORRECTLY</strong><strong>.</strong>  The AIO proxy tester is testing our proxies in a way that is <strong>incompatible with our proxies</strong> and shows a timeout error.</p>
<p>Essentially, the AIO proxy tester performs testing in a way that is incompatible with our proxies so we ask that you <strong>run the test below</strong> to verify they are working properly.</p>
<p><strong>HOW TO RUN A VALID TEST IN AIO WITH OUR PROXIES</strong></p>
<p>Follow these instructions to <strong>run a valid test</strong> to show our proxies working in AIO.</p>
<p>To test our proxies properly you must <strong>load the proxies into AIO and create a task</strong>. Please <strong>do not use</strong> the builtin proxy tester. Pick a sneaker site (example: Footlocker) and create a task to cart some shoes using our proxies. Simply start the task so that you can see the AIO bot working with the proxies to access sneaker sites.</p>
<ol>
<li>Create a <strong>simple task</strong> to access a site like Footlocker as a Guest and use the only criteria as <strong>size 10</strong></li>
<li>Start the task so that you can <strong>see the AIO bot working</strong> with the proxies to access sneaker sites</li>
</ol>
<p>You may also manually test the proxies in the browser to the websites by following these videos:</p>
<p>Test manually in<strong> Firefox</strong>:</p>
<div class="su-youtube su-u-responsive-media-yes"><iframe loading="lazy" width="600" height="400" src="https://www.youtube.com/embed/xLFvR2TDzGo?" frameborder="0" allowfullscreen allow="autoplay; encrypted-media; picture-in-picture" title=""></iframe></div>
<p>Test manually in <strong>Chrome</strong>:</p>
<div class="su-youtube su-u-responsive-media-yes"><iframe loading="lazy" width="600" height="400" src="https://www.youtube.com/embed/HQIqu85KE4Y?" frameborder="0" allowfullscreen allow="autoplay; encrypted-media; picture-in-picture" title=""></iframe></div>
<p>If you continue to have issues please open a support ticket so that we can assist further.</p>
<hr />
<h2 class="heading">Which Proxies Work for Shoe or Foot sites?</h2>
<p>Our dedicated/semi-dedicated/rotating proxies DO NOT support shoe sites/foot sites, as it is not supported. If you do use dedicated/semi-dedicated/rotating proxies to access foot sites, most likely you will see a blank screen or a looping loading/connecting screen that is blank, which indicates that it is most likely blocked by the foot site.</p>
<p>On the other hand, our special dedicated SHOE PROXIES are special proxies that are specifically purposed and optimized for shoe sites instead. Only shoe proxies will provide you access to foot sites.</p>
<hr />
</div>
</div>
<div>
<h4 id="references" class="ftwp-heading">References,</h4>
</div>
<ul>
<li><a href="https://portal.blazingseollc.com/en/support/solutions/articles/64000256618-what-are-sneaker-proxies" target="_blank" rel="nofollow noopener">https://portal.blazingseollc.com/en/support/solutions/articles/64000256618-what-are-sneaker-proxies</a></li>
<li><a href="https://portal.blazingseollc.com/en/support/solutions/articles/64000256675-what-is-the-difference-between-dedicated-proxies-and-sneaker-proxies" target="_blank" rel="nofollow noopener">https://portal.blazingseollc.com/en/support/solutions/articles/64000256675-what-is-the-difference-between-dedicated-proxies-and-sneaker-proxies</a></li>
<li><a href="https://portal.blazingseollc.com/en/support/solutions/articles/64000256676-how-many-tasks-can-i-run-on-a-blazing-server" target="_blank" rel="nofollow noopener">https://portal.blazingseollc.com/en/support/solutions/articles/64000256676-how-many-tasks-can-i-run-on-a-blazing-server</a></li>
<li><a href="https://portal.blazingseollc.com/en/support/solutions/articles/64000256677-what-are-the-proxy-speeds-for-sneaker-purchases" target="_blank" rel="nofollow noopener">https://portal.blazingseollc.com/en/support/solutions/articles/64000256677-what-are-the-proxy-speeds-for-sneaker-purchases</a></li>
<li><a href="https://portal.blazingseollc.com/en/support/solutions/articles/64000256678-how-do-i-prevent-my-ip-from-being-banned-" target="_blank" rel="nofollow noopener">https://portal.blazingseollc.com/en/support/solutions/articles/64000256678-how-do-i-prevent-my-ip-from-being-banned-</a></li>
<li><a href="https://portal.blazingseollc.com/en/support/solutions/articles/64000256635-why-is-my-aio-proxy-tester-showing-that-a-connection-timed-out" target="_blank" rel="nofollow noopener">https://portal.blazingseollc.com/en/support/solutions/articles/64000256635-why-is-my-aio-proxy-tester-showing-that-a-connection-timed-out</a></li>
<li><a href="https://portal.blazingseollc.com/en/support/solutions/articles/64000263274-which-proxies-work-for-shoe-or-foot-sites-" target="_blank" rel="nofollow noopener">https://portal.blazingseollc.com/en/support/solutions/articles/64000263274-which-proxies-work-for-shoe-or-foot-sites-</a></li>
</ul>
<hr />
<blockquote><p><strong>Disclaimer</strong>: This part of the content is mainly from the merchant. If the merchant does not want it to be displayed on my website, please <a href="https://www.proxysp.com/contact-us/">contact us</a> to delete your content.</p></blockquote>
]]></content:encoded>
					
					<wfw:commentRss>https://proxysp.com/sneaker-proxies-blazingseo/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">7736</post-id>	</item>
		<item>
		<title>How to Use OxyLabs Real-Time Crawler [Part 1]: Real-Time Crawler for Google</title>
		<link>https://proxysp.com/oxylabs-real-time-crawler/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=oxylabs-real-time-crawler</link>
					<comments>https://proxysp.com/oxylabs-real-time-crawler/#respond</comments>
		
		<dc:creator><![CDATA[admin]]></dc:creator>
		<pubDate>Thu, 01 Jan 1970 00:00:00 +0000</pubDate>
				<category><![CDATA[How to Use OxyLabs Proxy (OxyLabs User Manual Navigation)]]></category>
		<guid isPermaLink="false">https://www.proxysp.com/?p=7623</guid>

					<description><![CDATA[Do you know how to use OxyLabs Real-time Crawler for Google? This is the most comprehensive introduction from OxyLabs official. Quick Start Real-Time Crawler is built &#8230;<p class="read-more"> <a class="ast-button" href="https://proxysp.com/oxylabs-real-time-crawler/"> <span class="screen-reader-text">How to Use OxyLabs Real-Time Crawler [Part 1]: Real-Time Crawler for Google</span> Read More &#187;</a></p>]]></description>
										<content:encoded><![CDATA[<blockquote>
<p class="src grammarSection" data-group="1-1">Do you know how to use OxyLabs Real-time Crawler for Google? This is the most comprehensive introduction from OxyLabs official.</p>
</blockquote>
<h2 id="quick-start">Quick Start</h2>
<p>Real-Time Crawler is built for heavy-duty data retrieval operations. You can use Real-Time Crawler to access various Google pages, including regular search, hotel availability and Google Shopping. It enables effortless web data extraction from search engines without any delays or errors.</p>
<p>Real-Time Crawler for Google uses <a class="custom_link" href="https://en.wikipedia.org/wiki/Basic_access_authentication" target="_blank" rel="nofollow noopener">basic HTTP authentication</a> that requires sending username and password.</p>
<p>This is by far the fastest way to start using Real-Time Crawler for Google. You will send a query <code>adidas</code> to <code>google_search</code> using <a href="#realtime">Realtime</a> integration method. Don't forget to replace <code>USERNAME</code> and <code>PASSWORD</code> with your proxy user credentials.</p>
<pre>curl --user "USERNAME:PASSWORD" 'https://realtime.oxylabs.io/v1/queries' -H "Content-Type: application/json" -d '{"source": "google_search", "domain": "com", "query": "adidas"}'
</pre>
<p>If you have any questions not covered by this documentation, please contact your account manager or our support staff at <a class="custom_link" href="mailto:support@oxylabs.io" target="_blank" rel="nofollow noopener">support@oxylabs.io</a>.</p>
<hr />
<h2 id="postman">Postman</h2>
<p>Download and import <a class="custom_link" href="https://docs.oxylabs.io/resources/Real-Time%20Crawler%20-%20Google.postman_collection.json" target="_blank" rel="noopener">this Postman collection </a>to try out all of the Google crawler functions and data delivery methods documented on this page.</p>
<p><img loading="lazy" decoding="async" class="aligncenter size-full wp-image-8201" src="https://www.proxysp.com/wp-content/uploads/2021/09/Real-Time-Crawler-for-Google-Postman.png" alt="Real-Time Crawler for Google Postman" width="296" height="442" srcset="https://proxysp.com/wp-content/uploads/2021/09/Real-Time-Crawler-for-Google-Postman.png 296w, https://proxysp.com/wp-content/uploads/2021/09/Real-Time-Crawler-for-Google-Postman-201x300.png 201w" sizes="(max-width: 296px) 100vw, 296px" /></p>
<hr />
<h2 id="integration-methods">Integration Methods</h2>
<p>Real-Time Crawler for Google supports three integration methods which have their unique benefits:</p>
<ul>
<li><a href="#push-pull">Push-Pull</a>. Using this method it is now required to mainain an active connection with our endpoint to retrieve the data. Upon making a request, our system is able to automatically ping users server when the job is done (see <a href="#callback">Callback</a>). This method saves computing resources and can be scaled easily.</li>
<li><a href="#realtime">Realtime</a>. The method requires user to maintain an active connection with our endpoint in order to get the results successfully when the job is completed. This method can be implemented into one service while Push-Pull method is a two step process.</li>
<li><a href="#superapi">SuperAPI</a>. This method is very similar to Realtime but instead posting data to our endpoint, user can use HTML Cralwer as a proxy. To retrieve the data, user must set up a proxy endpoint and make GET request to a desired URL. Additional parameters must be added using headers.</li>
</ul>
<p>Our recommended data extraction method is <a href="#push-pull">Push-Pull</a>.</p>
<hr />
<h3 id="push-pull">Push-Pull</h3>
<p>This is the most simple yet the most reliable and recommended data delivery method. In Push-Pull scenario you send us a query, we return you job <code>id</code>, and once the job is done you can use that <code>id</code> to retrieve content from <code>/results</code> endpoint. You can check job completion status yourself, or you can set up a simple listener that is able to accept POST queries. This way we will send you a callback message once the job is ready to be retrieved. In this particular example the results will be automatically <a href="#upload-to-storage">uploaded to your S3 bucket</a> named <code>YOUR_BUCKET_NAME</code>.</p>
<p>You can also try and see how Push-Pull method works via Postman. Download <a class="custom_link" href="https://docs.oxylabs.io/resources/Real-Time%20Crawler%20-%20Google.postman_collection.json" target="_blank" rel="noopener">this file</a> to get started.</p>
<hr />
<h4><strong>Single Query</strong></h4>
<p>The following endpoint will handle single queries for one keyword or URL. The API will return a confirmation message containing job information, including job <code>id</code>. You can check job completion status using that <code>id</code>, or you can ask us to ping your callback endpoint once the scraping task is finished by adding <code>callback_url</code> in the query.</p>
<pre>POST https://data.oxylabs.io/v1/queries
</pre>
<p>You need to post query parameters as data in JSON body.</p>
<pre>curl --user user:pass1 'https://data.oxylabs.io/v1/queries' -H "Content-Type: application/json" 
 -d '{"source": "google_search", "domain": "com", "query": "adidas", "callback_url": "https://your.callback.url", "storage_type": "s3", "storage_url": "YOUR_BUCKET_NAME"}'
</pre>
<p>The API will respond with query information in JSON format, by printing it in response body, similar to this:</p>
<pre>{
  "callback_url": "https://your.callback.url",
  "client_id": 5,
  "context": [
    {
      "key": "results_language",
      "value": null
    },
    {
      "key": "safe_search",
      "value": null
    },
    {
      "key": "tbm",
      "value": null
    },
    {
      "key": "cr",
      "value": null
    },
    {
      "key": "filter",
      "value": null
    }
  ],
  "created_at": "2019-10-01 00:00:01",
  "domain": "com",
  "geo_location": null,
  "id": "12345678900987654321",
  "limit": 10,
  "locale": null,
  "pages": 1,
  "parse": false,
  "render": null,
  "query": "adidas",
  "source": "google_search",
  "start_page": 1,
  "status": "pending",
  "storage_type": "s3",
  "storage_url": "YOUR_BUCKET_NAME/12345678900987654321.json",
  "subdomain": "www",
  "updated_at": "2019-10-01 00:00:01",
  "user_agent_type": "desktop",
  "_links": [
    {
      "rel": "self",
      "href": "http://data.oxylabs.io/v1/queries/12345678900987654321",
      "method": "GET"
    },
    {
      "rel": "results",
      "href": "http://data.oxylabs.io/v1/queries/12345678900987654321/results",
      "method": "GET"
    }
  ]
}
</pre>
<h4 id="check-job-status"><strong>Check Job Status</strong></h4>
<p>If your query had <code>callback_url</code>, we will send you a message containing link to content once the scraping task is done. However, if there was no <code>callback_url</code> in the query, you will need to check job status yourself. For that you need to use the URL in <code>href</code> under <code>rel</code>:<code>self</code> in the response message you received after submitting your query to our API. It should look similar to this: <code>http://data.oxylabs.io/v1/queries/12345678900987654321</code>.</p>
<pre>GET https://data.oxylabs.io/v1/queries/{id}
</pre>
<p>Querying this link will return job information, including its <code>status</code>. There are 3 possible <code>status</code> values:</p>
<div class="su-table su-table-responsive su-table-alternate">
<table>
<tbody>
<tr>
<td><code>pending</code></td>
<td>The job is still in the queue and has not been completed.</td>
</tr>
<tr>
<td><code>done</code></td>
<td>The job is completed, you may retrieve the result by querying the URL in <code>href</code> under <code>rel</code>:<code>results</code> : <code>http://data.oxylabs.io/v1/queries/12345678900987654321/results</code></td>
</tr>
<tr>
<td><code>faulted</code></td>
<td>There was an issue with the job and we couldn't complete it, most likely due to a server error on the target site's side.</td>
</tr>
</tbody>
</table>
</div>
<pre>curl --user user:pass1 'http://data.oxylabs.io/v1/queries/12345678900987654321'
</pre>
<p>The API will respond with query information in JSON format, by printing it in response body. Notice that job <code>status</code> has been changed to <code>done</code>. You can now retrieve content by querying <code>http://data.oxylabs.io/v1/queries/12345678900987654321/results</code>.</p>
<p>You can also see that the task has been <code>updated_at</code> <code>2019-10-01 00:00:15</code> &#8211; the query took 14 seconds to complete.</p>
<pre>{
  "client_id": 5,
  "context": [
    {
      "key": "results_language",
      "value": null
    },
    {
      "key": "safe_search",
      "value": null
    },
    {
      "key": "tbm",
      "value": null
    },
    {
      "key": "cr",
      "value": null
    },
    {
      "key": "filter",
      "value": null
    }
  ],
  "created_at": "2019-10-01 00:00:01",
  "domain": "com",
  "geo_location": null,
  "id": "12345678900987654321",
  "limit": 10,
  "locale": null,
  "pages": 1,
  "parse": false,
  "render": null,
  "query": "adidas",
  "source": "google_search",
  "start_page": 1,
  "status": "done",
  "subdomain": "www",
  "updated_at": "2019-10-01 00:00:15",
  "user_agent_type": "desktop",
  "_links": [
    {
      "rel": "self",
      "href": "http://data.oxylabs.io/v1/queries/12345678900987654321",
      "method": "GET"
    },
    {
      "rel": "results",
      "href": "http://data.oxylabs.io/v1/queries/12345678900987654321/results",
      "method": "GET"
    }
  ]
}
</pre>
<hr />
<h4 id="retrieve-job-content"><strong>Retrieve Job Content</strong></h4>
<p>Once you know the job is ready to retrieved either by checking its status or receiving a callback from us, you can GET it using the URL in <code>href</code> under <code>rel</code>:<code>results</code> in either our initial response or in callback message. It should look similar to this: <code>http://data.oxylabs.io/v1/queries/12345678900987654321/results</code>.</p>
<pre>GET https://data.oxylabs.io/v1/queries/{id}/results
</pre>
<p>The results can be automatically retrieved without periodically checking job status by setting up <a href="#callback">Callback</a> service. User needs to specfy the IP or domain of the server where the Callback service is running. When our system completes a job, it will send a message to the provided IP or domain and the Callback service will download the results as described in the <a href="#callback">Callback implementation example</a>.</p>
<pre>curl --user user:pass1 'http://data.oxylabs.io/v1/queries/12345678900987654321/results'
</pre>
<p>The API will return job content:</p>
<pre>{
  "results": [
    {
      "content": "&lt;!doctype html&gt;
        CONTENT      
      ",
      "created_at": "2019-10-01 00:00:01",
      "updated_at": "2019-10-01 00:00:15",
      "page": 1,
      "url": "https://www.google.com/search?q=adidas&hl=en&gl=US",
      "job_id": "12345678900987654321",
      "status_code": 200
    }
  ]
}
</pre>
<hr />
<h4 id="callback"><strong>Callback</strong></h4>
<p>A callback is a <code>POST</code> request we send to your machine, informing that the data extraction task is completed and providing URL to download scraped content. This means that you no longer need to <a href="#check-job-status">check job status</a> manually. Once the data is here, we will let you know, and all you need to do now is <a href="#retrieve-job-content">retrieve it</a>.</p>
<pre># Please see code samples in Python and PHP.
</pre>
<p>Sample callback output</p>
<pre>{  
   "created_at":"2019-10-01 00:00:01",
   "updated_at":"2019-10-01 00:00:15",
   "locale":null,
   "client_id":163,
   "user_agent_type":"desktop",
   "source":"google_search",
   "pages":1,
   "subdomain":"www",
   "status":"done",
   "start_page":1,
   "parse":0,
   "render":null,
   "priority":0,
   "ttl":0,
   "origin":"api",
   "persist":true,
   "id":"12345678900987654321",
   "callback_url":"http://your.callback.url/",
   "query":"adidas",
   "domain":"com",
   "limit":10,
   "geo_location":null,
   {...}
   "_links":[
      {  
         "href":"https://data.oxylabs.io/v1/queries/12345678900987654321",
         "method":"GET",
         "rel":"self"
      },
      {  
         "href":"https://data.oxylabs.io/v1/queries/12345678900987654321/results",
         "method":"GET",
         "rel":"results"
      }
   ],
}
</pre>
<hr />
<h4 id="batch-query"><strong>Batch Query</strong></h4>
<p>Real-Time Crawler also supports executing multiple keywords, up to 1,000 keywords with each batch. The following endpoint will submit multiple keywords to the extraction queue.</p>
<pre>POST https://data.oxylabs.io/v1/queries/batch
</pre>
<p>You need to post query parameters as data in JSON body.</p>
<p>The system will handle every keyword as a separate request. If you provided callback URL, you will get a separate call for each keyword. Otherwise, our initial response will contain job <code>id</code>s for all keywords. For example, if you sent 50 keywords, we will return 50 unique job <code>id</code>s.</p>
<p>Important! <code>query</code> is the only parameter that can have multiple values. All other parameters are the same for that batch query.</p>
<pre>curl --user user:pass1 'https://data.oxylabs.io/v1/queries/batch' -H 'Content-Type: application/json'
 -d '@keywords.json'
</pre>
<p><code>keywords.json</code> content:</p>
<pre>{  
   "query":[  
      "adidas",
      "nike",
      "reebok"
   ],
   "source": "google_search",
   "domain": "com",
   "callback_url": "https://your.callback.url"
}
</pre>
<p>The API will respond with query information in JSON format, by printing it in response body, similar to this:</p>
<pre>{
  "queries": [
    {
      "callback_url": "https://your.callback.url",
      {...}
      "created_at": "2019-10-01 00:00:01",
      "domain": "com",
      "id": "12345678900987654321",
      {...}
      "query": "adidas",
      "source": "google_search",
      {...}
          "rel": "results",
          "href": "http://data.oxylabs.io/v1/queries/12345678900987654321/results",
          "method": "GET"
        }
      ]
    },
    {
      "callback_url": "https://your.callback.url",
      {...}
      "created_at": "2019-10-01 00:00:01",
      "domain": "com",
      "id": "12345678901234567890",
      {...}
      "query": "nike",
      "source": "google_search",
      {...}
          "rel": "results",
          "href": "http://data.oxylabs.io/v1/queries/12345678901234567890/results",
          "method": "GET"
        }
      ]
    },
    {
      "callback_url": "https://your.callback.url",
      {...}
      "created_at": "2019-10-01 00:00:01",
      "domain": "com",
      "id": "01234567899876543210",
      {...}
      "query": "reebok",
      "source": "google_search",
      {...}
          "rel": "results",
          "href": "http://data.oxylabs.io/v1/queries/01234567899876543210/results",
          "method": "GET"
        }
      ]
    }
  ]
}
</pre>
<hr />
<h4 id="get-notifier-ip-address-list"><strong>Get Notifier IP Address List</strong></h4>
<p>You may want to whitelist the IPs sending you callback messages or get the list of these IPs for other purposes. This can be done by <code>GET</code>ing this endpoint: <code>https://data.oxylabs.io/v1/info/callbacker_ips</code>.</p>
<pre>curl --user user:pass1 'https://data.oxylabs.io/v1/info/callbacker_ips'
</pre>
<p>The API will return the list of IPs making callback requests to your system:</p>
<pre>{
    "ips": [
        "x.x.x.x",
        "y.y.y.y"
    ]
}
</pre>
<hr />
<h4 id="upload-to-storage"><strong>Upload to Storage</strong></h4>
<p>By default RTC job results are stored in our databases. This means that you will need to query our results endpoint and retrieve content yourself. Custom storage feature allows you to store results in your own cloud storage. The advantage of this feature is that you don't have to make extra requests in order to fetch results &#8211; everything goes directly to your storage bucket.</p>
<p>We support Amazon S3 and Google Cloud Storage. If you would like to use a different type of storage, please contact your account manager to discuss the feature delivery timeline.</p>
<p id="amazon-s3"><strong>Amazon S3</strong></p>
<p>To get your job results uploaded to your Amazon S3 bucket, please set up access permissions for our service. To do that, go to <code>https://s3.console.aws.amazon.com/ &gt; S3 &gt; Storage &gt; Bucket Name (if don't have one, create new) &gt; Permissions &gt; Bucket Policy</code></p>
<p><img loading="lazy" decoding="async" class="aligncenter size-full wp-image-8202" src="https://www.proxysp.com/wp-content/uploads/2021/09/Real-Time-Crawler-for-Google-Upload-to-Storage1.png" alt="Real-Time Crawler for Google Upload to Storage1" width="478" height="324" srcset="https://proxysp.com/wp-content/uploads/2021/09/Real-Time-Crawler-for-Google-Upload-to-Storage1.png 478w, https://proxysp.com/wp-content/uploads/2021/09/Real-Time-Crawler-for-Google-Upload-to-Storage1-300x203.png 300w" sizes="(max-width: 478px) 100vw, 478px" /></p>
<p>You can find bucket policy in this <a class="custom_link" href="https://docs.oxylabs.io/resources/s3_bucket_policy.json" target="_blank" rel="noopener">JSON</a> or in code sample area on the right. Don't forget to change bucket name under <code>YOUR_BUCKET_NAME</code>. This policy allows us to write to your bucket, give access to uploaded files to you, and know bucket location.</p>
<p id="google-cloud-storage"><strong>Google Cloud Storage</strong></p>
<p>To get your job results uploaded to your Google Cloud Storage bucket, please set up special permissions for our service. To do that, please create a custom role with the <code>storage.objects.create</code> permission and assign it to the Oxylabs service account email <code>oxyserps-storage@oxyserps-storage.iam.gserviceaccount.com</code>.</p>
<p><img loading="lazy" decoding="async" class="aligncenter size-full wp-image-8203" src="https://www.proxysp.com/wp-content/uploads/2021/09/Real-Time-Crawler-for-Google-Upload-to-Storage2.png" alt="Real-Time Crawler for Google Upload to Storage2" width="480" height="305" srcset="https://proxysp.com/wp-content/uploads/2021/09/Real-Time-Crawler-for-Google-Upload-to-Storage2.png 480w, https://proxysp.com/wp-content/uploads/2021/09/Real-Time-Crawler-for-Google-Upload-to-Storage2-300x191.png 300w" sizes="(max-width: 480px) 100vw, 480px" /></p>
<p><img loading="lazy" decoding="async" class="aligncenter size-full wp-image-8204" src="https://www.proxysp.com/wp-content/uploads/2021/09/Real-Time-Crawler-for-Google-Upload-to-Storage3.png" alt="Real-Time Crawler for Google Upload to Storage3" width="483" height="667" srcset="https://proxysp.com/wp-content/uploads/2021/09/Real-Time-Crawler-for-Google-Upload-to-Storage3.png 483w, https://proxysp.com/wp-content/uploads/2021/09/Real-Time-Crawler-for-Google-Upload-to-Storage3-217x300.png 217w" sizes="(max-width: 483px) 100vw, 483px" /></p>
<p id="usage"><strong>Usage</strong></p>
<p>To use this feature, please specify two additional parameters in your requests. Learn more <a href="#direct">here</a>.</p>
<p>The upload path looks like this: <code>YOUR_BUCKET_NAME/job_ID.json</code>. You will find job ID in response body that you receive from us after submitting a request. In <a href="#single-query">this example</a> job ID is <code>12345678900987654321</code>.</p>
<pre>{
    "Version": "2012-10-17",
    "Id": "Policy1577442634787",
    "Statement": [
        {
            "Sid": "Stmt1577442633719",
            "Effect": "Allow",
            "Principal": {
                "AWS": "arn:aws:iam::324311890426:user/oxylabs.s3.uploader"
            },
            "Action": "s3:GetBucketLocation",
            "Resource": "arn:aws:s3:::YOUR_BUCKET_NAME"
        },
        {
            "Sid": "Stmt1577442633719",
            "Effect": "Allow",
            "Principal": {
                "AWS": "arn:aws:iam::324311890426:user/oxylabs.s3.uploader"
            },
            "Action": [
                "s3:PutObject",
                "s3:PutObjectAcl"
            ],
            "Resource": "arn:aws:s3:::YOUR_BUCKET_NAME/*"
        }
    ]
}
</pre>
<hr />
<h3 id="realtime">Realtime</h3>
<p>The data submission is the same as in Push-Pull method, but Realtime case we will return the content on open connection. You send us a query, the connection remains open, we retrieve the content and bring it to you. The endpoint that handles that is this:</p>
<pre>POST https://realtime.oxylabs.io/v1/queries
</pre>
<p>There is a timeout limit of 150 seconds for open connections, therefore in rare cases of heavy load we may not be able to ensure the data gets to you.</p>
<p>You need to post query parameters as data in JSON body. Please see example for more details.</p>
<pre>curl --user user:pass1 'https://realtime.oxylabs.io/v1/queries' -H "Content-Type: application/json" 
 -d '{"source": "google_search", "domain": "com", "query": "adidas"}'
</pre>
<p>Example response body that will be returned on open connection:</p>
<pre>{
  "results": [
    {
      "content": "
      CONTENT
      "
      "created_at": "2019-10-01 00:00:01",
      "updated_at": "2019-10-01 00:00:15",
      "id": null,
      "page": 1,
      "url": "https://www.google.com/search?q=adidas&hl=en&gl=US",
      "job_id": "12345678900987654321",
      "status_code": 200
    }
  ]
}
</pre>
<hr />
<h3 id="superapi">SuperAPI</h3>
<p>If you ever used regular proxies for data scraping, integrating SuperAPI delivery method will be a breeze. All that needs to be done is to use our entry node as proxy, authorize with Real-Time Crawler credentials, and ignore certificates. In <code>cURL</code> it's <code>-k</code> or <code>--insecure</code>. Your data will reach you on open connection.</p>
<pre>GET realtime.oxylabs.io:60000
</pre>
<p>SuperAPI only supports a handful of parameters since it <strong>only works with a <a href="#direct">Direct</a> data source</strong> where full URL is provided. These parameters should be sent as headers. This is a list of accepted parameters:</p>
<div class="su-table su-table-responsive su-table-alternate">
<table>
<tbody>
<tr>
<td><code>X-OxySERPs-User-Agent-Type</code></td>
<td>There is no way to indicate a specific User-Agent, but you can let us know which browser and platform to use. A list of supported User-Agents can be found <a href="#user-agent">here</a>.</td>
</tr>
<tr>
<td><code>X-OxySERPs-Geo-Location</code></td>
<td>In some cases you may need to indicate the geographical location that the result should be adapted for. This parameter corresponds to the <code>geo_location</code>. Read about our suggested <code>geo_location</code> parameter structures <a href="#geo_location">here</a>.</td>
</tr>
</tbody>
</table>
</div>
<p>If you need help setting up SuperAPI, drop a line at <a class="custom_link" href="mailto:support@oxylabs.io" target="_blank" rel="nofollow noopener">support@oxylabs.io</a>.</p>
<pre>curl -k -x realtime.oxylabs.io:60000 -U user:pass1 -H "X-OxySERPs-User-Agent-Type: desktop_chrome" -H "X-OxySERPs-Geo-Location: New York,New York,United States" "https://www.google.com/search?q=adidas"
</pre>
<hr />
<h2 id="content-type">Content Type</h2>
<p>Real-Time Crawler can return either <strong>raw HTML</strong>, or <strong>structured (parsed) JSON</strong>. Bear in mind that not all data sources can be returned structured. An icon under each data source in this documentation will indicate whether we are able to parse it, or we can only return raw HTML.</p>
<p>Please see <a href="#parsed-data">Parsed Data</a> to see which fields we return with each Data Source.</p>
<hr />
<h2 id="data-sources">Data Sources</h2>
<p>There are multiple approaches how to retrieve data from Google using Real-Time Crawler. You can give us full URL via <a href="#direct">Direct</a>, or you can specify parameters via specifically built data sources, such as <a href="#search">Search</a>, <a href="#shopping-product">Shopping Product</a> or <a href="#images">Images</a>.</p>
<p>Technically not a content type, but Real-Time Crawler is able to render JavaScript when scraping. This is necessary in some Google pages, such as Flights and Patents. A checkmark under <code>Render JS</code> will indicate whether a particular data source can be scraped with JavaScript enabled.</p>
<p>If you are unsure which way to choose, drop us a line at <a class="custom_link" href="mailto:support@oxylabs.io" target="_blank" rel="nofollow noopener">support@oxylabs.io</a> or contact your account manager.</p>
<hr />
<h3 id="direct">Direct</h3>
<p><img loading="lazy" decoding="async" class="size-full wp-image-8206 alignnone" src="https://www.proxysp.com/wp-content/uploads/2021/09/Real-Time-Crawler-for-Google-Direct-1.png" alt="Real-Time Crawler for Google Direct" width="473" height="19" srcset="https://proxysp.com/wp-content/uploads/2021/09/Real-Time-Crawler-for-Google-Direct-1.png 473w, https://proxysp.com/wp-content/uploads/2021/09/Real-Time-Crawler-for-Google-Direct-1-300x12.png 300w" sizes="(max-width: 473px) 100vw, 473px" /></p>
<p><code>google</code> source is designed to retrieve content of direct URLs of various Google pages. This means that instead of sending multiple parameters, you can provide us with a direct URL to required Google page. We do not strip any parameters or alter your URLs in any other way.</p>
<p>This data source also supports parsed data (Parsed JSON), as long as the URL submitted is for Google Search (SERP page). If we are unable to confirm this is a SERP page request, a failure message will be returned.</p>
<p><span class="test">Query parameters</span></p>
<div class="su-table su-table-responsive su-table-alternate">
<table width="216">
<tbody>
<tr>
<td style="font-weight: 400;" width="72"><strong>Parameter</strong></td>
<td style="font-weight: 400;" width="72"><strong>Description</strong></td>
<td style="font-weight: 400;" width="72"><strong>Default Value</strong></td>
</tr>
<tr>
<td style="font-weight: 400;" width="72">source</td>
<td style="font-weight: 400;" width="72">Data source</td>
<td style="font-weight: 400;" width="72">google</td>
</tr>
<tr>
<td style="font-weight: 400;" width="72">url</td>
<td style="font-weight: 400;" width="72">Direct URL (link) to Google page</td>
<td style="font-weight: 400;" width="72">&#8211;</td>
</tr>
<tr>
<td style="font-weight: 400;" width="72">user_agent_type</td>
<td style="font-weight: 400;" width="72">Device type and browser. The full list can be found<a href="#user-agent"> here.</a></td>
<td style="font-weight: 400;" width="72">desktop</td>
</tr>
<tr>
<td style="font-weight: 400;" width="72">render</td>
<td style="font-weight: 400;" width="72">Enable JavaScript rendering. Use when the target requires JavaScript to load content. Only works via Push-Pull (a.k.a. Callback) method. There are two available values for this parameter: html(get raw output) and png (get a Base64-encoded screenshot).</td>
<td style="font-weight: 400;" width="72"></td>
</tr>
<tr>
<td style="font-weight: 400;" width="72">callback_url</td>
<td style="font-weight: 400;" width="72">URL to your callback endpoint</td>
<td style="font-weight: 400;" width="72">&#8211;</td>
</tr>
<tr>
<td style="font-weight: 400;" width="72">geo_location</td>
<td style="font-weight: 400;" width="72">The geographical location that the result should be adapted for. Using this parameter correctly is extremely important to get the right data. For more information, read about our suggested geo_location parameter structures <a href="#geo_location">here</a></td>
<td style="font-weight: 400;" width="72">&#8211;</td>
</tr>
<tr>
<td style="font-weight: 400;" width="72">parse</td>
<td style="font-weight: 400;" width="72">true will return parsed data, as long as the URL submitted is for Google Search. See <a href="#parsed-data">Parsed Data </a>for more information.</td>
<td style="font-weight: 400;" width="72">&#8211;</td>
</tr>
<tr>
<td style="font-weight: 400;" width="72">storage_type</td>
<td style="font-weight: 400;" width="72">Storage service provider. We support Amazon S3 and Google Cloud Storage. The storage_type parameter values for these storage providers are, correspondingly, s3 and gcs. The full implementation can be found on the <a href="#upload-to-storage">Upload to Storage </a>page. This feature only works via Push-Pull (Callback) method.</td>
<td style="font-weight: 400;" width="72">&#8211;</td>
</tr>
<tr>
<td style="font-weight: 400;" width="72">storage_url</td>
<td style="font-weight: 400;" width="72">Your storage bucket name. Only works via Push-Pull (Callback) method.</td>
<td style="font-weight: 400;" width="72">&#8211;</td>
</tr>
<tr>
<td style="font-weight: 400;" colspan="3" width="216">   &#8211; required parameter</td>
</tr>
</tbody>
</table>
</div>
<p>In this example the API will retrieve Google Scholar search for keyword <code>newton</code> in Push-Pull method:</p>
<pre>curl --user user:pass1 'https://data.oxylabs.io/v1/queries' -H "Content-Type: application/json"
 -d '{"source": "google", "url": "https://scholar.google.com/scholar?hl=en&q=newton&btnG=&as_sdt=1%2C5&as_sdtp="}'
</pre>
<p>Here is the same example in Realtime:</p>
<pre>curl --user user:pass1 'https://realtime.oxylabs.io/v1/queries' -H "Content-Type: application/json"
 -d '{"source": "google", "url": "https://scholar.google.com/scholar?hl=en&q=newton&btnG=&as_sdt=1%2C5&as_sdtp="}'
</pre>
<p>And via SuperAPI:</p>
<pre>curl -k -x realtime.oxylabs.io:60000 -U user:pass1 "https://scholar.google.com/scholar?hl=en&q=newton&btnG=&as_sdt=1%2C5&as_sdtp="
</pre>
<hr />
<h3 id="search">Search</h3>
<p><img loading="lazy" decoding="async" class="size-full wp-image-8207 alignnone" src="https://www.proxysp.com/wp-content/uploads/2021/09/Real-Time-Crawler-for-Google-Search.png" alt="Real-Time Crawler for Google Search" width="561" height="24" srcset="https://proxysp.com/wp-content/uploads/2021/09/Real-Time-Crawler-for-Google-Search.png 561w, https://proxysp.com/wp-content/uploads/2021/09/Real-Time-Crawler-for-Google-Search-300x13.png 300w" sizes="(max-width: 561px) 100vw, 561px" /></p>
<p><code>google_search</code> source is designed to retrieve Google Search results (SERP).</p>
<p><span class="test">Query parameters</span></p>
<div class="su-table su-table-responsive su-table-alternate">
<table width="216">
<tbody>
<tr>
<td style="font-weight: 400;" width="72"><strong>Parameter</strong></td>
<td style="font-weight: 400;" width="72"><strong>Description</strong></td>
<td style="font-weight: 400;" width="72"><strong>Default Value</strong></td>
</tr>
<tr>
<td style="font-weight: 400;" width="72">source</td>
<td style="font-weight: 400;" width="72">Data source</td>
<td style="font-weight: 400;" width="72">google_search</td>
</tr>
<tr>
<td style="font-weight: 400;" width="72">domain</td>
<td style="font-weight: 400;" width="72">Domain localization</td>
<td style="font-weight: 400;" width="72">com</td>
</tr>
<tr>
<td style="font-weight: 400;" width="72">query</td>
<td style="font-weight: 400;" width="72">UTF-encoded keyword</td>
<td style="font-weight: 400;" width="72">&#8211;</td>
</tr>
<tr>
<td style="font-weight: 400;" width="72">start_page</td>
<td style="font-weight: 400;" width="72">Starting page number</td>
<td style="font-weight: 400;" width="72">1</td>
</tr>
<tr>
<td style="font-weight: 400;" width="72">pages</td>
<td style="font-weight: 400;" width="72">Number of pages to retrieve</td>
<td style="font-weight: 400;" width="72">1</td>
</tr>
<tr>
<td style="font-weight: 400;" width="72">limit</td>
<td style="font-weight: 400;" width="72">Number of results to retrieve in each page</td>
<td style="font-weight: 400;" width="72">10</td>
</tr>
<tr>
<td style="font-weight: 400;" width="72">locale</td>
<td style="font-weight: 400;" width="72">Accept-Language header value. This will change Google search page web interface language (not results). For example if you use domain com and use locale parameter de-DE, the results will still be American, but Accept-Language will be set to de-DE,de;q=0.8. This would imitate person from US searching in com domain, who has his browser's UI set to German. If you don't use this parameter we will set &#8216;Accept-Language' parameter according to domain (i.e. en-US for com). List of available Google locales can be found <a href="#locale">here.</a></td>
<td style="font-weight: 400;" width="72">&#8211;</td>
</tr>
<tr>
<td style="font-weight: 400;" width="72">geo_location</td>
<td style="font-weight: 400;" width="72">The geographical location that the result should be adapted for. Using this parameter correctly is extremely important to get the right data. For more information, read about our suggested geo_location parameter structures <a href="#geo_location">here</a></td>
<td style="font-weight: 400;" width="72">&#8211;</td>
</tr>
<tr>
<td style="font-weight: 400;" width="72">user_agent_type</td>
<td style="font-weight: 400;" width="72">Device type and browser. The full list can be found<a href="#user-agent"> here.</a></td>
<td style="font-weight: 400;" width="72">desktop</td>
</tr>
<tr>
<td style="font-weight: 400;" width="72">render</td>
<td style="font-weight: 400;" width="72">Enable JavaScript rendering. Use when the target requires JavaScript to load content. Only works via Push-Pull (a.k.a. Callback) method. There are two available values for this parameter: html(get raw output) and png (get a Base64-encoded screenshot).</td>
<td style="font-weight: 400;" width="72"></td>
</tr>
<tr>
<td style="font-weight: 400;" width="72">callback_url</td>
<td style="font-weight: 400;" width="72">URL to your callback endpoint</td>
<td style="font-weight: 400;" width="72">&#8211;</td>
</tr>
<tr>
<td style="font-weight: 400;" width="72">parse</td>
<td style="font-weight: 400;" width="72">true will return parsed data. See <a href="#parsed-data">Parsed Data </a>for more information.</td>
<td style="font-weight: 400;" width="72">&#8211;</td>
</tr>
<tr>
<td style="font-weight: 400;" width="72">parser_type</td>
<td style="font-weight: 400;" width="72">Leave blank to get the default layout, or set the value to v2 to make use of the updated Google Search parsed output schema and/or receive the result in CSV format (only works with Google Web Search). See<a href="#parsed-data"> Parsed Data </a>for more information.</td>
<td style="font-weight: 400;" width="72">&#8211;</td>
</tr>
<tr>
<td style="font-weight: 400;" width="72">context:</td>
<td style="font-weight: 400;" rowspan="2" width="72">Setting the fpstate value to aig will make Google load more apps. This parameter is only useful if used together with the render parameter.</td>
<td style="font-weight: 400;" rowspan="2" width="72">&#8211;</td>
</tr>
<tr>
<td style="font-weight: 400;" width="72">fpstate</td>
</tr>
<tr>
<td style="font-weight: 400;" width="72">context:</td>
<td style="font-weight: 400;" rowspan="2" width="72">true will turn off spelling auto-correction.</td>
<td style="font-weight: 400;" rowspan="2" width="72">FALSE</td>
</tr>
<tr>
<td style="font-weight: 400;" width="72">nfpr</td>
</tr>
<tr>
<td style="font-weight: 400;" width="72">context:</td>
<td style="font-weight: 400;" rowspan="2" width="72">Results language. List of supported Google languages can be found<a href="#results-language"> here.</a></td>
<td style="font-weight: 400;" rowspan="2" width="72">&#8211;</td>
</tr>
<tr>
<td style="font-weight: 400;" width="72">results_language</td>
</tr>
<tr>
<td style="font-weight: 400;" width="72">context:</td>
<td style="font-weight: 400;" rowspan="2" width="72">To-be-matched or tbm parameter. Accepted values are: app, blg, bks, dsc, isch, nws, pts, plcs, rcp, lcl</td>
<td style="font-weight: 400;" rowspan="2" width="72">&#8211;</td>
</tr>
<tr>
<td style="font-weight: 400;" width="72">tbm</td>
</tr>
<tr>
<td style="font-weight: 400;" width="72">context:</td>
<td style="font-weight: 400;" rowspan="2" width="72">tbs parameter. This parameter is like a container for more obscure google parameters, like limiting/sorting results by date as well as other filters some of which depend on the tbm parameter (e.g. tbs=app_os:1 is only available with tbm value app). More info<a href="https://stenevang.wordpress.com/2013/02/22/google-advanced-power-search-url-request-parameters/" target="_blank" rel="noopener"> here.</a></td>
<td style="font-weight: 400;" rowspan="2" width="72">&#8211;</td>
</tr>
<tr>
<td style="font-weight: 400;" width="72">tbs</td>
</tr>
<tr>
<td style="font-weight: 400;" width="72">storage_type</td>
<td style="font-weight: 400;" width="72">Storage service provider. We support Amazon S3 and Google Cloud Storage. The storage_type parameter values for these storage providers are, correspondingly, s3 and gcs. The full implementation can be found on the  <a class="custom_link" href="https://docs.oxylabs.io/rtc/source/google/index.html?shell#upload-to-storage" target="_blank" rel="noopener">Upload to Storage</a>  page. This feature only works via Push-Pull (Callback) method.</td>
<td style="font-weight: 400;" width="72">&#8211;</td>
</tr>
<tr>
<td style="font-weight: 400;" width="72">storage_url</td>
<td style="font-weight: 400;" width="72">Your storage bucket name. Only works via Push-Pull (Callback) method.</td>
<td style="font-weight: 400;" width="72">&#8211;</td>
</tr>
<tr>
<td style="font-weight: 400;" colspan="3" width="216">   &#8211; required parameter</td>
</tr>
</tbody>
</table>
</div>
<p>API makes request to <code>google.nl</code> to retrieve search results pages from number 11 to number 20 for keyword <code>adidas</code>. The results will be displayed in French, since <code>results_language</code> parameter is also passed through via <code>context</code>. The API will post a JSON request to <code>your.callback.url</code> containing the URL to download the raw HTML output once the data retrieval task is successfully finished. This is Push-Pull:</p>
<pre>curl --user user:pass1 'https://data.oxylabs.io/v1/queries' -H "Content-Type: application/json"
 -d '{"source": "google_search", "domain": "nl", "query": "adidas", "start_page": 11, "pages": 10, "callback_url": "https://your.callback.url", "context": [{"key": "results_language", "value": "fr"}]}}'
</pre>
<p>And here is the same example in Realtime:</p>
<pre>curl --user user:pass1 'https://realtime.oxylabs.io/v1/queries' -H "Content-Type: application/json"
 -d '{"source": "google_search", "domain": "nl", "query": "adidas", "start_page": 11, "pages": 10, "callback_url": "https://your.callback.url", "context": [{"key": "results_language", "value": "fr"}]}}'
</pre>
<hr />
<h3 id="ads">Ads</h3>
<p><img loading="lazy" decoding="async" class="size-full wp-image-8210 alignnone" src="https://www.proxysp.com/wp-content/uploads/2021/09/Real-Time-Crawler-for-Google-Ads.png" alt="Real-Time Crawler for Google Ads" width="472" height="26" srcset="https://proxysp.com/wp-content/uploads/2021/09/Real-Time-Crawler-for-Google-Ads.png 472w, https://proxysp.com/wp-content/uploads/2021/09/Real-Time-Crawler-for-Google-Ads-300x17.png 300w" sizes="(max-width: 472px) 100vw, 472px" /></p>
<p><code>google_ads</code> source is optimized to retrieve Google Search results page (SERP) with paid ads. This source will return only 10 results per page, ensuring highest changes of paid results showing up. Other than that, it supports the same parameters as regular <a href="#search">Search</a></p>
<p><span class="test">Query parameters</span></p>
<div class="su-table su-table-responsive su-table-alternate">
<table width="216">
<tbody>
<tr>
<td style="font-weight: 400;" width="72"><strong>Parameter</strong></td>
<td style="font-weight: 400;" width="72"><strong>Description</strong></td>
<td style="font-weight: 400;" width="72"><strong>Default Value</strong></td>
</tr>
<tr>
<td style="font-weight: 400;" width="72">source</td>
<td style="font-weight: 400;" width="72">Data source</td>
<td style="font-weight: 400;" width="72">google_ads</td>
</tr>
<tr>
<td style="font-weight: 400;" width="72">domain</td>
<td style="font-weight: 400;" width="72">Domain localization</td>
<td style="font-weight: 400;" width="72">com</td>
</tr>
<tr>
<td style="font-weight: 400;" width="72">query</td>
<td style="font-weight: 400;" width="72">UTF-encoded keyword</td>
<td style="font-weight: 400;" width="72">&#8211;</td>
</tr>
<tr>
<td style="font-weight: 400;" width="72">start_page</td>
<td style="font-weight: 400;" width="72">Starting page number</td>
<td style="font-weight: 400;" width="72">1</td>
</tr>
<tr>
<td style="font-weight: 400;" width="72">pages</td>
<td style="font-weight: 400;" width="72">Number of pages to retrieve</td>
<td style="font-weight: 400;" width="72">1</td>
</tr>
<tr>
<td style="font-weight: 400;" width="72">locale</td>
<td style="font-weight: 400;" width="72">Accept-Language header value. This will change Google search page web interface language (not results). For example if you use domain com and use locale parameter de-DE, the results will still be American, but Accept-Language will be set to de-DE,de;q=0.8. This would imitate person from US searching in com domain, who has his browser's UI set to German. If you don't use this parameter we will set &#8216;Accept-Language' parameter according to domain (i.e. en-US for com). List of available Google locales can be found<a href="#locale"> here.</a></td>
<td style="font-weight: 400;" width="72">&#8211;</td>
</tr>
<tr>
<td style="font-weight: 400;" width="72">geo_location</td>
<td style="font-weight: 400;" width="72">The geographical location that the result should be adapted for. Using this parameter correctly is extremely important to get the right data. For more information, read about our suggested geo_location parameter structures<a href="#geo_location"> here</a></td>
<td style="font-weight: 400;" width="72">&#8211;</td>
</tr>
<tr>
<td style="font-weight: 400;" width="72">user_agent_type</td>
<td style="font-weight: 400;" width="72">Device type and browser. The full list can be found<a href="#user-agent"> here.</a></td>
<td style="font-weight: 400;" width="72">desktop</td>
</tr>
<tr>
<td style="font-weight: 400;" width="72">callback_url</td>
<td style="font-weight: 400;" width="72">URL to your callback endpoint</td>
<td style="font-weight: 400;" width="72">&#8211;</td>
</tr>
<tr>
<td style="font-weight: 400;" width="72">parse</td>
<td style="font-weight: 400;" width="72">true will return parsed data. See <a href="#parsed-data">Parsed Data</a> for more information.</td>
<td style="font-weight: 400;" width="72">&#8211;</td>
</tr>
<tr>
<td style="font-weight: 400;" width="72">context:</td>
<td style="font-weight: 400;" rowspan="2" width="72">true will turn off spelling auto-correction.</td>
<td style="font-weight: 400;" rowspan="2" width="72">FALSE</td>
</tr>
<tr>
<td style="font-weight: 400;" width="72">nfpr</td>
</tr>
<tr>
<td style="font-weight: 400;" width="72">context:</td>
<td style="font-weight: 400;" rowspan="2" width="72">Results language. List of supported Google languages can be found <a href="#results-language">here.</a></td>
<td style="font-weight: 400;" rowspan="2" width="72">&#8211;</td>
</tr>
<tr>
<td style="font-weight: 400;" width="72">results_language</td>
</tr>
<tr>
<td style="font-weight: 400;" width="72">context:</td>
<td style="font-weight: 400;" rowspan="2" width="72">To-be-matched or tbm parameter. Accepted values are: app, blg, bks, dsc, isch, nws, pts, plcs, rcp, lcl</td>
<td style="font-weight: 400;" rowspan="2" width="72">&#8211;</td>
</tr>
<tr>
<td style="font-weight: 400;" width="72">tbm</td>
</tr>
<tr>
<td style="font-weight: 400;" width="72">context:</td>
<td style="font-weight: 400;" rowspan="2" width="72">tbs parameter. This parameter is like a container for more obscure google parameters, like limiting/sorting results by date as well as other filters some of which depend on the tbm parameter (e.g. tbs=app_os:1 is only available with tbm value app). More info<a href="https://stenevang.wordpress.com/2013/02/22/google-advanced-power-search-url-request-parameters/" target="_blank" rel="nofollow noopener"> here.</a></td>
<td style="font-weight: 400;" rowspan="2" width="72">&#8211;</td>
</tr>
<tr>
<td style="font-weight: 400;" width="72">tbs</td>
</tr>
<tr>
<td style="font-weight: 400;" width="72">storage_type</td>
<td style="font-weight: 400;" width="72">Storage service provider. We support Amazon S3 and Google Cloud Storage. The storage_type parameter values for these storage providers are, correspondingly, s3 and gcs. The full implementation can be found on the <a href="#upload-to-storage">Upload to Storage </a>page. This feature only works via Push-Pull (Callback) method.</td>
<td style="font-weight: 400;" width="72">&#8211;</td>
</tr>
<tr>
<td style="font-weight: 400;" width="72">storage_url</td>
<td style="font-weight: 400;" width="72">Your storage bucket name. Only works via Push-Pull (Callback) method.</td>
<td style="font-weight: 400;" width="72">&#8211;</td>
</tr>
<tr>
<td style="font-weight: 400;" colspan="3" width="216">   &#8211; required parameter</td>
</tr>
</tbody>
</table>
</div>
<p>API makes request to <code>google.nl</code> to retrieve search results for keyword <code>adidas</code>. The API will post a JSON request to <code>your.callback.url</code> containing the URL to download the raw HTML output once the data retrieval task is successfully finished. This is Push-Pull:</p>
<pre>curl --user user:pass1 'https://data.oxylabs.io/v1/queries' -H "Content-Type: application/json"
 -d '{"source": "google_ads", "domain": "nl", "query": "adidas", "callback_url": "https://your.callback.url"}'
</pre>
<p>And here is the same example in Realtime:</p>
<pre>curl --user user:pass1 'https://realtime.oxylabs.io/v1/queries' -H "Content-Type: application/json"
 -d '{"source": "google_ads", "domain": "nl", "query": "adidas"}'
</pre>
<hr />
<h3 id="hotels">Hotels</h3>
<p><img loading="lazy" decoding="async" class="size-full wp-image-8211 alignnone" src="https://www.proxysp.com/wp-content/uploads/2021/09/Real-Time-Crawler-for-Google-Hotels.png" alt="Real-Time Crawler for Google Hotels" width="480" height="24" srcset="https://proxysp.com/wp-content/uploads/2021/09/Real-Time-Crawler-for-Google-Hotels.png 480w, https://proxysp.com/wp-content/uploads/2021/09/Real-Time-Crawler-for-Google-Hotels-300x15.png 300w" sizes="(max-width: 480px) 100vw, 480px" /></p>
<p><code>google_hotels</code> data source is designed to retrieve Google Hotel search results.</p>
<p><span class="test">Query parameters</span></p>
<div class="su-table su-table-responsive su-table-alternate">
<table width="216">
<tbody>
<tr>
<td style="font-weight: 400;" width="72"><strong>Parameter</strong></td>
<td style="font-weight: 400;" width="72"><strong>Description</strong></td>
<td style="font-weight: 400;" width="72"><strong>Default Value</strong></td>
</tr>
<tr>
<td style="font-weight: 400;" width="72">source</td>
<td style="font-weight: 400;" width="72">Data source</td>
<td style="font-weight: 400;" width="72">google_hotels</td>
</tr>
<tr>
<td style="font-weight: 400;" width="72">domain</td>
<td style="font-weight: 400;" width="72">Domain localization</td>
<td style="font-weight: 400;" width="72">com</td>
</tr>
<tr>
<td style="font-weight: 400;" width="72">query</td>
<td style="font-weight: 400;" width="72">UTF-encoded keyword</td>
<td style="font-weight: 400;" width="72">&#8211;</td>
</tr>
<tr>
<td style="font-weight: 400;" width="72">start_page</td>
<td style="font-weight: 400;" width="72">Starting page number</td>
<td style="font-weight: 400;" width="72">1</td>
</tr>
<tr>
<td style="font-weight: 400;" width="72">pages</td>
<td style="font-weight: 400;" width="72">Number of pages to retrieve</td>
<td style="font-weight: 400;" width="72">1</td>
</tr>
<tr>
<td style="font-weight: 400;" width="72">limit</td>
<td style="font-weight: 400;" width="72">Number of results to retrieve in each page</td>
<td style="font-weight: 400;" width="72">10</td>
</tr>
<tr>
<td style="font-weight: 400;" width="72">locale</td>
<td style="font-weight: 400;" width="72">Accept-Language header value. This will change Google search page web interface language (not results). For example if you use domain com and use locale parameter de-DE, the results will still be American, but Accept-Language will be set to de-DE,de;q=0.8. This would imitate person from US searching in com domain, who has his browser's UI set to German. If you don't use this parameter we will set &#8216;Accept-Language' parameter according to domain (i.e. en-US for com). List of available Google locales can be found <a href="#locale">here.</a></td>
<td style="font-weight: 400;" width="72">&#8211;</td>
</tr>
<tr>
<td style="font-weight: 400;" width="72">results_language</td>
<td style="font-weight: 400;" width="72">Results language. List of supported Google languages can be found <a href="#results-language">here.</a></td>
<td style="font-weight: 400;" width="72">&#8211;</td>
</tr>
<tr>
<td style="font-weight: 400;" width="72">geo_location</td>
<td style="font-weight: 400;" width="72">The geographical location that the result should be adapted for. Using this parameter correctly is extremely important to get the right data. For more information, read about our suggested geo_location parameter structures <a href="#geo_location">here</a></td>
<td style="font-weight: 400;" width="72">&#8211;</td>
</tr>
<tr>
<td style="font-weight: 400;" width="72">user_agent_type</td>
<td style="font-weight: 400;" width="72">Device type and browser. The full list can be found <a href="#user-agent">here.</a></td>
<td style="font-weight: 400;" width="72">desktop</td>
</tr>
<tr>
<td style="font-weight: 400;" width="72">render</td>
<td style="font-weight: 400;" width="72">Enable JavaScript rendering. Use when the target requires JavaScript to load content. Only works via Push-Pull (a.k.a. Callback) method. There are two available values for this parameter: html(get raw output) and png (get a Base64-encoded screenshot).</td>
<td style="font-weight: 400;" width="72"></td>
</tr>
<tr>
<td style="font-weight: 400;" width="72">callback_url</td>
<td style="font-weight: 400;" width="72">URL to your callback endpoint</td>
<td style="font-weight: 400;" width="72">&#8211;</td>
</tr>
<tr>
<td style="font-weight: 400;" width="72">context:</td>
<td style="font-weight: 400;" rowspan="2" width="72">true will turn off spelling auto-correction.</td>
<td style="font-weight: 400;" rowspan="2" width="72">FALSE</td>
</tr>
<tr>
<td style="font-weight: 400;" width="72">nfpr</td>
</tr>
<tr>
<td style="font-weight: 400;" width="72">context:</td>
<td style="font-weight: 400;" rowspan="2" width="72">Number of guests</td>
<td style="font-weight: 400;" rowspan="2" width="72">2</td>
</tr>
<tr>
<td style="font-weight: 400;" width="72">hotel_occupancy</td>
</tr>
<tr>
<td style="font-weight: 400;" width="72">context:</td>
<td style="font-weight: 400;" rowspan="2" width="72">Length for staying in the hotel, from &#8211; to. Example: 2017-07-12,2017-07-13</td>
<td style="font-weight: 400;" rowspan="2" width="72">&#8211;</td>
</tr>
<tr>
<td style="font-weight: 400;" width="72">hotel_dates</td>
</tr>
<tr>
<td style="font-weight: 400;" width="72">storage_type</td>
<td style="font-weight: 400;" width="72">Storage service provider. We support Amazon S3 and Google Cloud Storage. The storage_type parameter values for these storage providers are, correspondingly, s3 and gcs. The full implementation can be found on the <a href="#upload-to-storage">Upload to Storage </a>page. This feature only works via Push-Pull (Callback) method.</td>
<td style="font-weight: 400;" width="72">&#8211;</td>
</tr>
<tr>
<td style="font-weight: 400;" width="72">storage_url</td>
<td style="font-weight: 400;" width="72">Your storage bucket name. Only works via Push-Pull (Callback) method.</td>
<td style="font-weight: 400;" width="72">&#8211;</td>
</tr>
<tr>
<td style="font-weight: 400;" colspan="3" width="216">   &#8211; required parameter</td>
</tr>
</tbody>
</table>
</div>
<p>Please note that with Google hotels you always need to send a keyword with &#8216;hotels' word inside, for example &#8216;hotels in Los Angeles', &#8216;hotels in Paris, France', etc. Both &#8216;hotel' and &#8216;hotels' work. Google also supports local languages, so you can send &#8216;Hotelli Helsingissä' for hotels in Helsinki or &#8216;viešbučiai Vilnius' for hotels in Vilnius.</p>
<p>In this example API will retrieve first 3 pages of hotel availability for <code>1</code> guest between <code>2019-10-01</code> and <code>2019-10-10</code> for <code>hotels in Paris</code> from <code>google.com</code>. This is Push-Pull method.</p>
<pre>curl --user user:pass1 'https://data.oxylabs.io/v1/queries' -H "Content-Type: application/json"
 -d '{"source": "google_hotels", "domain": "com", "pages": 3, "query": "hotels in Paris", "context": [{"key": "hotel_occupancy", "value": 1}, {"key": "hotel_dates", "value": "2019-10-01,2019-10-10"}]}'
</pre>
<p>This is in Realtime:</p>
<pre>curl --user user:pass1 'https://realtime.oxylabs.io/v1/queries' -H "Content-Type: application/json"
 -d '{"source": "google_hotels", "domain": "com", "pages": 3, "query": "hotels in Paris", "context": [{"key": "hotel_occupancy", "value": 1}, {"key": "hotel_dates", "value": "2019-10-01,2019-10-10"}]}'
</pre>
<hr />
<h3 id="travel-hotels">Travel: Hotels</h3>
<p><img loading="lazy" decoding="async" class="size-full wp-image-8212 alignnone" src="https://www.proxysp.com/wp-content/uploads/2021/09/Real-Time-Crawler-for-Google-Travel-Hotels.png" alt="Real-Time Crawler for Google Travel Hotels" width="470" height="20" srcset="https://proxysp.com/wp-content/uploads/2021/09/Real-Time-Crawler-for-Google-Travel-Hotels.png 470w, https://proxysp.com/wp-content/uploads/2021/09/Real-Time-Crawler-for-Google-Travel-Hotels-300x13.png 300w" sizes="(max-width: 470px) 100vw, 470px" /></p>
<p><code>google_travel_hotels</code> data source is designed to retrieve Google Travel service's hotel search results.</p>
<p><span class="test">Query parameters</span></p>
<div class="su-table su-table-responsive su-table-alternate">
<table width="216">
<tbody>
<tr>
<td style="font-weight: 400;" width="72"><strong>Parameter</strong></td>
<td style="font-weight: 400;" width="72"><strong>Description</strong></td>
<td style="font-weight: 400;" width="72"><strong>Default Value</strong></td>
</tr>
<tr>
<td style="font-weight: 400;" width="72">source</td>
<td style="font-weight: 400;" width="72">Data source</td>
<td style="font-weight: 400;" width="72">google_travel_hotels</td>
</tr>
<tr>
<td style="font-weight: 400;" width="72">domain</td>
<td style="font-weight: 400;" width="72">Domain localization</td>
<td style="font-weight: 400;" width="72">com</td>
</tr>
<tr>
<td style="font-weight: 400;" width="72">query</td>
<td style="font-weight: 400;" width="72">UTF-encoded keyword</td>
<td style="font-weight: 400;" width="72">&#8211;</td>
</tr>
<tr>
<td style="font-weight: 400;" width="72">start_page</td>
<td style="font-weight: 400;" width="72">Starting page number</td>
<td style="font-weight: 400;" width="72">1</td>
</tr>
<tr>
<td style="font-weight: 400;" width="72">locale</td>
<td style="font-weight: 400;" width="72">Accept-Language header value. This will change Google search page web interface language (not results). For example if you use domain com and use locale parameter de-DE, the results will still be American, but Accept-Language will be set to de-DE,de;q=0.8. This would imitate person from US searching in com domain, who has his browser's UI set to German. If you don't use this parameter we will set &#8216;Accept-Language' parameter according to domain (i.e. en-US for com). List of available Google locales can be found <a href="#locale">here.</a></td>
<td style="font-weight: 400;" width="72">&#8211;</td>
</tr>
<tr>
<td style="font-weight: 400;" width="72">geo_location</td>
<td style="font-weight: 400;" width="72">The geographical location that the result should be adapted for. Using this parameter correctly is extremely important to get the right data. Please note that this source can accept a limited number of geo_location values &#8211; please check <a href="https://docs.oxylabs.io/resources/google_travel_hotels-bad_geo_locations.csv" target="_blank" rel="noopener">this file </a>to see geo_location values that don't yield accurate results.</td>
<td style="font-weight: 400;" width="72">&#8211;</td>
</tr>
<tr>
<td style="font-weight: 400;" width="72">user_agent_type</td>
<td style="font-weight: 400;" width="72">Device type and browser. The full list can be found <a href="#user-agent">here.</a></td>
<td style="font-weight: 400;" width="72">desktop</td>
</tr>
<tr>
<td style="font-weight: 400;" width="72">render</td>
<td style="font-weight: 400;" width="72">Enable JavaScript rendering. Use when the target requires JavaScript to load content. Only works via Push-Pull (a.k.a. Callback) method. There are two available values for this parameter: html(get raw output) and png (get a Base64-encoded screenshot). Please note that without JavaScript rendering, Google Travel Hotels will not return any useful content.</td>
<td style="font-weight: 400;" width="72"></td>
</tr>
<tr>
<td style="font-weight: 400;" width="72">callback_url</td>
<td style="font-weight: 400;" width="72">URL to your callback endpoint</td>
<td style="font-weight: 400;" width="72">&#8211;</td>
</tr>
<tr>
<td style="font-weight: 400;" width="72">context:</td>
<td style="font-weight: 400;" rowspan="2" width="72">Number of guests</td>
<td style="font-weight: 400;" rowspan="2" width="72">2</td>
</tr>
<tr>
<td style="font-weight: 400;" width="72">hotel_occupancy</td>
</tr>
<tr>
<td style="font-weight: 400;" width="72">context:</td>
<td style="font-weight: 400;" rowspan="2" width="72">Filter results by # of hotel stars. You may specify one or more values between 2 and 5. Example: [3,4]</td>
<td style="font-weight: 400;" rowspan="2" width="72">&#8211;</td>
</tr>
<tr>
<td style="font-weight: 400;" width="72">hotel_classes</td>
</tr>
<tr>
<td style="font-weight: 400;" width="72">context:</td>
<td style="font-weight: 400;" rowspan="2" width="72">Dates for staying at the hotel, from &#8211; to. Example: 2017-07-12,2017-07-13</td>
<td style="font-weight: 400;" rowspan="2" width="72">&#8211;</td>
</tr>
<tr>
<td style="font-weight: 400;" width="72">hotel_dates</td>
</tr>
<tr>
<td style="font-weight: 400;" width="72">storage_type</td>
<td style="font-weight: 400;" width="72">Storage service provider. At the moment only Amazon S3 is supported: s3. Full implementation can be found on the <a href="#upload-to-storage">Upload to Storage</a> page.</td>
<td style="font-weight: 400;" width="72">&#8211;</td>
</tr>
<tr>
<td style="font-weight: 400;" width="72">storage_url</td>
<td style="font-weight: 400;" width="72">Your Amazon S3 bucket name</td>
<td style="font-weight: 400;" width="72">&#8211;</td>
</tr>
<tr>
<td style="font-weight: 400;" colspan="3" width="216">   &#8211; required parameter</td>
</tr>
</tbody>
</table>
</div>
<p>Please note that with Google hotels you always need to send a keyword with &#8216;hotels' word inside, for example &#8216;hotels in Los Angeles', &#8216;hotels in Paris, France', etc. Both &#8216;hotel' and &#8216;hotels' work. Google also supports local languages, so you can send &#8216;Hotelli Helsingissä' for hotels in Helsinki or &#8216;viešbučiai Vilnius' for hotels in Vilnius.</p>
<p>In this example API will retrieve the 2nd page of results for of hotel availability for <code>2</code> guests between <code>2020-10-01</code> and <code>2020-10-10</code> for <code>hotels in Paris</code> from <code>google.com</code>. The results will be filtered to only show 2 and 4 star hotels. This is Push-Pull method.</p>
<pre>curl --user user:pass1 'https://data.oxylabs.io/v1/queries' -H "Content-Type: application/json"
 -d '{"source": "google_travel_hotels", "domain": "com", "start_page": 2, "query": "hotels in Paris", "callback_url": "https://your.callback.url", "context": [{"key": "hotel_occupancy", "value": 2}, {"key": "hotel_dates", "value": "2020-10-01,2020-10-10"}, {"key": "hotel_classes", "value": [2,4]}]}'
</pre>
<p>This is in Realtime:</p>
<pre>curl --user user:pass1 'https://realtime.oxylabs.io/v1/queries' -H "Content-Type: application/json"
 -d '{"source": "google_travel_hotels", "domain": "com", "start_page": 2, "query": "hotels in Paris", "context": [{"key": "hotel_occupancy", "value": 2}, {"key": "hotel_dates", "value": "2020-10-01,2020-10-10"}, {"key": "hotel_classes", "value": [2,4]}]}'
</pre>
<hr />
<h3 id="shopping-search">Shopping Search</h3>
<p><img loading="lazy" decoding="async" class="size-full wp-image-8213 alignnone" src="https://www.proxysp.com/wp-content/uploads/2021/09/Real-Time-Crawler-for-Google-Shopping-Search.png" alt="Real-Time Crawler for Google Shopping Search" width="474" height="26" srcset="https://proxysp.com/wp-content/uploads/2021/09/Real-Time-Crawler-for-Google-Shopping-Search.png 474w, https://proxysp.com/wp-content/uploads/2021/09/Real-Time-Crawler-for-Google-Shopping-Search-300x16.png 300w" sizes="(max-width: 474px) 100vw, 474px" /></p>
<p><code>google_shopping_search</code> source is designed to retrieve Google Shopping search results.</p>
<pre>POST https://data.oxylabs.io/v1/queries
</pre>
<p>Query parameters</p>
<div class="su-table su-table-responsive su-table-alternate">
<table width="216">
<tbody>
<tr>
<td style="font-weight: 400;" width="72"><strong>Parameter</strong></td>
<td style="font-weight: 400;" width="72"><strong>Description</strong></td>
<td style="font-weight: 400;" width="72"><strong>Default Value</strong></td>
</tr>
<tr>
<td style="font-weight: 400;" width="72">source</td>
<td style="font-weight: 400;" width="72">Data source</td>
<td style="font-weight: 400;" width="72">google_shopping_search</td>
</tr>
<tr>
<td style="font-weight: 400;" width="72">domain</td>
<td style="font-weight: 400;" width="72">Domain localization</td>
<td style="font-weight: 400;" width="72">com</td>
</tr>
<tr>
<td style="font-weight: 400;" width="72">query</td>
<td style="font-weight: 400;" width="72">UTF-encoded keyword</td>
<td style="font-weight: 400;" width="72">&#8211;</td>
</tr>
<tr>
<td style="font-weight: 400;" width="72">start_page</td>
<td style="font-weight: 400;" width="72">Starting page number</td>
<td style="font-weight: 400;" width="72">1</td>
</tr>
<tr>
<td style="font-weight: 400;" width="72">pages</td>
<td style="font-weight: 400;" width="72">Number of pages to retrieve</td>
<td style="font-weight: 400;" width="72">1</td>
</tr>
<tr>
<td style="font-weight: 400;" width="72">locale</td>
<td style="font-weight: 400;" width="72">Accept-Language header value. This will change Google search page web interface language (not results). For example if you use domain com and use locale parameter de-DE, the results will still be American, but Accept-Language will be set to de-DE,de;q=0.8. This would imitate person from US searching in com domain, who has his browser's UI set to German. If you don't use this parameter we will set &#8216;Accept-Language' parameter according to domain (i.e. en-US for com). List of available Google locales can be found <a href="#locale">here.</a></td>
<td style="font-weight: 400;" width="72">&#8211;</td>
</tr>
<tr>
<td style="font-weight: 400;" width="72">results_language</td>
<td style="font-weight: 400;" width="72">Results language. List of supported Google languages can be found <a href="#results-language">here.</a></td>
<td style="font-weight: 400;" width="72">&#8211;</td>
</tr>
<tr>
<td style="font-weight: 400;" width="72">geo_location</td>
<td style="font-weight: 400;" width="72">The geographical location that the result should be adapted for. Using this parameter correctly is extremely important to get the right data. For more information, read about our suggested geo_location parameter structures <a href="#geo_location">here</a></td>
<td style="font-weight: 400;" width="72">&#8211;</td>
</tr>
<tr>
<td style="font-weight: 400;" width="72">user_agent_type</td>
<td style="font-weight: 400;" width="72">Device type and browser. The full list can be found <a href="#user-agent">here.</a></td>
<td style="font-weight: 400;" width="72">desktop</td>
</tr>
<tr>
<td style="font-weight: 400;" width="72">render</td>
<td style="font-weight: 400;" width="72">Enable JavaScript rendering. Use when the target requires JavaScript to load content. Only works via Push-Pull (a.k.a. Callback) method. There are two available values for this parameter: html(get raw output) and png (get a Base64-encoded screenshot).</td>
<td style="font-weight: 400;" width="72"></td>
</tr>
<tr>
<td style="font-weight: 400;" width="72">callback_url</td>
<td style="font-weight: 400;" width="72">URL to your callback endpoint</td>
<td style="font-weight: 400;" width="72">&#8211;</td>
</tr>
<tr>
<td style="font-weight: 400;" width="72">parse</td>
<td style="font-weight: 400;" width="72">true will return <a href="#parsed-data">parsed data</a>. See Parsed Data for more information.</td>
<td style="font-weight: 400;" width="72">&#8211;</td>
</tr>
<tr>
<td style="font-weight: 400;" width="72">context:</td>
<td style="font-weight: 400;" rowspan="2" width="72">true will turn off spelling auto-correction.</td>
<td style="font-weight: 400;" rowspan="2" width="72">FALSE</td>
</tr>
<tr>
<td style="font-weight: 400;" width="72">nfpr</td>
</tr>
<tr>
<td style="font-weight: 400;" width="72">context:</td>
<td style="font-weight: 400;" rowspan="2" width="72">Sort product list by given criteria. r applies default Google sorting, rv &#8211; by review score, p &#8211; by price ascending, pd &#8211; by price descending</td>
<td style="font-weight: 400;" rowspan="2" width="72">r</td>
</tr>
<tr>
<td style="font-weight: 400;" width="72">sort_by</td>
</tr>
<tr>
<td style="font-weight: 400;" width="72">context:</td>
<td style="font-weight: 400;" rowspan="2" width="72">Minimum price of products to filter</td>
<td style="font-weight: 400;" rowspan="2" width="72"></td>
</tr>
<tr>
<td style="font-weight: 400;" width="72">min_price</td>
</tr>
<tr>
<td style="font-weight: 400;" width="72">context:</td>
<td style="font-weight: 400;" rowspan="2" width="72">Maximum price of products to filter</td>
<td style="font-weight: 400;" rowspan="2" width="72"></td>
</tr>
<tr>
<td style="font-weight: 400;" width="72">max_price</td>
</tr>
<tr>
<td style="font-weight: 400;" width="72">storage_type</td>
<td style="font-weight: 400;" width="72">Storage service provider. We support Amazon S3 and Google Cloud Storage. The storage_type parameter values for these storage providers are, correspondingly, s3 and gcs. The full implementation can be found on the<a href="#upload-to-storage"> Upload to Storage </a>page. This feature only works via Push-Pull (Callback) method.</td>
<td style="font-weight: 400;" width="72">&#8211;</td>
</tr>
<tr>
<td style="font-weight: 400;" width="72">storage_url</td>
<td style="font-weight: 400;" width="72">Your storage bucket name. Only works via Push-Pull (Callback) method.</td>
<td style="font-weight: 400;" width="72">&#8211;</td>
</tr>
<tr>
<td style="font-weight: 400;" colspan="3" width="216">   &#8211; required parameter</td>
</tr>
</tbody>
</table>
</div>
<p>The API will download first <code>4</code> pages of Google Shopping search for keyword <code>adidas</code>, sorted by descending price and minimum price of $20. This is how it's done in Push-Pull:</p>
<pre>curl --user user:pass1 'https://data.oxylabs.io/v1/queries' -H "Content-Type: application/json"
 -d '{"source": "google_shopping_search", "domain": "com", "query": "adidas", "pages": 4, "context": [{"key": "sort_by", "value": "pd"}, {"key": "min_price", "value": 20}]}'
</pre>
<p>Here is the same example in Realtime:</p>
<pre>curl --user user:pass1 'https://realtime.oxylabs.io/v1/queries' -H "Content-Type: application/json"
 -d '{"source": "google_shopping_search", "domain": "com", "query": "adidas", "pages": 4, "context": [{"key": "sort_by", "value": "pd"}, {"key": "min_price", "value": 20}]}'
</pre>
<hr />
<h3 id="shopping-product">Shopping Product</h3>
<p><img loading="lazy" decoding="async" class="size-full wp-image-8214 alignnone" src="https://www.proxysp.com/wp-content/uploads/2021/09/Real-Time-Crawler-for-Google-Shopping-Product.png" alt="Real-Time Crawler for Google Shopping Product" width="467" height="26" srcset="https://proxysp.com/wp-content/uploads/2021/09/Real-Time-Crawler-for-Google-Shopping-Product.png 467w, https://proxysp.com/wp-content/uploads/2021/09/Real-Time-Crawler-for-Google-Shopping-Product-300x17.png 300w" sizes="(max-width: 467px) 100vw, 467px" /></p>
<p><code>google_shopping_product</code> source is designed to retrieve Google Shopping product page for specified product.</p>
<p><span class="test">Query parameters</span></p>
<div class="su-table su-table-responsive su-table-alternate">
<table width="216">
<tbody>
<tr>
<td style="font-weight: 400;" width="72"><strong>Parameter</strong></td>
<td style="font-weight: 400;" width="72"><strong>Description</strong></td>
<td style="font-weight: 400;" width="72"><strong>Default Value</strong></td>
</tr>
<tr>
<td style="font-weight: 400;" width="72">source</td>
<td style="font-weight: 400;" width="72">Data source</td>
<td style="font-weight: 400;" width="72">google_shopping_product</td>
</tr>
<tr>
<td style="font-weight: 400;" width="72">domain</td>
<td style="font-weight: 400;" width="72">Domain localization</td>
<td style="font-weight: 400;" width="72">com</td>
</tr>
<tr>
<td style="font-weight: 400;" width="72">query</td>
<td style="font-weight: 400;" width="72">UTF-encoded product code</td>
<td style="font-weight: 400;" width="72">&#8211;</td>
</tr>
<tr>
<td style="font-weight: 400;" width="72">start_page</td>
<td style="font-weight: 400;" width="72">Starting page number</td>
<td style="font-weight: 400;" width="72">1</td>
</tr>
<tr>
<td style="font-weight: 400;" width="72">pages</td>
<td style="font-weight: 400;" width="72">Number of pages to retrieve</td>
<td style="font-weight: 400;" width="72">1</td>
</tr>
<tr>
<td style="font-weight: 400;" width="72">locale</td>
<td style="font-weight: 400;" width="72">Accept-Language header value. This will change Google search page web interface language (not results). For example if you use domain com and use locale parameter de-DE, the results will still be American, but Accept-Language will be set to de-DE,de;q=0.8. This would imitate person from US searching in com domain, who has his browser's UI set to German. If you don't use this parameter we will set &#8216;Accept-Language' parameter according to domain (i.e. en-US for com). List of available Google locales can be found <a href="#locale">here.</a></td>
<td style="font-weight: 400;" width="72">&#8211;</td>
</tr>
<tr>
<td style="font-weight: 400;" width="72">results_language</td>
<td style="font-weight: 400;" width="72">Results language. List of supported Google languages can be found <a href="#results-language">here.</a></td>
<td style="font-weight: 400;" width="72">&#8211;</td>
</tr>
<tr>
<td style="font-weight: 400;" width="72">geo_location</td>
<td style="font-weight: 400;" width="72">The geographical location that the result should be adapted for. Using this parameter correctly is extremely important to get the right data. For more information, read about our suggested geo_location parameter structures <a href="#geo_location">here</a></td>
<td style="font-weight: 400;" width="72">&#8211;</td>
</tr>
<tr>
<td style="font-weight: 400;" width="72">user_agent_type</td>
<td style="font-weight: 400;" width="72">Device type and browser. The full list can be found <a href="#user-agent">here.</a></td>
<td style="font-weight: 400;" width="72">desktop</td>
</tr>
<tr>
<td style="font-weight: 400;" width="72">render</td>
<td style="font-weight: 400;" width="72">Enable JavaScript rendering. Use when the target requires JavaScript to load content. Only works via Push-Pull (a.k.a. Callback) method. There are two available values for this parameter: html(get raw output) and png (get a Base64-encoded screenshot).</td>
<td style="font-weight: 400;" width="72"></td>
</tr>
<tr>
<td style="font-weight: 400;" width="72">callback_url</td>
<td style="font-weight: 400;" width="72">URL to your callback endpoint</td>
<td style="font-weight: 400;" width="72">&#8211;</td>
</tr>
<tr>
<td style="font-weight: 400;" width="72">parse</td>
<td style="font-weight: 400;" width="72">true will return parsed data. See <a href="#parsed-data">Parsed Data</a> for more information.</td>
<td style="font-weight: 400;" width="72">&#8211;</td>
</tr>
<tr>
<td style="font-weight: 400;" width="72">storage_type</td>
<td style="font-weight: 400;" width="72">Storage service provider. We support Amazon S3 and Google Cloud Storage. The storage_type parameter values for these storage providers are, correspondingly, s3 and gcs. The full implementation can be found on the <a href="#upload-to-storage">Upload to Storage</a> page. This feature only works via Push-Pull (Callback) method.</td>
<td style="font-weight: 400;" width="72">&#8211;</td>
</tr>
<tr>
<td style="font-weight: 400;" width="72">storage_url</td>
<td style="font-weight: 400;" width="72">Your storage bucket name. Only works via Push-Pull (Callback) method.</td>
<td style="font-weight: 400;" width="72">&#8211;</td>
</tr>
<tr>
<td style="font-weight: 400;" colspan="3" width="216">   &#8211; required parameter</td>
</tr>
</tbody>
</table>
</div>
<p>Here the API will download product page for product ID <code>5007040952399054528</code> from Google Shopping on <code>google.com</code>. It will also get first 4 pages with pricing information. This is how it looks in Push-Pull:</p>
<pre>curl --user user:pass1 'https://data.oxylabs.io/v1/queries' -H "Content-Type: application/json"
 -d '{"source": "google_shopping_product", "domain": "com", "query": "5007040952399054528"}'
</pre>
<p>The same in Realtime:</p>
<pre>curl --user user:pass1 'https://realtime.oxylabs.io/v1/queries' -H "Content-Type: application/json"
 -d '{"source": "google_shopping_product", "domain": "com", "query": "5007040952399054528"}'
</pre>
<hr />
<h3 id="shopping-product-pricing">Shopping Product Pricing</h3>
<p><img loading="lazy" decoding="async" class="size-full wp-image-8215 alignnone" src="https://www.proxysp.com/wp-content/uploads/2021/09/Real-Time-Crawler-for-Google-Shopping-Product-Pricing.png" alt="Real-Time Crawler for Google Shopping Product Pricing" width="475" height="23" srcset="https://proxysp.com/wp-content/uploads/2021/09/Real-Time-Crawler-for-Google-Shopping-Product-Pricing.png 475w, https://proxysp.com/wp-content/uploads/2021/09/Real-Time-Crawler-for-Google-Shopping-Product-Pricing-300x15.png 300w" sizes="(max-width: 475px) 100vw, 475px" /></p>
<p><code>google_shopping_pricing</code> source is designed to retrieve Google Shopping product pricing page for specified product.</p>
<p><span class="test">Query parameters</span></p>
<div class="su-table su-table-responsive su-table-alternate">
<table width="216">
<tbody>
<tr>
<td style="font-weight: 400;" width="72"><strong>Parameter</strong></td>
<td style="font-weight: 400;" width="72"><strong>Description</strong></td>
<td style="font-weight: 400;" width="72"><strong>Default Value</strong></td>
</tr>
<tr>
<td style="font-weight: 400;" width="72">source</td>
<td style="font-weight: 400;" width="72">Data source</td>
<td style="font-weight: 400;" width="72">google_shopping_pricing</td>
</tr>
<tr>
<td style="font-weight: 400;" width="72">domain</td>
<td style="font-weight: 400;" width="72">Domain localization</td>
<td style="font-weight: 400;" width="72">com</td>
</tr>
<tr>
<td style="font-weight: 400;" width="72">query</td>
<td style="font-weight: 400;" width="72">UTF-encoded product code</td>
<td style="font-weight: 400;" width="72">&#8211;</td>
</tr>
<tr>
<td style="font-weight: 400;" width="72">start_page</td>
<td style="font-weight: 400;" width="72">Starting page number</td>
<td style="font-weight: 400;" width="72">1</td>
</tr>
<tr>
<td style="font-weight: 400;" width="72">pages</td>
<td style="font-weight: 400;" width="72">Number of pages to retrieve</td>
<td style="font-weight: 400;" width="72">1</td>
</tr>
<tr>
<td style="font-weight: 400;" width="72">locale</td>
<td style="font-weight: 400;" width="72">Accept-Language header value. This will change Google search page web interface language (not results). For example if you use domain com and use locale parameter de-DE, the results will still be American, but Accept-Language will be set to de-DE,de;q=0.8. This would imitate person from US searching in com domain, who has his browser's UI set to German. If you don't use this parameter we will set &#8216;Accept-Language' parameter according to domain (i.e. en-US for com). List of available Google locales can be found <a href="#locale">here.</a></td>
<td style="font-weight: 400;" width="72">&#8211;</td>
</tr>
<tr>
<td style="font-weight: 400;" width="72">results_language</td>
<td style="font-weight: 400;" width="72">Results language. List of supported Google languages can be found <a href="#results-language">here.</a></td>
<td style="font-weight: 400;" width="72">&#8211;</td>
</tr>
<tr>
<td style="font-weight: 400;" width="72">geo_location</td>
<td style="font-weight: 400;" width="72">The geographical location that the result should be adapted for. Using this parameter correctly is extremely important to get the right data. For more information, read about our suggested geo_location parameter structures <a href="#geo_location">here</a></td>
<td style="font-weight: 400;" width="72">&#8211;</td>
</tr>
<tr>
<td style="font-weight: 400;" width="72">user_agent_type</td>
<td style="font-weight: 400;" width="72">Device type and browser. The full list can be found <a href="#user-agent">here.</a></td>
<td style="font-weight: 400;" width="72">desktop</td>
</tr>
<tr>
<td style="font-weight: 400;" width="72">render</td>
<td style="font-weight: 400;" width="72">Enable JavaScript rendering. Use when the target requires JavaScript to load content. Only works via Push-Pull (a.k.a. Callback) method. There are two available values for this parameter: html(get raw output) and png (get a Base64-encoded screenshot).</td>
<td style="font-weight: 400;" width="72"></td>
</tr>
<tr>
<td style="font-weight: 400;" width="72">callback_url</td>
<td style="font-weight: 400;" width="72">URL to your callback endpoint</td>
<td style="font-weight: 400;" width="72">&#8211;</td>
</tr>
<tr>
<td style="font-weight: 400;" width="72">parse</td>
<td style="font-weight: 400;" width="72">true will return parsed data. See <a href="#parsed-data">Parsed Data</a> for more information.</td>
<td style="font-weight: 400;" width="72">&#8211;</td>
</tr>
<tr>
<td style="font-weight: 400;" width="72">storage_type</td>
<td style="font-weight: 400;" width="72">Storage service provider. We support Amazon S3 and Google Cloud Storage. The storage_type parameter values for these storage providers are, correspondingly, s3 and gcs. The full implementation can be found on the<a href="#upload-to-storage"> Upload to Storage</a> page. This feature only works via Push-Pull (Callback) method.</td>
<td style="font-weight: 400;" width="72">&#8211;</td>
</tr>
<tr>
<td style="font-weight: 400;" width="72">storage_url</td>
<td style="font-weight: 400;" width="72">Your storage bucket name. Only works via Push-Pull (Callback) method.</td>
<td style="font-weight: 400;" width="72">&#8211;</td>
</tr>
<tr>
<td style="font-weight: 400;" colspan="3" width="216">   &#8211; required parameter</td>
</tr>
</tbody>
</table>
</div>
<p>Here the API will download product pricing page for product ID <code>5007040952399054528</code> from Google Shopping on <code>google.com</code>. Here is an example in Push-Pull:</p>
<pre>curl --user user:pass1 'https://data.oxylabs.io/v1/queries' -H "Content-Type: application/json"
 -d '{"source": "google_shopping_pricing", "domain": "com", "query": "5007040952399054528"}'
</pre>
<p>The same in Realtime:</p>
<pre>curl --user user:pass1 'https://realtime.oxylabs.io/v1/queries' -H "Content-Type: application/json"
 -d '{"source": "google_shopping_pricing", "domain": "com", "query": "5007040952399054528"}'
</pre>
<hr />
<h3 id="images">Images</h3>
<p><img loading="lazy" decoding="async" class="size-full wp-image-8216 alignnone" src="https://www.proxysp.com/wp-content/uploads/2021/09/Real-Time-Crawler-for-Google-Images.png" alt="Real-Time Crawler for Google Images" width="477" height="27" srcset="https://proxysp.com/wp-content/uploads/2021/09/Real-Time-Crawler-for-Google-Images.png 477w, https://proxysp.com/wp-content/uploads/2021/09/Real-Time-Crawler-for-Google-Images-300x17.png 300w" sizes="(max-width: 477px) 100vw, 477px" /></p>
<p><code>google_images</code> source is designed to retrieve Images search page for images that are similar to the one provided with <code>query</code> parameter, as well as websites containing those images.</p>
<p><span class="test">Query parameters</span></p>
<div class="su-table su-table-responsive su-table-alternate">
<table width="216">
<tbody>
<tr>
<td style="font-weight: 400;" width="72"><strong>Parameter</strong></td>
<td style="font-weight: 400;" width="72"><strong>Description</strong></td>
<td style="font-weight: 400;" width="72"><strong>Default Value</strong></td>
</tr>
<tr>
<td style="font-weight: 400;" width="72">source</td>
<td style="font-weight: 400;" width="72">Data source</td>
<td style="font-weight: 400;" width="72">google_images</td>
</tr>
<tr>
<td style="font-weight: 400;" width="72">domain</td>
<td style="font-weight: 400;" width="72">Domain localization</td>
<td style="font-weight: 400;" width="72">com</td>
</tr>
<tr>
<td style="font-weight: 400;" width="72">query</td>
<td style="font-weight: 400;" width="72">URL to image</td>
<td style="font-weight: 400;" width="72">&#8211;</td>
</tr>
<tr>
<td style="font-weight: 400;" width="72">start_page</td>
<td style="font-weight: 400;" width="72">Starting page number</td>
<td style="font-weight: 400;" width="72">1</td>
</tr>
<tr>
<td style="font-weight: 400;" width="72">pages</td>
<td style="font-weight: 400;" width="72">Number of pages to retrieve</td>
<td style="font-weight: 400;" width="72">1</td>
</tr>
<tr>
<td style="font-weight: 400;" width="72">locale</td>
<td style="font-weight: 400;" width="72">Accept-Language header value. This will change Google search page web interface language (not results). For example if you use domain com and use locale parameter de-DE, the results will still be American, but Accept-Language will be set to de-DE,de;q=0.8. This would imitate person from US searching in com domain, who has his browser's UI set to German. If you don't use this parameter we will set &#8216;Accept-Language' parameter according to domain (i.e. en-US for com). List of available Google locales can be found <a href="#locale">here.</a></td>
<td style="font-weight: 400;" width="72">&#8211;</td>
</tr>
<tr>
<td style="font-weight: 400;" width="72">geo_location</td>
<td style="font-weight: 400;" width="72">The geographical location that the result should be adapted for. Using this parameter correctly is extremely important to get the right data. For more information, read about our suggested geo_location parameter structures <a href="#geo_location">here</a></td>
<td style="font-weight: 400;" width="72">&#8211;</td>
</tr>
<tr>
<td style="font-weight: 400;" width="72">user_agent_type</td>
<td style="font-weight: 400;" width="72">Device type and browser. The full list can be found <a href="#user-agent">here.</a></td>
<td style="font-weight: 400;" width="72">desktop</td>
</tr>
<tr>
<td style="font-weight: 400;" width="72">render</td>
<td style="font-weight: 400;" width="72">Enable JavaScript rendering. Use when the target requires JavaScript to load content. Only works via Push-Pull (a.k.a. Callback) method. There are two available values for this parameter: html(get raw output) and png (get a Base64-encoded screenshot).</td>
<td style="font-weight: 400;" width="72"></td>
</tr>
<tr>
<td style="font-weight: 400;" width="72">callback_url</td>
<td style="font-weight: 400;" width="72">URL to your callback endpoint</td>
<td style="font-weight: 400;" width="72">&#8211;</td>
</tr>
<tr>
<td style="font-weight: 400;" width="72">context:</td>
<td style="font-weight: 400;" rowspan="2" width="72">true will turn off spelling auto-correction.</td>
<td style="font-weight: 400;" rowspan="2" width="72">FALSE</td>
</tr>
<tr>
<td style="font-weight: 400;" width="72">nfpr</td>
</tr>
<tr>
<td style="font-weight: 400;" width="72">context:</td>
<td style="font-weight: 400;" rowspan="2" width="72">Results language. List of supported Google languages can be found <a href="#results-language">here.</a></td>
<td style="font-weight: 400;" rowspan="2" width="72">&#8211;</td>
</tr>
<tr>
<td style="font-weight: 400;" width="72">results_language</td>
</tr>
<tr>
<td style="font-weight: 400;" width="72">storage_type</td>
<td style="font-weight: 400;" width="72">Storage service provider. We support Amazon S3 and Google Cloud Storage. The storage_type parameter values for these storage providers are, correspondingly, s3 and gcs. The full implementation can be found on the <a href="#upload-to-storage">Upload to Storage</a> page. This feature only works via Push-Pull (Callback) method.</td>
<td style="font-weight: 400;" width="72">&#8211;</td>
</tr>
<tr>
<td style="font-weight: 400;" width="72">storage_url</td>
<td style="font-weight: 400;" width="72">Your storage bucket name. Only works via Push-Pull (Callback) method.</td>
<td style="font-weight: 400;" width="72">&#8211;</td>
</tr>
<tr>
<td style="font-weight: 400;" colspan="3" width="216">   &#8211; required parameter</td>
</tr>
</tbody>
</table>
</div>
<p>In this example the API will download Image search page of similar images for image <code>https://newsneakernews-wpengine.netdna-ssl.com/wp-content/uploads/2017/03/adidas-boost-march-25-2017.jpg</code> from <code>google.com</code>. This is Push-Pull method:</p>
<pre>curl --user user:pass1 'https://data.oxylabs.io/v1/queries' -H "Content-Type: application/json"
 -d '{"source": "google_images", "domain": "com", "query": "https://newsneakernews-wpengine.netdna-ssl.com/wp-content/uploads/2017/03/adidas-boost-march-25-2017.jpg"}'
</pre>
<p>And this is the same request in Realtime:</p>
<pre>curl --user user:pass1 'https://realtime.oxylabs.io/v1/queries' -H "Content-Type: application/json"
 -d '{"source": "google_images", "domain": "com", "query": "https://www.example.com/img/image.jpg"}'
</pre>
<hr />
<h3 id="suggestions">Suggestions</h3>
<p><img loading="lazy" decoding="async" class="size-full wp-image-8217 alignnone" src="https://www.proxysp.com/wp-content/uploads/2021/09/Real-Time-Crawler-for-Google-Suggestions.png" alt="Real-Time Crawler for Google Suggestions" width="476" height="25" srcset="https://proxysp.com/wp-content/uploads/2021/09/Real-Time-Crawler-for-Google-Suggestions.png 476w, https://proxysp.com/wp-content/uploads/2021/09/Real-Time-Crawler-for-Google-Suggestions-300x16.png 300w" sizes="(max-width: 476px) 100vw, 476px" /></p>
<p><code>google_suggest</code> source is designed to retrieve Google keyword suggestions.</p>
<p><span class="test">Query parameters</span></p>
<div class="su-table su-table-responsive su-table-alternate">
<table width="216">
<tbody>
<tr>
<td style="font-weight: 400;" width="72"><strong>Parameter</strong></td>
<td style="font-weight: 400;" width="72"><strong>Description</strong></td>
<td style="font-weight: 400;" width="72"><strong>Default Value</strong></td>
</tr>
<tr>
<td style="font-weight: 400;" width="72">source</td>
<td style="font-weight: 400;" width="72">Data source</td>
<td style="font-weight: 400;" width="72">google_suggest</td>
</tr>
<tr>
<td style="font-weight: 400;" width="72">query</td>
<td style="font-weight: 400;" width="72">UTF-encoded keyword</td>
<td style="font-weight: 400;" width="72">&#8211;</td>
</tr>
<tr>
<td style="font-weight: 400;" width="72">locale</td>
<td style="font-weight: 400;" width="72">Accept-Language header value. This will change Google search page web interface language (not results). For example if you use domain com and use locale parameter de-DE, the results will still be American, but Accept-Language will be set to de-DE,de;q=0.8. This would imitate person from US searching in com domain, who has his browser's UI set to German. If you don't use this parameter we will set &#8216;Accept-Language' parameter according to domain (i.e. en-US for com). List of available Google locales can be found<a href="#locale"> here.</a></td>
<td style="font-weight: 400;" width="72">&#8211;</td>
</tr>
<tr>
<td style="font-weight: 400;" width="72">geo_location</td>
<td style="font-weight: 400;" width="72">The geographical location that the result should be adapted for. Using this parameter correctly is extremely important to get the right data. For more information, read about our suggested geo_location parameter structures <a href="#geo_location">here</a></td>
<td style="font-weight: 400;" width="72">&#8211;</td>
</tr>
<tr>
<td style="font-weight: 400;" width="72">user_agent_type</td>
<td style="font-weight: 400;" width="72">Device type and browser. The full list can be found<a href="#user-agent"> here.</a></td>
<td style="font-weight: 400;" width="72">desktop</td>
</tr>
<tr>
<td style="font-weight: 400;" width="72">render</td>
<td style="font-weight: 400;" width="72">Enable JavaScript rendering. Use when the target requires JavaScript to load content. Only works via Push-Pull (a.k.a. Callback) method. There are two available values for this parameter: html(get raw output) and png (get a Base64-encoded screenshot).</td>
<td style="font-weight: 400;" width="72"></td>
</tr>
<tr>
<td style="font-weight: 400;" width="72">callback_url</td>
<td style="font-weight: 400;" width="72">URL to your callback endpoint</td>
<td style="font-weight: 400;" width="72">&#8211;</td>
</tr>
<tr>
<td style="font-weight: 400;" width="72">storage_type</td>
<td style="font-weight: 400;" width="72">Storage service provider. We support Amazon S3 and Google Cloud Storage. The storage_type parameter values for these storage providers are, correspondingly, s3 and gcs. The full implementation can be found on the<a href="#upload-to-storage"> Upload to Storage</a> page. This feature only works via Push-Pull (Callback) method.</td>
<td style="font-weight: 400;" width="72">&#8211;</td>
</tr>
<tr>
<td style="font-weight: 400;" width="72">storage_url</td>
<td style="font-weight: 400;" width="72">Your storage bucket name. Only works via Push-Pull (Callback) method.</td>
<td style="font-weight: 400;" width="72">&#8211;</td>
</tr>
<tr>
<td style="font-weight: 400;" colspan="3" width="216">   &#8211; required parameter</td>
</tr>
</tbody>
</table>
</div>
<p>API makes request to Google Suggestions page to retrieve suggestions for keyword <code>adidas</code>. The API will post a JSON payload to <code>your.callback.url</code> containing the URL to download the result once the task is finished. Here is an example with Push-Pull:</p>
<pre>curl --user user:pass1 'https://data.oxylabs.io/v1/queries' -H "Content-Type: application/json"
 -d '{"source": "google_suggest", "query": "adidas", "callback_url": "https://your.callback.url"}'
</pre>
<p>The same request with Realtime:</p>
<pre>curl --user user:pass1 'https://realtime.oxylabs.io/v1/queries' -H "Content-Type: application/json"
 -d '{"source": "google_suggest", "query": "adidas"}'
</pre>
<hr />
<h3 id="keyword-data">Keyword Data</h3>
<p><img loading="lazy" decoding="async" class="size-full wp-image-8218 alignnone" src="https://www.proxysp.com/wp-content/uploads/2021/09/Real-Time-Crawler-for-Google-Keyword-Data.png" alt="Real-Time Crawler for Google Keyword Data" width="472" height="23" srcset="https://proxysp.com/wp-content/uploads/2021/09/Real-Time-Crawler-for-Google-Keyword-Data.png 472w, https://proxysp.com/wp-content/uploads/2021/09/Real-Time-Crawler-for-Google-Keyword-Data-300x15.png 300w" sizes="(max-width: 472px) 100vw, 472px" /></p>
<p><code>google_msv</code> data source will retrieve Google keyword data for specified keywords, as well as suggested keywords (unless passing ideas=False in context). Keywords are passed in query parameter as a string. Keywords are separated by commas. Commas within a keyword are not supported, so a keyword &#8220;Water Bottle 5,0L&#8221; will actually be interpreted as 2 keywords: &#8220;Water Bottle 5&#8221; and &#8220;0L&#8221;. See output example on the right for more details.</p>
<p><span class="test">Query parameters</span></p>
<div class="su-table su-table-responsive su-table-alternate">
<table width="216">
<tbody>
<tr>
<td style="font-weight: 400;" width="72"><strong>Parameter</strong></td>
<td style="font-weight: 400;" width="72"><strong>Description</strong></td>
<td style="font-weight: 400;" width="72"><strong>Default Value</strong></td>
</tr>
<tr>
<td style="font-weight: 400;" width="72">source</td>
<td style="font-weight: 400;" width="72">Data source</td>
<td style="font-weight: 400;" width="72">google_msv</td>
</tr>
<tr>
<td style="font-weight: 400;" width="72">query</td>
<td style="font-weight: 400;" width="72">UTF-encoded keywords, separated by commas</td>
<td style="font-weight: 400;" width="72">&#8211;</td>
</tr>
<tr>
<td style="font-weight: 400;" width="72">geo_location</td>
<td style="font-weight: 400;" width="72">The geographical location that the result should be adapted for. Using this parameter correctly is extremely important to get the right data. For more information, read about our suggested geo_location parameter structures<a href="#geo_location"> here</a></td>
<td style="font-weight: 400;" width="72">&#8211;</td>
</tr>
<tr>
<td style="font-weight: 400;" width="72">context:</td>
<td style="font-weight: 400;" rowspan="2" width="72">Language, for example english or french. No parameter or empty value will return results for all languages.</td>
<td style="font-weight: 400;" rowspan="2" width="72"></td>
</tr>
<tr>
<td style="font-weight: 400;" width="72">language</td>
</tr>
<tr>
<td style="font-weight: 400;" width="72">context:</td>
<td style="font-weight: 400;" rowspan="2" width="72">3-symbol currency code</td>
<td style="font-weight: 400;" rowspan="2" width="72">EUR</td>
</tr>
<tr>
<td style="font-weight: 400;" width="72">currency</td>
</tr>
<tr>
<td style="font-weight: 400;" width="72">context:</td>
<td style="font-weight: 400;" rowspan="2" width="72">If true, returns keyword ideas, false will return only data for requested keywords</td>
<td style="font-weight: 400;" rowspan="2" width="72">TRUE</td>
</tr>
<tr>
<td style="font-weight: 400;" width="72">ideas</td>
</tr>
<tr>
<td style="font-weight: 400;" width="72">context:</td>
<td style="font-weight: 400;" rowspan="2" width="72">When fetching ideas, will limit the number of idea keywords to retrieve to provided limit rounded up to the nearest multiple of 50 (e.g. 20 -&gt; 50, 123 -&gt; 150). 0 means no limit.</td>
<td style="font-weight: 400;" rowspan="2" width="72">0</td>
</tr>
<tr>
<td style="font-weight: 400;" width="72">ideas_limit</td>
</tr>
<tr>
<td style="font-weight: 400;" width="72">context:</td>
<td style="font-weight: 400;" rowspan="2" width="72">When fetching ideas, will filter out idea keywords that have a lower average monthly search volume than the provided number. 0 means no filter.</td>
<td style="font-weight: 400;" rowspan="2" width="72">0</td>
</tr>
<tr>
<td style="font-weight: 400;" width="72">min_amsv</td>
</tr>
<tr>
<td style="font-weight: 400;" width="72">context:</td>
<td style="font-weight: 400;" rowspan="2" width="72">When fetching ideas, will filter out idea keywords that have a higher average monthly search volume than the provided number. 0 means no filter.</td>
<td style="font-weight: 400;" rowspan="2" width="72">0</td>
</tr>
<tr>
<td style="font-weight: 400;" width="72">max_amsv</td>
</tr>
<tr>
<td style="font-weight: 400;" width="72">context:</td>
<td style="font-weight: 400;" rowspan="2" width="72">When fetching ideas, will filter out idea keywords that do not fall into the provided category. Available categories in .</td>
<td style="font-weight: 400;" rowspan="2" width="72">null</td>
</tr>
<tr>
<td style="font-weight: 400;" width="72">category</td>
</tr>
<tr>
<td style="font-weight: 400;" width="72">storage_type</td>
<td style="font-weight: 400;" width="72">Storage service provider. We support Amazon S3 and Google Cloud Storage. The storage_type parameter values for these storage providers are, correspondingly, s3 and gcs. The full implementation can be found on the <a href="#upload-to-storage">Upload to Storage</a> page. This feature only works via Push-Pull (Callback) method.</td>
<td style="font-weight: 400;" width="72">&#8211;</td>
</tr>
<tr>
<td style="font-weight: 400;" width="72">storage_url</td>
<td style="font-weight: 400;" width="72">Your storage bucket name. Only works via Push-Pull (Callback) method.</td>
<td style="font-weight: 400;" width="72">&#8211;</td>
</tr>
<tr>
<td style="font-weight: 400;" colspan="3" width="216">   &#8211; required parameter</td>
</tr>
</tbody>
</table>
</div>
In this example API will keyword data for <code>meilleur restaurant</code> and all suggested keywords. Keyword language is <code>french</code>, and geo location is <code>Paris,Ile-de-France,France</code> and currency is <code>EUR</code>.</p>
<pre>curl --user user:pass1 'https://data.oxylabs.io/v1/queries' -H "Content-Type: application/json"
-d '{"source": "google_msv", "query": "meilleur restaurant", "geo_location": "Paris,Ile-de-France,France", "context": [{"key": "language", "value": "french"},{"key": "currency", "value": "EUR"}, {"key": "ideas", "value": true}]}'

# OR if you don't want ideas:

curl --user user:pass1 'https://data.oxylabs.io/v1/queries' -H "Content-Type: application/json"
-d '{"source": "google_msv", "query": "meilleur restaurant", "geo_location": "Paris,Ile-de-France,France", "context": [{"key": "language", "value": "french"},{"key": "currency", "value": "EUR"}, {"key": "ideas", "value": false}]}'
</pre>
<p>Sample output (historicalSearchVolume entries and ideas entries cut):</p>
<pre>{
    "results": [
    {
        "content":
        {
            "ideas": [
            {
                "cpc": 4.712038,
                "keyword": "meilleur restaurant a paris",
                "currency": "EUR",
                "competition": 0.3385383889238515,
                "averageSearchVolume": 1900,
                "historicalSearchVolume": [
                {
                    "date": "201803",
                    "searchVolume": 1600
                },
                {
                    "date": "201802",
                    "searchVolume": 1900
                }]
            }],
            "seeds": [
            {
                "cpc": 4.05351,
                "keyword": "meilleur restaurant",
                "currency": "EUR",
                "competition": 0.3385341239238515,
                "averageSearchVolume": 2900,
                "historicalSearchVolume": [
                {
                    "date": "201803",
                    "searchVolume": 3600
                },
                {
                    "date": "201802",
                    "searchVolume": 2900
                }]
            }]
        }
    }]
}
</pre>
<hr />
<h2 id="parsed-data">Parsed data</h2>
<p>Google Web Search (SERP) page is the only one that is extensively supported in parsed data delivery. Below you can find which particular SERP page fields we parse. Structure data is available with <a href="#search">Search</a> (all the time) and <a href="#direct">Direct</a> (as long as SERP page URL is submitted).</p>
<p>Google Web Search (<code>"source": "google_search"</code>) supports CSV output. To access it, please include these parameters in your Google Web Search job <code>{"source": "google_search", "parse": true, "parser_type": "v2"}</code>. The result retrieval URL for a CSV job is structured like this: <code>http://data.oxylabs.io/v1/queries/{job_id}/results/normalized?format=csv</code>.</p>
<hr />
<h3 id="search-2">Search</h3>
<h4 id="organic-amp-paid"><strong>Organic & Paid</strong></h4>
<p><img loading="lazy" decoding="async" class="aligncenter size-full wp-image-8220" src="https://www.proxysp.com/wp-content/uploads/2021/09/Real-Time-Crawler-for-Google-Organic-Paid.png" alt="Real-Time Crawler for Google Organic & Paid" width="603" height="437" srcset="https://proxysp.com/wp-content/uploads/2021/09/Real-Time-Crawler-for-Google-Organic-Paid.png 603w, https://proxysp.com/wp-content/uploads/2021/09/Real-Time-Crawler-for-Google-Organic-Paid-300x217.png 300w" sizes="(max-width: 603px) 100vw, 603px" /></p>
<pre>"results": {
  "paid": [
    {
      "pos": 1,
      "url": "https://www.adidas.com/us",
      "desc": "New York · 10 locations nearby",
      "title": "adidas.com | adidas® Official Site | Official adidas® Online Store‎",
      "url_shown": "www.adidas.com/Official/Site",
      "pos_overall": 1
    }
  ],
  "organic": [
    {
      "pos": 1,
      "url": "https://www.adidas.com/us",
      "desc": "Welcome to adidas Shop for adidas shoes, clothing and view new collections for adidas Originals, running, football, training and much more.",
      "title": "adidas Official Website | adidas US",
      "url_shown": "https://www.adidas.com › ...",
      "pos_overall": 2
    },
    {
      "pos": 2,
      "url": "https://www.mena.adidas.com/",
      "desc": "Browse for adidas shoes, clothing and collections, adidas Originals, Running, Football, Training and more on the official adidas website.",
      "title": "adidas Official Website | adidas",
      "url_shown": "https://www.mena.adidas.com",
      "pos_overall": 6
    },
    {
      "pos": 3,
      "url": "https://www.adidas-group.com/",
      "desc": "adidas AG Supervisory Board announces candidates as shareholder ... adidas celebrates its 70th anniversary and the opening of the Arena building. August 9 ...",
      "title": "adidas - Home",
      "url_shown": "https://www.adidas-group.com",
      "pos_overall": 7
    },
    {
      "pos": 4,
      "url": "https://www.nycgo.com/shopping/the-adidas-store",
      "desc": "You don't so much shop in this flagship Adidas store as you experience it. With an interior modeled on a high school stadium, this four-story Midtown outlet—the  ...",
      "title": "The Adidas Store (Midtown) | NYCgo - NYCgo.com",
      "url_shown": "https://www.nycgo.com › shopping › the-adidas-store",
      "pos_overall": 8
    },
    {
      "pos": 5,
      "url": "https://www.yelp.com/search?find_desc=adidas+store&find_loc=Manhattan%2C+NY",
      "desc": "Reviews on Adidas Store in Manhattan, NY - Adidas, Adidas Originals New York SoHo, adidas Sport Performance, Upper 90 Soccer - Manhattan, Nike Soho, ...",
      "title": "Adidas Store Manhattan, NY - Last Updated August 2019 - Yelp",
      "url_shown": "https://www.yelp.com › search › find_desc=adidas+store",
      "pos_overall": 9
    },
    {
      "pos": 6,
      "url": "https://en.wikipedia.org/wiki/Adidas",
      "desc": "Adidas AG is a multinational corporation, founded and headquartered in Herzogenaurach, Germany, that designs and manufactures shoes, clothing and ...",
      "title": "Adidas - Wikipedia",
      "url_shown": "https://en.wikipedia.org › wiki › Adidas",
      "pos_overall": 10
    }
  ]
</pre>
<hr />
<h4 id="product-listing-ads"><strong>Product Listing Ads</strong></h4>
<p><img loading="lazy" decoding="async" class="aligncenter size-full wp-image-8221" src="https://www.proxysp.com/wp-content/uploads/2021/09/Real-Time-Crawler-for-Google-Product-Listing-Ads.png" alt="Real-Time Crawler for Google Product Listing Ads" width="605" height="429" srcset="https://proxysp.com/wp-content/uploads/2021/09/Real-Time-Crawler-for-Google-Product-Listing-Ads.png 605w, https://proxysp.com/wp-content/uploads/2021/09/Real-Time-Crawler-for-Google-Product-Listing-Ads-300x213.png 300w" sizes="(max-width: 605px) 100vw, 605px" /></p>
<pre>"pla": [
  {
    "pos": 1,
    "url": "http://www.adidas.com/us/asweego-shoes/F37038.html?cm_mmc=AdieSEM_Feeds-_-GoogleProductAds-_-NA-_-F37038&cm_mmca1=US&cm_mmca2=NA&kpid=F37038&sourceid=543457011",
    "price": "$40.00",
    "title": "adidas Asweego Shoes Black 10.5 - Mens Running Shoes",
    "seller": "adidas",
    "source": ""
  },
  {
    "pos": 2,
    "url": "http://www.adidas.com/us/baseline-shoes/AW4299.html?cm_mmc=AdieSEM_Feeds-_-GoogleProductAds-_-NA-_-AW4299&cm_mmca1=US&cm_mmca2=NA&kpid=AW4299&sourceid=543457011",
    "price": "$50.00",
    "title": "adidas Baseline Shoes White 13K - Originals Shoes",
    "seller": "adidas",
    "source": ""
  },
  ...
  {
    "pos": 29,
    "url": "https://www.zappos.com/product/8466374/color/21766",
    "price": "$79.95",
    "title": "adidas Superstar W Originals Women's Classic Shoes White/Black/White : 9 B - Medium",
    "seller": "Zappos.com",
    "source": ""
  }
]
</pre>
<hr />
<h4 id="top-stories"><strong>Top Stories</strong></h4>
<p><img loading="lazy" decoding="async" class="aligncenter size-full wp-image-8222" src="https://www.proxysp.com/wp-content/uploads/2021/09/Real-Time-Crawler-for-Google-Top-Stories.png" alt="Real-Time Crawler for Google Top Stories" width="609" height="427" srcset="https://proxysp.com/wp-content/uploads/2021/09/Real-Time-Crawler-for-Google-Top-Stories.png 609w, https://proxysp.com/wp-content/uploads/2021/09/Real-Time-Crawler-for-Google-Top-Stories-300x210.png 300w" sizes="(max-width: 609px) 100vw, 609px" /></p>
<pre>"top_stories": [
  {
    "url": "https://www.cnet.com/news/spacex-starhopper-prototype-takes-giant-leap-for-elon-musk/",
    "source": "Cnet",
    "headline": "SpaceX Starhopper rocket prototype takes giant leap for Elon Musk",
    "timeframe": "13 hours ago"
  },
  {
    "url": "https://electrek.co/2019/08/27/elon-musk-tesla-china-made-model-3-rumor/",
    "source": "Electrek",
    "headline": "Elon Musk is rumored to unveil first China-made Tesla Model 3 at event this \nweek",
    "timeframe": "16 hours ago"
  },
  {
    "url": "https://www.bloomberg.com/news/articles/2019-08-28/musk-to-join-china-ai-summit-despite-trump-ordering-firms-out",
    "source": "Bloomberg",
    "headline": "Elon Musk and Jack Ma Will Debate AI at China Summit",
    "timeframe": "4 hours ago"
  }
]
</pre>
<hr />
<h4 id="featured-snippet"><strong>Featured Snippet</strong></h4>
<p><img loading="lazy" decoding="async" class="aligncenter size-full wp-image-8223" src="https://www.proxysp.com/wp-content/uploads/2021/09/Real-Time-Crawler-for-Google-Featured-Snippet.png" alt="Real-Time Crawler for Google Featured Snippet" width="612" height="435" srcset="https://proxysp.com/wp-content/uploads/2021/09/Real-Time-Crawler-for-Google-Featured-Snippet.png 612w, https://proxysp.com/wp-content/uploads/2021/09/Real-Time-Crawler-for-Google-Featured-Snippet-300x213.png 300w" sizes="(max-width: 612px) 100vw, 612px" /></p>
<pre>"featured_snippet": [
  {
    "url": "https://en.wikipedia.org/wiki/Contract_for_difference",
    "desc": "In finance, a contract for difference (CFD) is a contract between two parties, typically described as \"buyer\" and \"seller\", stipulating that the seller will pay to the buyer the difference between the current value of an asset and its value at contract time (if the difference is negative, then the buyer pays instead to ...",
    "title": "Contract for difference - Wikipedia",
    "url_shown": "https://en.wikipedia.org › wiki › Contract_for_difference",
    "pos_overall": 1
  }
]
</pre>
<hr />
<h4 id="knowledge-base"><strong>Knowledge Base</strong></h4>
<p><img loading="lazy" decoding="async" class="aligncenter size-full wp-image-8224" src="https://www.proxysp.com/wp-content/uploads/2021/09/Real-Time-Crawler-for-Google-Knowledge-Base.png" alt="Real-Time Crawler for Google Knowledge Base" width="611" height="430" srcset="https://proxysp.com/wp-content/uploads/2021/09/Real-Time-Crawler-for-Google-Knowledge-Base.png 611w, https://proxysp.com/wp-content/uploads/2021/09/Real-Time-Crawler-for-Google-Knowledge-Base-300x211.png 300w" sizes="(max-width: 611px) 100vw, 611px" /></p>
<pre>"knowledge": {
  "title": "Adidas",
  "factoids": [
    {
      "title": "Stock price",
      "content": "ADDDF (OTCMKTS) $291.81 +2.74 (+0.95%)Aug 23, 4:00 PM EDT - Disclaimer"
    },
    {
      "title": "Founder",
      "content": "Adolf Dassler"
    },
    {
      "title": "Founded",
      "content": "August 18, 1949, Herzogenaurach, Germany"
    },
    {
      "title": "Headquarters",
      "content": "Herzogenaurach, Germany"
    },
    {
      "title": "Subsidiaries",
      "content": "Reebok, Five Ten Footwear, Runtastic, Ashworth, MORE"
    },
    {
      "title": "Website",
      "content": "https://www.adidas.com/us"
    }
  ],
  "subtitle": "Design company",
  "description": "DescriptionAdidas AG is a multinational corporation, founded and headquartered in Herzogenaurach, Germany, that designs and manufactures shoes, clothing and accessories. It is the largest sportswear manufacturer in Europe, and the second largest in the world, after Nike. Wikipedia"
}
</pre>
<hr />
<h4 id="local-pack"><strong>Local Pack</strong></h4>
<p><img loading="lazy" decoding="async" class="aligncenter size-full wp-image-8225" src="https://www.proxysp.com/wp-content/uploads/2021/09/Real-Time-Crawler-for-Google-Local-Pack.png" alt="Real-Time Crawler for Google Local Pack" width="613" height="434" srcset="https://proxysp.com/wp-content/uploads/2021/09/Real-Time-Crawler-for-Google-Local-Pack.png 613w, https://proxysp.com/wp-content/uploads/2021/09/Real-Time-Crawler-for-Google-Local-Pack-300x212.png 300w" sizes="(max-width: 613px) 100vw, 613px" /></p>
<pre>"local_pack": [
  {
    "links": [
      {
        "href": "https://www.adidas.com/us?utm_source=gmb&utm_medium=organic&utm_campaign=US470198_local",
        "title": "Website"
      },
      {
        "href": "#",
        "title": "Directions"
      }
    ],
    "phone": "",
    "title": "adidas Originals Flagship Store",
    "rating": 0,
    "address": "Open ⋅ Closes 7PM",
    "subtitle": "(212) 966-0954",
    "pos_overall": 3,
    "rating_count": 0
  }
]
</pre>
<hr />
<h4 id="twitter-feed"><strong>Twitter Feed</strong></h4>
<p><img loading="lazy" decoding="async" class="aligncenter size-full wp-image-8226" src="https://www.proxysp.com/wp-content/uploads/2021/09/Real-Time-Crawler-for-Google-Twitter-Feed.png" alt="Real-Time Crawler for Google Twitter Feed" width="617" height="433" srcset="https://proxysp.com/wp-content/uploads/2021/09/Real-Time-Crawler-for-Google-Twitter-Feed.png 617w, https://proxysp.com/wp-content/uploads/2021/09/Real-Time-Crawler-for-Google-Twitter-Feed-300x211.png 300w" sizes="(max-width: 617px) 100vw, 617px" /></p>
<pre>"twitter": [
  {
    "pos": 1,
    "url": "https://twitter.com/elonmusk",
    "title": "Elon Musk (@elonmusk) · Twitter",
    "tweets": [
      {
        "url": "https://twitter.com/elonmusk/status/1166081488648949760?ref_src=twsrc%5Egoogle%7Ctwcamp%5Eserp%7Ctwgr%5Etweet",
        "content": "Starhopper flight currently tracking to 5pm Texas time for 150m / ~500ft hover test",
        "timeframe": "11 hours ago"
      },
      {
        "url": "https://twitter.com/elonmusk/status/1165377786338406400?ref_src=twsrc%5Egoogle%7Ctwcamp%5Eserp%7Ctwgr%5Etweet",
        "content": "Looks like @SpaceX Starhopper flight may be as soon as Monday. FAA support is much appreciated!",
        "timeframe": "2 days ago"
      },
      {
        "url": "https://twitter.com/elonmusk/status/1165371975528640512?ref_src=twsrc%5Egoogle%7Ctwcamp%5Eserp%7Ctwgr%5Etweet",
        "content": "If you’re a utility or public utilities commission, please consider using the Tesla Megapack. Better for the environment & usually lower cost than fossil fuel peaker plants! www.tesla.com/megapack",
        "timeframe": "2 days ago"
      }
    ],
    "pos_overall": 1
  }
]
</pre>
<hr />
<h4 id="job-listings"><strong>Job Listings</strong></h4>
<p><img loading="lazy" decoding="async" class="aligncenter size-full wp-image-8227" src="https://www.proxysp.com/wp-content/uploads/2021/09/Real-Time-Crawler-for-Google-Job-Listings.png" alt="Real-Time Crawler for Google Job Listings" width="620" height="432" srcset="https://proxysp.com/wp-content/uploads/2021/09/Real-Time-Crawler-for-Google-Job-Listings.png 620w, https://proxysp.com/wp-content/uploads/2021/09/Real-Time-Crawler-for-Google-Job-Listings-300x209.png 300w" sizes="(max-width: 620px) 100vw, 620px" /></p>
<pre>"jobs": {
  "listings": [
    {
      "title": "SR SOFTWARE DEVELOPER",
      "source": "via LinkedIn",
      "employer": "Jobs @ TheJobNetwork",
      "location": "Tulsa, OK",
      "extra_details": [
        "1 day ago",
        "Full-time"
      ]
    },
    {
      "title": "Autonomous Vehicle Simulation Software Engineer",
      "source": "via Built In Colorado",
      "employer": "Azevtec",
      "location": "United States",
      "extra_details": [
        "17 hours ago",
        "Full-time"
      ]
    },
    {
      "title": "Senior Software Engineer - Oracle Transportation Management",
      "source": "via LinkedIn",
      "employer": "XPO Logistics, Inc.",
      "location": "United States",
      "extra_details": [
        "21 hours ago",
        "Full-time"
      ]
    }
  ],
  "location_header": "Near United States"
}
</pre>
<hr />
<h4 id="carousel"><strong>Carousel</strong></h4>
<p><img loading="lazy" decoding="async" class="aligncenter size-full wp-image-8229" src="https://www.proxysp.com/wp-content/uploads/2021/09/Real-Time-Crawler-for-Google-Carousel.png" alt="Real-Time Crawler for Google Carousel" width="617" height="437" srcset="https://proxysp.com/wp-content/uploads/2021/09/Real-Time-Crawler-for-Google-Carousel.png 617w, https://proxysp.com/wp-content/uploads/2021/09/Real-Time-Crawler-for-Google-Carousel-300x212.png 300w" sizes="(max-width: 617px) 100vw, 617px" /></p>
<pre>"item_carousel": {
  "items": [
    {
      "title": "Chris Evans",
      "subtitle": "Captain America"
    },
    {
      "title": "Mark Ruffalo",
      "subtitle": "Hulk"
    },
    {
      "title": "Tom Holland",
      "subtitle": "Spider-Man"
    },
    {
      "title": "Stan Lee",
      "subtitle": "Old Man in TV Report, Bus Driver"
    },
    {
      "title": "Chris Pratt",
      "subtitle": "Star-Lord"
    }
  ],
  "title": "The Avengers/Cast"
}
</pre>
<hr />
<h4 id="images-2"><strong>Images</strong></h4>
<p><img loading="lazy" decoding="async" class="aligncenter size-full wp-image-8230" src="https://www.proxysp.com/wp-content/uploads/2021/09/Real-Time-Crawler-for-Google-Parsed-data-Images.png" alt="Real-Time Crawler for Google Parsed data Images" width="610" height="435" srcset="https://proxysp.com/wp-content/uploads/2021/09/Real-Time-Crawler-for-Google-Parsed-data-Images.png 610w, https://proxysp.com/wp-content/uploads/2021/09/Real-Time-Crawler-for-Google-Parsed-data-Images-300x214.png 300w" sizes="(max-width: 610px) 100vw, 610px" /></p>
<pre>"images": [
  {
    "alt": "Image result for contemporary wall clock",
    "href": "/search?q=contemporary+wall+clock&safe=off&hl=en&gl=US&tbm=isch&source=iu&ictx=1&fir=Qspcw8WiAmXYzM%253A%252C-m-5575uWYilbM%252C_&vet=1&usg=AI4_-kTGLIU9LAzoCJxO8gp7kK322MV8Yg&sa=X&ved=2ahUKEwjFy8rSy7HkAhWkDrkGHck7A24Q9QEwAXoECAkQBg#imgrc=Qspcw8WiAmXYzM:",
    "source": "https://www.allmodern.com/decor-pillows/sb0/wall-clocks-c429917.html"
  },
  {
    "alt": "Image result for contemporary wall clock",
    "href": "/search?q=contemporary+wall+clock&safe=off&hl=en&gl=US&tbm=isch&source=iu&ictx=1&fir=G0pFK8TQ91ls6M%253A%252Cr5nLxZQfxnA3MM%252C_&vet=1&usg=AI4_-kStPZh1tpSdQ5vTAZUIXwW4zThzQg&sa=X&ved=2ahUKEwjFy8rSy7HkAhWkDrkGHck7A24Q9QEwAnoECAkQCQ#imgrc=G0pFK8TQ91ls6M:",
    "source": "https://www.wayfair.com/decor-pillows/cat/modern-wall-clocks-c1869680.html"
  },
  ...
  {
    "alt": "Image result for contemporary wall clock",
    "href": "/search?q=contemporary+wall+clock&safe=off&hl=en&gl=US&tbm=isch&source=iu&ictx=1&fir=o4ZXIngZyr9HAM%253A%252C-m-5575uWYilbM%252C_&vet=1&usg=AI4_-kTIJMWyTs07HFcVKHTfTd6otLL82w&sa=X&ved=2ahUKEwjFy8rSy7HkAhWkDrkGHck7A24Q9QEwCnoECAkQIQ#imgrc=o4ZXIngZyr9HAM:",
    "source": "https://www.allmodern.com/decor-pillows/sb0/wall-clocks-c429917.html"
  }
]
</pre>
<hr />
<h4 id="related-questions"><strong>Related Questions</strong></h4>
<p><img loading="lazy" decoding="async" class="aligncenter size-full wp-image-8231" src="https://www.proxysp.com/wp-content/uploads/2021/09/Real-Time-Crawler-for-Google-Related-Questions.png" alt="Real-Time Crawler for Google Related Questions" width="625" height="433" srcset="https://proxysp.com/wp-content/uploads/2021/09/Real-Time-Crawler-for-Google-Related-Questions.png 625w, https://proxysp.com/wp-content/uploads/2021/09/Real-Time-Crawler-for-Google-Related-Questions-300x208.png 300w" sizes="(max-width: 625px) 100vw, 625px" /></p>
<pre>"related_questions": [
  {
    "pos": 1,
    "question": "What does Adidas stand for?"
  },
  {
    "pos": 2,
    "question": "Is Adidas German?"
  },
  {
    "pos": 3,
    "question": "Are Jordans Adidas?"
  },
  {
    "pos": 4,
    "question": "What shoe brands does adidas own?"
  }
]
</pre>
<hr />
<h3 id="shopping-search-2">Shopping Search</h3>
<p><img loading="lazy" decoding="async" class="aligncenter size-full wp-image-8232" src="https://www.proxysp.com/wp-content/uploads/2021/09/Real-Time-Crawler-for-Google-Shopping-Search2.png" alt="Real-Time Crawler for Google Shopping Search2" width="612" height="398" srcset="https://proxysp.com/wp-content/uploads/2021/09/Real-Time-Crawler-for-Google-Shopping-Search2.png 612w, https://proxysp.com/wp-content/uploads/2021/09/Real-Time-Crawler-for-Google-Shopping-Search2-300x195.png 300w" sizes="(max-width: 612px) 100vw, 612px" /></p>
<pre>...
"organic": [
            {
              "pos": 1,
              "url": "/aclk?sa=l&ai=DChcSEwju8fmd84jpAhUPTxgKHQshDIcYABAHGgJsZQ&sig=AOD64_1BTHVcnNzI5775j9xNkILrCU2KYA&ctype=5&q=&ved=0ahUKEwjpr_Sd84jpAhVI2aYKHYn1CeMQvxMI4wQ&adurl=",
              "type": "grid",
              "price": 85,
              "title": "Adidas Women's Swift Run Casual Shoes in White ...",
              "merchant": {
                "url": "/aclk?sa=l&ai=DChcSEwju8fmd84jpAhUPTxgKHQshDIcYABAHGgJsZQ&sig=AOD64_1BTHVcnNzI5775j9xNkILrCU2KYA&ctype=5&q=&ved=0ahUKEwjpr_Sd84jpAhVI2aYKHYn1CeMQg-UECOoE&adurl=",
                "name": "Finish Line"
              },
              "price_str": "$85.00.",
              "pos_overall": 1
            },
            {
              "pos": 2,
              "url": "/shopping/product/4092922174439754197?uule=w+CAIQICIXQ29sb3JhZG8sIFVuaXRlZCBTdGF0ZXM&q=adidas&prds=epd:6096059639745774212,paur:ClkAsKraX5cxKGk1E_r15f66xbFqydL47KoF9cO04jau1Hw_EeaJnz0EV5mb_JEjRlE5_m7N_B5Vg-krR5766rvdESfkczSSBqkGVDV7A5Ts8BlTUCNfpUxgtxIZAFPVH73vXbe47J5qGlzkfYH83D9zVPSv8w,prmr:1&sa=X&ved=0ahUKEwjpr_Sd84jpAhVI2aYKHYn1CeMQvxMI7AQ",
              "type": "grid",
              "price": 139.97,
              "title": "adidas Mens Alphaboost Training Shoes White ...",
              "merchant": {
                "url": "/aclk?sa=l&ai=DChcSEwju8fmd84jpAhUPTxgKHQshDIcYABAEGgJsZQ&sig=AOD64_3S0xuLlA1GOzNxCvYQdpeTLZkRyQ&ctype=5&q=&ved=0ahUKEwjpr_Sd84jpAhVI2aYKHYn1CeMQg-UECPQE&adurl=",
                "name": "Baseball Savings.com"
              },
              "price_str": "$139.97.",
              "pos_overall": 2
            },
...
</pre>
<hr />
<h3 id="shopping-product-2">Shopping Product</h3>
<p><img loading="lazy" decoding="async" class="aligncenter size-full wp-image-8233" src="https://www.proxysp.com/wp-content/uploads/2021/09/Real-Time-Crawler-for-Google-Shopping-Product2.png" alt="Real-Time Crawler for Google Shopping Product2" width="611" height="429" srcset="https://proxysp.com/wp-content/uploads/2021/09/Real-Time-Crawler-for-Google-Shopping-Product2.png 611w, https://proxysp.com/wp-content/uploads/2021/09/Real-Time-Crawler-for-Google-Shopping-Product2-300x211.png 300w" sizes="(max-width: 611px) 100vw, 611px" /></p>
<pre>...
{
  "type": "Bundle",
  "items": [
    {
      "value": "Console Only",
      "selected": true,
      "available": true,
      "product_id": "5007040952399054528"
    },
    {
      "value": "Splatoon 2 Bundle",
      "available": false,
      "product_id": "6767220879106424425"
    },
    {
      "value": "Super Mario Odyssey Edition",
      "available": false,
      "product_id": "11634753303078094444"
    }
  ]
}
...
</pre>
<hr />
<h3 id="shopping-product-pricing-2">Shopping Product Pricing</h3>
<p><img loading="lazy" decoding="async" class="aligncenter size-full wp-image-8234" src="https://www.proxysp.com/wp-content/uploads/2021/09/Real-Time-Crawler-for-Google-Shopping-Product-Pricing2.png" alt="Real-Time Crawler for Google Shopping Product Pricing2" width="614" height="432" srcset="https://proxysp.com/wp-content/uploads/2021/09/Real-Time-Crawler-for-Google-Shopping-Product-Pricing2.png 614w, https://proxysp.com/wp-content/uploads/2021/09/Real-Time-Crawler-for-Google-Shopping-Product-Pricing2-300x211.png 300w" sizes="(max-width: 614px) 100vw, 614px" /></p>
<pre>"content": {
  "url": "https://www.google.com/shopping/product/5007040952399054528/online",
  "title": "Nintendo Switch with Joy-Con - 32 GB - Gray/Black",
  "rating": 4.5,
  "pricing": [
    {
      "price": 319.99,
      "seller": "Electronic Express",
      "details": "Free shipping",
      "currency": "$",
      "price_tax": 0,
      "price_total": 319.99,
      "seller_link": "/aclk?sa=l&ai=DChcSEwi9t9HqoJ7mAhVCXw0KHdyPBEYYABABGgJxYg&sig=AOD64_2gaL_J1BQ5J5PR-JazDM86N23Nww&adurl=&ctype=5&q=",
      "price_shipping": 0
    },
    {
      "price": 334.99,
      "seller": "ShopZodys",
      "details": "Arrives Dec 9 – 13",
      "currency": "$",
      "price_tax": 27.69,
      "price_total": 412.67,
      "seller_link": "/aclk?sa=l&ai=DChcSEwi9t9HqoJ7mAhVCXw0KHdyPBEYYABADGgJxYg&sig=AOD64_1Rqy4wxKvZXAaoX9FNDBy379EAAA&adurl=&ctype=5&q=",
      "price_shipping": 49.99
    }
</pre>
<hr />
<h2 id="parameter-values">Parameter Values</h2>
<h3 id="user-agent">User-Agent</h3>
<p>Download full list of <code>user_agent_type</code> values in JSON <a class="custom_link" href="https://docs.oxylabs.io/resources/user_agent_type.json" target="_blank" rel="noopener">here</a>.</p>
<pre>[
  {
    "user_agent_type": "desktop",
    "description": "Random desktop browser User-Agent"
  },
  {
    "user_agent_type": "desktop_firefox",
    "description": "Random User-Agent of one of the latest versions of desktop Firefox"
  },
  {
    "user_agent_type": "desktop_chrome",
    "description": "Random User-Agent of one of the latest versions of desktop Chrome"
  },
  {
    "user_agent_type": "desktop_opera",
    "description": "Random User-Agent of one of the latest versions of desktop Opera"
  },
  {
    "user_agent_type": "desktop_edge",
    "description": "Random User-Agent of one of the latest versions of desktop Edge"
  },
  {
    "user_agent_type": "desktop_safari",
    "description": "Random User-Agent of one of the latest versions of desktop Safari"
  },
  {
    "user_agent_type": "mobile",
    "description": "Random mobile browser User-Agent"
  },
  {
    "user_agent_type": "mobile_android",
    "description": "Random User-Agent of one of the latest versions of Android browser"
  },
  {
    "user_agent_type": "mobile_ios",
    "description": "Random User-Agent of one of the latest versions of iPhone browser"
  },
  {
    "user_agent_type": "tablet",
    "description": "Random tablet browser User-Agent"
  },
  {
    "user_agent_type": "tablet_android",
    "description": "Random User-Agent of one of the latest versions of Android tablet"
  },
  {
    "user_agent_type": "tablet_ios",
    "description": "Random User-Agent of one of the latest versions of iPad tablet"
  }
]
</pre>
<hr />
<h3 id="locale">Locale</h3>
<p>Download full list of <code>locale</code> values in JSON <a class="custom_link" href="https://docs.oxylabs.io/resources/locale.json" target="_blank" rel="noopener">here</a>.</p>
<pre>[  
   {  
      "locale":{  
         "en-ai":{  
            "description":"Anguilla - English",
            "domain":"com.ai"
         },
         "es-pr":{  
            "description":"Puerto Rico - Spanish",
            "domain":"com.pr"
         },
         ...
         "en-by":{  
            "description":"Belarus - English",
            "domain":"by"
         },
         "en-in":{  
            "description":"India - English",
            "domain":"co.in"
         }
      }
   }
]
</pre>
<hr />
<h3 id="results-language">Results Language</h3>
<p>Download full list of <code>results_language</code> values in JSON <a class="custom_link" href="https://docs.oxylabs.io/resources/results_language.json" target="_blank" rel="noopener">here</a>.</p>
<pre>[
 {
   "results_language": "af",
   "language": "Afrikaans"
 },
 {
   "results_language": "ar",
   "language": "Arabic"
 },
 ...
 {
   "results_language": "vi",
   "language": "Vietnamese"
 }
]
</pre>
<hr />
<h3 id="geo_location">Geo_location</h3>
<p>There are a few ways you can use the <code>geo_location</code> parameter to get correctly-localized Google results.</p>
<ul>
<li><strong>Using Google’s Canonical Location Name</strong>. This is very straightforward. Just pass us one of the values found on the CSV download <a class="custom_link" href="https://developers.google.com/adwords/api/docs/appendix/geotargeting" target="_blank" rel="nofollow noopener">here</a>. Example: <code>“geo_location”: “New York,New York,United States”</code>.</li>
<li><strong>Using a state name</strong>. Strip the first part of a Google's Canonical Location Name and pass a <code>geo_location</code> value in a <code>“State,Country”</code> format. Works with United States, Australia, India and other countries with federated states. Example: <code>“geo_location”: “California,United States”</code>.</li>
<li><strong>Using a country name</strong>. To get results localized for the geographical center point of a country, pass an official country name. Example: <code>“geo_location”: “United Kingdom”</code>.</li>
<li><strong>Using coordinates and radius</strong>. To get hyperlocal search results (especially useful for searches such as “restaurants near me”), you can pass latitude, longitude and radius values. The following example passes the coordinates of Space Needle in Seattle, WA: <code>“geo_location”: “lat: 47.6205, lng: -122.3493, rad: 25000”</code>.</li>
</ul>
<p>If you pass a misspelled <code>geo_location</code> parameter, chances are, either us or Google will interpret and correct it for you. Nonetheless, we recommend using the parameter structures outlined above, combined with the <code>locale</code> and <code>domain</code> parameters, to get the most accurate results.</p>
<hr />
<h2 id="account-status">Account Status</h2>
<h3 id="usage-statistics">Usage Statistics</h3>
<p>You can find your usage statistics by querying the following endpoint:</p>
<pre>GET https://data.oxylabs.io/v1/stats
</pre>
<p>By default the API will return all time usage statistics. Adding <code>?group_by=month</code> will return monthly stats, while <code>?group_by=day</code> will return daily numbers.</p>
<p>This query will return all time statistics. You can find your daily and monthly usage by adding either <code>?group_by=day</code> or <code>?group_by=month</code></p>
<pre>curl --user user:pass1 'https://data.oxylabs.io/v1/stats'
</pre>
<p>Sample output:</p>
<pre>{
    "data": {
        "sources": [
            {
                "realtime_results_count": "90",
                "results_count": "10",
                "title": "google_hotels"
            },
            {
                "realtime_results_count": "19",
                "results_count": "87",
                "title": "google_search"
            }
        ]
    },
    "meta": {
        "group_by": null
    }
}
</pre>
<hr />
<h3 id="limits">Limits</h3>
<p>The following endpoint will give your monthly commitment information as well as how much has already been used:</p>
<pre>GET https://data.oxylabs.io/v1/stats/limits
</pre>
<pre>curl --user user:pass1 'https://data.oxylabs.io/v1/stats/limits'
</pre>
<p>Sample output:</p>
<pre>{
    "monthly_requests_commitment": 4500000,
    "used_requests": 985000
}
</pre>
<hr />
<h2 id="response-codes">Response Codes</h2>
<div class="su-table su-table-responsive su-table-alternate">
<table>
<thead>
<tr>
<th>Code</th>
<th>Status</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><code>204</code></td>
<td>No Content</td>
<td>You are trying to retrieve a job that has not been completed yet.</td>
</tr>
<tr>
<td><code>400</code></td>
<td>Multiple error messages</td>
<td>Bad request structure, could be a misspelled parameter or invalid value. Response body will have more specific error message.</td>
</tr>
<tr>
<td><code>401</code></td>
<td>&#8216;Authorization header not provided' / &#8216;Invalid authorization header' / &#8216;Client not found'</td>
<td>Missing authorization header or incorrect login credentials.</td>
</tr>
<tr>
<td><code>403</code></td>
<td>Forbidden</td>
<td>Your account does not have access to this resource.</td>
</tr>
<tr>
<td><code>404</code></td>
<td>Not Found</td>
<td>Job ID you are looking for is no longer available.</td>
</tr>
<tr>
<td><code>429</code></td>
<td>Too many requests</td>
<td>Exceeded rate limit. Please contact your account manager to increase limits.</td>
</tr>
<tr>
<td><code>500</code></td>
<td>Unknown Error</td>
<td>Service unavailable.</td>
</tr>
<tr>
<td><code>524</code></td>
<td>Timeout</td>
<td>Service unavailable.</td>
</tr>
<tr>
<td><code>612</code></td>
<td>Undefined Internal Error</td>
<td>Something went wrong and we failed the job you submitted. You can try again at no extra cost, as we don't charge you for <code>faulted</code> jobs. If that doesn't work, give us a shout.</td>
</tr>
<tr>
<td><code>613</code></td>
<td>Faulted After Too Many Retries</td>
<td>We tried scraping the job you submitted, but gave up after reaching our retry limit. You can try again at no extra cost, as we don't charge you for <code>faulted</code> jobs. If that doesn't work, give us a shout.</td>
</tr>
</tbody>
</table>
</div>
<p>Parsed data response codes:</p>
<div class="su-table su-table-responsive su-table-alternate">
<table>
<thead>
<tr>
<th>Code</th>
<th>Status</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><code>12000</code></td>
<td>Success</td>
<td>The parsed content returned is full and there should be no missing or broken fields.</td>
</tr>
<tr>
<td><code>12002</code></td>
<td>Failure</td>
<td>We couldn't parse the page entirely. There may be an issue with the target website changing its HTML structure.</td>
</tr>
<tr>
<td><code>12003</code></td>
<td>Not Supported</td>
<td>The web page you asked us to parse is not supported.</td>
</tr>
<tr>
<td><code>12004</code></td>
<td>Partial Success</td>
<td>We were able to parse the majority of the page, but there are a few missing fields.</td>
</tr>
<tr>
<td><code>12005</code></td>
<td>Partial Success</td>
<td>We were able to parse the majority of the page, but there might be some fields with default values because we could not find them in the HTML.</td>
</tr>
<tr>
<td><code>12006</code></td>
<td>Failure</td>
<td>Unexpected error. Let us know you got this response and we'll check what went wrong.</td>
</tr>
<tr>
<td><code>12007</code></td>
<td>Unknown</td>
<td>Unknown parsed data status. The actual result could range anywhere from a complete failure to a total success.</td>
</tr>
<tr>
<td><code>12008</code></td>
<td>Failure</td>
<td>Parsed content is missing.</td>
</tr>
<tr>
<td><code>12009</code></td>
<td>Failure</td>
<td>Product not found. Check the URL you submitted.</td>
</tr>
</tbody>
</table>
</div>
<p>Cloud storage upload response codes:</p>
<div class="su-table su-table-responsive su-table-alternate">
<table>
<thead>
<tr>
<th>Code</th>
<th>Status</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><code>10001</code></td>
<td>Unexpected Exception</td>
<td>Something terribly wrong happened. We probably know about this already and are fixing it. Let us know anyway.</td>
</tr>
<tr>
<td><code>13000</code></td>
<td>Upload Success</td>
<td>All good!</td>
</tr>
<tr>
<td><code>13001</code></td>
<td>Upload Failed</td>
<td>We couldn't upload job results your bucket.</td>
</tr>
<tr>
<td><code>13102</code></td>
<td>No Such Path</td>
<td>We couldn't find a bucket with such name. Please double check.</td>
</tr>
<tr>
<td><code>13103</code></td>
<td>Access Denied</td>
<td>Bucket doesn't have required permissions. To find out how to give us required access, see <a href="#upload-to-storage">here</a>.</td>
</tr>
</tbody>
</table>
</div>
<hr />
<h4>References</h4>
<ul>
<li><a href="https://docs.oxylabs.io/rtc/source/google/index.html" target="_blank" rel="nofollow noopener">https://docs.oxylabs.io/rtc/source/google/index.html</a></li>
<li><a href="https://docs.oxylabs.io/rtc/source/google/index.html" target="_blank" rel="nofollow noopener">https://docs.oxylabs.io/rtc/index.html</a></li>
</ul>
<p>&nbsp;</p>
<hr />
<blockquote><p><strong>Disclaimer:</strong> This part of the content is mainly from the merchant. If the merchant does not want it to be displayed on my website, please <a href="https://www.proxysp.com/contact-us/">contact us</a> to delete your content.</p></blockquote>
]]></content:encoded>
					
					<wfw:commentRss>https://proxysp.com/oxylabs-real-time-crawler/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">7623</post-id>	</item>
		<item>
		<title>BlazingSEO Proxies Location Issues: Learn Official Manuals Before You Buy</title>
		<link>https://proxysp.com/blazingseo-proxies-location-issues/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=blazingseo-proxies-location-issues</link>
					<comments>https://proxysp.com/blazingseo-proxies-location-issues/#respond</comments>
		
		<dc:creator><![CDATA[admin]]></dc:creator>
		<pubDate>Thu, 01 Jan 1970 00:00:00 +0000</pubDate>
				<category><![CDATA[BlazingSEO Proxies]]></category>
		<guid isPermaLink="false">https://www.proxysp.com/?p=7751</guid>

					<description><![CDATA[Want to know which locations the BlazingSEO proxy supports? This article will give you a detailed introduction. What Locations Do You Offer for Proxies? (Country &#8211; &#8230;<p class="read-more"> <a class="ast-button" href="https://proxysp.com/blazingseo-proxies-location-issues/"> <span class="screen-reader-text">BlazingSEO Proxies Location Issues: Learn Official Manuals Before You Buy</span> Read More &#187;</a></p>]]></description>
										<content:encoded><![CDATA[<blockquote><p>Want to know which locations the BlazingSEO proxy supports? This article will give you a detailed introduction.</p></blockquote>
<h2 class="heading">What Locations Do You Offer for Proxies? (Country &#8211; City)</h2>
<p dir="ltr" data-renderer-start-pos="3831">The following countries and cities are available through our Blazing SEO proxies as of May 2021.  We continue to expand our locations.  If you have a specific request that you do not see on this list, you can <a href="sales@blazingseo.com" target="_blank" rel="nofollow noopener">email</a> our address and speak to a member of our sales team.</p>
<ul>
<li dir="ltr" data-renderer-start-pos="3831">United States (17):  Los Angeles, Chicago, San Francisco, Dallas, New York City, Secaucus, Denver, Atlanta, San Jose, Omaha, Des Moines, Salem, Seattle, Buffalo, Anchorage, Miami, Phoenix.</li>
<li dir="ltr" data-renderer-start-pos="4023">Argentina, Buenos Aires</li>
<li dir="ltr" data-renderer-start-pos="4050">Australia (2):  Sydney, Melbourne</li>
<li dir="ltr" data-renderer-start-pos="4087">Belgium, Brussels</li>
<li dir="ltr" data-renderer-start-pos="4108">Brazil, Sao Paulo</li>
<li dir="ltr" data-renderer-start-pos="4129">Canada, Toronto</li>
<li dir="ltr" data-renderer-start-pos="4148">Colombia, Bogota</li>
<li dir="ltr" data-renderer-start-pos="4168">Egypt, Cairo</li>
<li dir="ltr" data-renderer-start-pos="4184">France (3): Paris, Marseille, Lyon</li>
<li dir="ltr" data-renderer-start-pos="4222">Germany (2):  Frankfurt, Berlin</li>
<li dir="ltr" data-renderer-start-pos="4257">India, Mumbai</li>
<li dir="ltr" data-renderer-start-pos="4274">Indonesia, Jakarta</li>
<li dir="ltr" data-renderer-start-pos="4296">Italy, Rome</li>
<li dir="ltr" data-renderer-start-pos="4311">Japan, Tokyo</li>
<li dir="ltr" data-renderer-start-pos="4327">Mexico, Mexico City</li>
<li dir="ltr" data-renderer-start-pos="4350">Netherlands, Amsterdam</li>
<li dir="ltr" data-renderer-start-pos="4376">Pakistan, Islamabad</li>
<li dir="ltr" data-renderer-start-pos="4399">Philippines, Manila</li>
<li dir="ltr" data-renderer-start-pos="4422">Poland, Warsaw</li>
<li dir="ltr" data-renderer-start-pos="4440">Saudi Arabia, Riyadh</li>
<li dir="ltr" data-renderer-start-pos="4464">Seychelles, Victoria</li>
<li dir="ltr" data-renderer-start-pos="4488">South Africa, Cape Town</li>
<li dir="ltr" data-renderer-start-pos="4515">South Korea, Seoul</li>
<li dir="ltr" data-renderer-start-pos="4537">Spain, Madrid</li>
<li dir="ltr" data-renderer-start-pos="4554">Taiwan, Taipei</li>
<li dir="ltr" data-renderer-start-pos="4572">Thailand, Bangkok</li>
<li dir="ltr" data-renderer-start-pos="4592">United Kingdom, London</li>
<li dir="ltr" data-renderer-start-pos="4618">Vietnam, Hanoi</li>
</ul>
<hr />
<div class="icon">
<div class="icon">
<h2 class="heading">Why is My Proxy Not Showing the Proper Location Information?</h2>
<p>This can be a little confusing, so it is important to define what is meant by the location of a proxy.  There are two types of locations we work with:</p>
<ul>
<li><strong>Geolocation:</strong> This is the &#8216;virtual' location of the proxy address. IP addresses can be publicly declared in locations that are physically different from where the server happens to sit. When an IP is geolocated, the change can take several weeks to propagate through all the public databases (more on this below). Geolocation is more important for proxies than physical location.</li>
<li><strong>Physical Location:</strong> This is the &#8216;actual' location of the server on which a proxy resides, typically in a data center. This may or may not always be the same as the geolocation, but of the two, is the lesser of importance for how proxies are viewed.</li>
</ul>
<p>So why are there times when you look up the location of a proxy, and find that the proxy is showing in a different one from what you expected? This is likely because the sites that <a href="https://www.proxysp.com/how-to-find-someones-ip-address/" target="_blank" rel="noopener">track IP locations</a> simply haven’t updated the location yet. The process can take anywhere from 1 to 3 weeks, sometimes faster and sometimes slower. Yes, we wish we had more control and insights on this too!</p>
<p>Sites like <a href="http://whoer.net/" target="_blank" rel="nofollow noopener">whoer</a>, <a href="http://maxmind.com/" target="_blank" rel="nofollow noopener">MaxMind</a>, <a href="https://freegeoip.net/" target="_blank" rel="nofollow noopener">FreeGeoIP</a>, and <a href="http://iplocation.net/" target="_blank" rel="nofollow noopener">IPLocation</a> use third party databases that supply geolocations for IPs. However, these third parties and these databases have to get their locations from the top-level IP owner. For IPs in the USA, this is ARIN.</p>
<h3><strong>What is ARIN?</strong></h3>
<p>According to <a href="https://en.wikipedia.org/wiki/American_Registry_for_Internet_Numbers" target="_blank" rel="nofollow noopener">Wikipedia</a>, &#8220;ARIN manages the distribution of Internet number resources, including <a href="https://en.wikipedia.org/wiki/IPv4" target="_blank" rel="nofollow noopener">IPv4</a> and <a href="https://en.wikipedia.org/wiki/IPv6" target="_blank" rel="nofollow noopener">IPv6</a> address space&#8221;. This essentially means they regulate and organize most/all IPv4 address registrations in the USA and Canada, therefore they are what everyone considers the most accurate representation of IPs (which includes location!).</p>
<p>ARIN is one of five <a href="https://en.wikipedia.org/wiki/Regional_Internet_registry" target="_blank" rel="nofollow noopener">regional internet registries</a> in the world, each of which manages the allocation and registration of IP addresses for different areas. While most of our proxies here at Blazing are correlated with ARIN, we do work with the others as well. Here is a listing of all the registries:</p>
<ul>
<li><a href="https://en.wikipedia.org/wiki/AFRINIC" target="_blank" rel="nofollow noopener">African Network Information Center</a> (<strong>AFRINIC</strong>) serves Africa</li>
<li><a href="https://en.wikipedia.org/wiki/American_Registry_for_Internet_Numbers" target="_blank" rel="nofollow noopener">American Registry for Internet Numbers</a> (<strong>ARIN</strong>) serves Antarctica, Canada, parts of the Caribbean, and the United States</li>
<li><a href="https://en.wikipedia.org/wiki/Asia-Pacific_Network_Information_Centre" target="_blank" rel="nofollow noopener">Asia-Pacific Network Information Centre</a> (<strong>APNIC</strong>) serves East Asia, Oceania, South Asia, and Southeast Asia</li>
<li><a href="https://en.wikipedia.org/wiki/RIPE_NCC" target="_blank" rel="nofollow noopener">Réseaux IP Européens Network Coordination Centre</a> (<strong>RIPE NCC</strong>) serves Europe, Central Asia, Russia, and West Asia</li>
<li><a href="https://en.wikipedia.org/wiki/Latin_America_and_Caribbean_Network_Information_Centre" target="_blank" rel="nofollow noopener">Latin America and Caribbean Network Information Centre</a> (<strong>LACNIC</strong>) serves most of the Caribbean and all of Latin America</li>
</ul>
<hr />
<h2 class="heading">How do I Change the Location of My Proxies?</h2>
<p>If you are needing to change the location of your proxies you may do so in your dashboard by following this guide:</p>
<p><strong>DISCLAIMER</strong>: This <strong>will use</strong> your one proxy replacement per proxy per month.</p>
<p>1. Login to your <a href="http://blazingseollc.com/proxy/dashboard/" target="_blank" rel="nofollow noopener"><strong>Dashboard</strong></a></p>
<p>2. On the <strong>left side</strong> of your dashboard click <strong>Location Preferences</strong></p>
<p><img loading="lazy" decoding="async" class="aligncenter size-full wp-image-8069" src="https://www.proxysp.com/wp-content/uploads/2021/09/change-the-location-of-blazingseo-proxies1.jpg" alt="change the location of blazingseo proxies1" width="208" height="219" /></p>
<p>3. Select the locations you want</p>
<p>4. Then click the <strong>Proxy Replacement</strong> tab</p>
<p><img loading="lazy" decoding="async" class="aligncenter size-full wp-image-8070" src="https://www.proxysp.com/wp-content/uploads/2021/09/change-the-location-of-blazingseo-proxies2.jpg" alt="change the location of blazingseo proxies2" width="219" height="68" /></p>
<p>5. Either <strong>manually</strong> click &#8216;Replace', next to each new proxy you want replaced (also giving it the new location) <strong>OR</strong> you can just click the &#8216;Export' button on your proxy dashboard and then copy and paste the entire list in</p>
<p><img loading="lazy" decoding="async" class="aligncenter wp-image-8071 " src="https://www.proxysp.com/wp-content/uploads/2021/09/change-the-location-of-blazingseo-proxies3.jpg" alt="change the location of blazingseo proxies3" width="619" height="256" srcset="https://proxysp.com/wp-content/uploads/2021/09/change-the-location-of-blazingseo-proxies3.jpg 667w, https://proxysp.com/wp-content/uploads/2021/09/change-the-location-of-blazingseo-proxies3-300x124.jpg 300w" sizes="(max-width: 619px) 100vw, 619px" /></p>
</div>
</div>
<div class="image-container">
<hr />
<h2 class="heading">Why Does the Location of My Proxy Not Match What the Dashboard Shows?</h2>
</div>
<p><span dir="ltr">If you put ANY of your IP addresses you have from us at the top right of this </span><a href="http://whois.arin.net/ui/" target="_blank" rel="nofollow noopener">PAGE</a><span dir="ltr"> you will find that your IP address is in fact in the correct location. Since ARIN owns IP addresses, they govern this location and it is up to third parties, such as MaxMind, to honor this governance – which unfortunately is not the case.</span></p>
<div class="icon">
<div class="icon">
<hr />
</div>
</div>
<div>
<h4 id="references" class="ftwp-heading">References,</h4>
<ul>
<li><a href="https://portal.blazingseollc.com/en/support/solutions/articles/64000263650-what-locations-do-you-offer-for-proxies-country-city" target="_blank" rel="nofollow noopener">https://portal.blazingseollc.com/en/support/solutions/articles/64000263650-what-locations-do-you-offer-for-proxies-country-city</a></li>
<li><a href="https://portal.blazingseollc.com/en/support/solutions/articles/64000256606-why-is-my-proxy-not-showing-the-proper-location-information" target="_blank" rel="nofollow noopener">https://portal.blazingseollc.com/en/support/solutions/articles/64000256606-why-is-my-proxy-not-showing-the-proper-location-information</a></li>
<li><a href="https://portal.blazingseollc.com/en/support/solutions/articles/64000256612-how-do-i-change-the-location-of-my-proxies" target="_blank" rel="nofollow noopener">https://portal.blazingseollc.com/en/support/solutions/articles/64000256612-how-do-i-change-the-location-of-my-proxies</a></li>
<li><a href="https://portal.blazingseollc.com/en/support/solutions/articles/64000262803-why-does-the-location-of-my-proxy-not-match-what-the-dashboard-shows-" target="_blank" rel="nofollow noopener">https://portal.blazingseollc.com/en/support/solutions/articles/64000262803-why-does-the-location-of-my-proxy-not-match-what-the-dashboard-shows-</a></li>
</ul>
<hr />
</div>
<blockquote><p><strong>Disclaimer</strong>: This part of the content is mainly from the merchant. If the merchant does not want it to be displayed on my website, please <a href="https://www.proxysp.com/contact-us/">contact us</a> to delete your content.</p></blockquote>
]]></content:encoded>
					
					<wfw:commentRss>https://proxysp.com/blazingseo-proxies-location-issues/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">7751</post-id>	</item>
		<item>
		<title>How to Use OxyLabs Real-Time Crawler [Part 2]: Real-Time Crawler for Yandex</title>
		<link>https://proxysp.com/oxylabs-yandex-real-time-crawler/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=oxylabs-yandex-real-time-crawler</link>
					<comments>https://proxysp.com/oxylabs-yandex-real-time-crawler/#respond</comments>
		
		<dc:creator><![CDATA[admin]]></dc:creator>
		<pubDate>Thu, 01 Jan 1970 00:00:00 +0000</pubDate>
				<category><![CDATA[How to Use OxyLabs Proxy (OxyLabs User Manual Navigation)]]></category>
		<guid isPermaLink="false">https://www.proxysp.com/?p=7633</guid>

					<description><![CDATA[Do you know how to use OxyLabs Real-time Crawler for Yandex? This is the most comprehensive introduction from OxyLabs official. Quick Start Real-Time Crawler is built &#8230;<p class="read-more"> <a class="ast-button" href="https://proxysp.com/oxylabs-yandex-real-time-crawler/"> <span class="screen-reader-text">How to Use OxyLabs Real-Time Crawler [Part 2]: Real-Time Crawler for Yandex</span> Read More &#187;</a></p>]]></description>
										<content:encoded><![CDATA[<blockquote><p>Do you know how to use OxyLabs Real-time Crawler for Yandex? This is the most comprehensive introduction from OxyLabs official.</p></blockquote>
<h2 id="quick-start">Quick Start</h2>
<p>Real-Time Crawler is built for heavy-duty data retrieval operations. You can use Real-Time Crawler to access various Yandex pages. It enables effortless web data extraction from search engines without any delays or errors.</p>
<p>Real-Time Crawler for Yandex uses <a class="custom_link" href="https://en.wikipedia.org/wiki/Basic_access_authentication" target="_blank" rel="nofollow noopener">basic HTTP authentication</a> that requires sending username and password.</p>
<p>This is by far the fastest way to start using Real-Time Crawler for Yandex. You will send a query <code>adidas</code> to <code>yandex_search</code> using <a href="#realtime">Realtime</a> integration method. Don't forget to replace <code>USERNAME</code> and <code>PASSWORD</code> with your proxy user credentials.</p>
<pre>curl --user "USERNAME:PASSWORD" 'https://realtime.oxylabs.io/v1/queries' -H "Content-Type: application/json" -d '{"source": "yandex_search", "domain": "com", "query": "adidas"}'
</pre>
<p>If you have any questions not covered by this documentation, please contact your account manager or our support staff at <a class="custom_link" href="mailto:support@oxylabs.io" target="_blank" rel="nofollow noopener">support@oxylabs.io</a>.</p>
<hr />
<h2 id="integration-methods">Integration Methods</h2>
<p>Real-Time Crawler for Yandex supports three integration methods which have their unique benefits:</p>
<ul>
<li><a href="#push-pull">Push-Pull</a>. Using this method it is now required to mainain an active connection with our endpoint to retrieve the data. Upon making a request, our system is able to automatically ping users server when the job is done (see <a href="#callback">Callback</a>). This method saves computing resources and can be scaled easily.</li>
<li><a href="#realtime">Realtime</a>. The method requires user to maintain an active connection with our endpoint in order to get the results successfully when the job is completed. This method can be implemented into one service while Push-Pull method is a two step process.</li>
<li><a href="#superapi">SuperAPI</a>. This method is very similar to Realtime but instead posting data to our endpoint, user can use HTML Cralwer as a proxy. To retrieve the data, user must set up a proxy endpoint and make GET request to a desired URL. Additional parameters must be added using headers.</li>
</ul>
<p>Our recommended data extraction method is <a href="#push-pull">Push-Pull</a>.</p>
<hr />
<h3 id="push-pull">Push-Pull</h3>
<p>This is the most simple yet the most reliable and recommended data delivery method. In Push-Pull scenario you send us a query, we return you job <code>id</code>, and once the job is done you can use that <code>id</code> to retrieve content from <code>/results</code> endpoint. You can check job completion status yourself, or you can set up a simple listener that is able to accept POST queries.</p>
<p>This way we will send you a callback message once the job is ready to be retrieved. In this particular example the results will be automatically <a href="#upload-to-storage">uploaded to your S3 bucket</a> named <code>YOUR_BUCKET_NAME</code>.</p>
<hr />
<h4 id="single-query"><strong>Single Query</strong></h4>
<p>The following endpoint will handle single queries for one keyword or URL. The API will return a confirmation message containing job information, including job <code>id</code>. You can check job completion status using that <code>id</code>, or you can ask us to ping your callback endpoint once the scraping task is finished by adding <code>callback_url</code> in the query.</p>
<pre>POST https://data.oxylabs.io/v1/queries
</pre>
<p>You need to post query parameters as data in JSON body.</p>
<pre>curl --user user:pass1 'https://data.oxylabs.io/v1/queries' -H "Content-Type: application/json" 
 -d '{"source": "yandex_search", "domain": "com", "query": "adidas", "callback_url": "https://your.callback.url", "storage_type": "s3", "storage_url": "YOUR_BUCKET_NAME"}'
</pre>
<p>The API will respond with query information in JSON format, by printing it in response body, similar to this:</p>
<pre>{
  "callback_url": "https://your.callback.url",
  "client_id": 5,
  "created_at": "2019-10-01 00:00:01",
  "domain": "com",
  "geo_location": null,
  "id": "12345678900987654321",
  "limit": 10,
  "locale": null,
  "pages": 1,
  "parse": false,
  "render": null,
  "query": "adidas",
  "source": "yandex_search",
  "start_page": 1,
  "status": "pending",
  "storage_type": "s3",
  "storage_url": "YOUR_BUCKET_NAME/12345678900987654321.json",
  "subdomain": "www",
  "updated_at": "2019-10-01 00:00:01",
  "user_agent_type": "desktop",
  "_links": [
    {
      "rel": "self",
      "href": "http://data.oxylabs.io/v1/queries/12345678900987654321",
      "method": "GET"
    },
    {
      "rel": "results",
      "href": "http://data.oxylabs.io/v1/queries/12345678900987654321/results",
      "method": "GET"
    }
  ]
}
</pre>
<hr />
<h4 id="check-job-status"><strong>Check Job Status</strong></h4>
<p>If your query had <code>callback_url</code>, we will send you a message containing link to content once the scraping task is done. However, if there was no <code>callback_url</code> in the query, you will need to check job status yourself. For that you need to use the URL in <code>href</code> under <code>rel</code>:<code>self</code> in the response message you received after submitting your query to our API. It should look similar to this: <code>http://data.oxylabs.io/v1/queries/12345678900987654321</code>.</p>
<pre>GET https://data.oxylabs.io/v1/queries/{id}
</pre>
<p>Querying this link will return job information, including its <code>status</code>. There are 3 possible <code>status</code> values:</p>
<div class="su-table su-table-responsive su-table-alternate">
<table>
<tbody>
<tr>
<td><code>pending</code></td>
<td>The job is still in the queue and has not been completed.</td>
</tr>
<tr>
<td><code>done</code></td>
<td>The job is completed, you may retrieve the result by querying the URL in <code>href</code> under <code>rel</code>:<code>results</code> : <code>http://data.oxylabs.io/v1/queries/12345678900987654321/results</code></td>
</tr>
<tr>
<td><code>faulted</code></td>
<td>There was an issue with the job and we couldn't complete it, most likely due to a server error on the target site's side.</td>
</tr>
</tbody>
</table>
</div>
<pre>curl --user user:pass1 'http://data.oxylabs.io/v1/queries/12345678900987654321'
</pre>
<p>The API will respond with query information in JSON format, by printing it in response body. Notice that job <code>status</code> has been changed to <code>done</code>. You can now retrieve content by querying <code>http://data.oxylabs.io/v1/queries/12345678900987654321/results</code>.</p>
<p>You can also see that the task has been <code>updated_at</code> <code>2019-10-01 00:00:15</code> &#8211; the query took 14 seconds to complete.</p>
<pre>{
  "client_id": 5,
  "created_at": "2019-10-01 00:00:01",
  "domain": "com",
  "geo_location": null,
  "id": "12345678900987654321",
  "limit": 10,
  "locale": null,
  "pages": 1,
  "parse": false,
  "render": null,
  "query": "adidas",
  "source": "yandex_search",
  "start_page": 1,
  "status": "done",
  "subdomain": "www",
  "updated_at": "2019-10-01 00:00:15",
  "user_agent_type": "desktop",
  "_links": [
    {
      "rel": "self",
      "href": "http://data.oxylabs.io/v1/queries/12345678900987654321",
      "method": "GET"
    },
    {
      "rel": "results",
      "href": "http://data.oxylabs.io/v1/queries/12345678900987654321/results",
      "method": "GET"
    }
  ]
}
</pre>
<hr />
<h4 id="retrieve-job-content"><strong>Retrieve Job Content</strong></h4>
<p>Once you know the job is ready to retrieved either by checking its status or receiving a callback from us, you can GET it using the URL in <code>href</code> under <code>rel</code>:<code>results</code> in either our initial response or in callback message. It should look similar to this: <code>http://data.oxylabs.io/v1/queries/12345678900987654321/results</code>.</p>
<pre>GET https://data.oxylabs.io/v1/queries/{id}/results
</pre>
<p>The results can be automatically retrieved without periodically checking job status by setting up <a href="#callback">Callback</a> service. User needs to specfy the IP or domain of the server where the Callback service is running. When our system completes a job, it will send a message to the provided IP or domain and the Callback service will download the results as described in the <a href="#callback">Callback implementation example</a>.</p>
<pre>curl --user user:pass1 'http://data.oxylabs.io/v1/queries/12345678900987654321/results'
</pre>
<p>The API will return job content:</p>
<pre>{
  "results": [
    {
      "content": "&lt;!doctype html&gt;
        CONTENT      
      ",
      "created_at": "2019-10-01 00:00:01",
      "updated_at": "2019-10-01 00:00:15",
      "page": 1,
      "url": "https://www.yandex.com/search?q=adidas&hl=en&gl=US",
      "job_id": "12345678900987654321",
      "status_code": 200
    }
  ]
}
</pre>
<hr />
<h4 id="callback"><strong>Callback</strong></h4>
<p>A callback is a <code>POST</code> request we send to your machine, informing that the data extraction task is completed and providing URL to download scraped content. This means that you no longer need to <a href="#check-job-status">check job status</a> manually. Once the data is here, we will let you know, and all you need to do now is <a href="#retrieve-job-content">retrieve it</a>.</p>
<pre># Please see code samples in Python and PHP.
</pre>
<p>Sample callback output</p>
<pre>{  
   "created_at":"2019-10-01 00:00:01",
   "updated_at":"2019-10-01 00:00:15",
   "locale":null,
   "client_id":163,
   "user_agent_type":"desktop",
   "source":"yandex_search",
   "pages":1,
   "subdomain":"www",
   "status":"done",
   "start_page":1,
   "parse":0,
   "render":null,
   "priority":0,
   "ttl":0,
   "origin":"api",
   "persist":true,
   "id":"12345678900987654321",
   "callback_url":"http://your.callback.url/",
   "query":"adidas",
   "domain":"com",
   "limit":10,
   "geo_location":null,
   {...}
   "_links":[
      {  
         "href":"https://data.oxylabs.io/v1/queries/12345678900987654321",
         "method":"GET",
         "rel":"self"
      },
      {  
         "href":"https://data.oxylabs.io/v1/queries/12345678900987654321/results",
         "method":"GET",
         "rel":"results"
      }
   ],
}
</pre>
<hr />
<h4 id="batch-query"><strong>Batch Query</strong></h4>
<p>Real-Time Crawler also supports executing multiple keywords, up to 1,000 keywords with each batch. The following endpoint will submit multiple keywords to the extraction queue.</p>
<pre>POST https://data.oxylabs.io/v1/queries/batch
</pre>
<p>You need to post query parameters as data in JSON body.</p>
<p>The system will handle every keyword as a separate request. If you provided callback URL, you will get a separate call for each keyword. Otherwise, our initial response will contain job <code>id</code>s for all keywords. For example, if you sent 50 keywords, we will return 50 unique job <code>id</code>s.</p>
<p>Important! <code>query</code> is the only parameter that can have multiple values. All other parameters are the same for that batch query.</p>
<pre>curl --user user:pass1 'https://data.oxylabs.io/v1/queries/batch' -H 'Content-Type: application/json'
 -d '@keywords.json'
</pre>
<p><code>keywords.json</code> content:</p>
<pre>{  
   "query":[  
      "adidas",
      "nike",
      "reebok"
   ],
   "source": "yandex_search",
   "domain": "com",
   "callback_url": "https://your.callback.url"
}
</pre>
<p>The API will respond with query information in JSON format, by printing it in response body, similar to this:</p>
<pre>{
  "queries": [
    {
      "callback_url": "https://your.callback.url",
      {...}
      "created_at": "2019-10-01 00:00:01",
      "domain": "com",
      "id": "12345678900987654321",
      {...}
      "query": "adidas",
      "source": "yandex_search",
      {...}
          "rel": "results",
          "href": "http://data.oxylabs.io/v1/queries/12345678900987654321/results",
          "method": "GET"
        }
      ]
    },
    {
      "callback_url": "https://your.callback.url",
      {...}
      "created_at": "2019-10-01 00:00:01",
      "domain": "com",
      "id": "12345678901234567890",
      {...}
      "query": "nike",
      "source": "yandex_search",
      {...}
          "rel": "results",
          "href": "http://data.oxylabs.io/v1/queries/12345678901234567890/results",
          "method": "GET"
        }
      ]
    },
    {
      "callback_url": "https://your.callback.url",
      {...}
      "created_at": "2019-10-01 00:00:01",
      "domain": "com",
      "id": "01234567899876543210",
      {...}
      "query": "reebok",
      "source": "yandex_search",
      {...}
          "rel": "results",
          "href": "http://data.oxylabs.io/v1/queries/01234567899876543210/results",
          "method": "GET"
        }
      ]
    }
  ]
}
</pre>
<hr />
<h4 id="get-notifier-ip-address-list"><strong>Get Notifier IP Address List</strong></h4>
<p>You may want to whitelist the IPs sending you callback messages or get the list of these IPs for other purposes. This can be done by <code>GET</code>ing this endpoint: <code>https://data.oxylabs.io/v1/info/callbacker_ips</code>.</p>
<pre>curl --user user:pass1 'https://data.oxylabs.io/v1/info/callbacker_ips'
</pre>
<p>The API will return the list of IPs making callback requests to your system:</p>
<pre>{
    "ips": [
        "x.x.x.x",
        "y.y.y.y"
    ]
}
</pre>
<hr />
<h4 id="upload-to-storage"><strong>Upload to Storage</strong></h4>
<p>By default RTC job results are stored in our databases. This means that you will need to query our results endpoint and retrieve content yourself. Custom storage feature allows you to store results in your own cloud storage. The advantage of this feature is that you don't have to make extra requests in order to fetch results &#8211; everything goes directly to your storage bucket.</p>
<p>We support Amazon S3 and Google Cloud Storage. If you would like to use a different type of storage, please contact your account manager to discuss the feature delivery timeline.</p>
<p id="amazon-s3"><strong>Amazon S3</strong></p>
<p>To get your job results uploaded to your Amazon S3 bucket, please set up access permissions for our service. To do that, go to <code>https://s3.console.aws.amazon.com/ &gt; S3 &gt; Storage &gt; Bucket Name (if don't have one, create new) &gt; Permissions &gt; Bucket Policy</code></p>
<p><img loading="lazy" decoding="async" class="aligncenter size-full wp-image-8241" src="https://www.proxysp.com/wp-content/uploads/2021/09/Real-Time-Crawler-for-Yandex-Upload-to-Storage1.png" alt="Real-Time Crawler for Yandex Upload to Storage1" width="486" height="325" srcset="https://proxysp.com/wp-content/uploads/2021/09/Real-Time-Crawler-for-Yandex-Upload-to-Storage1.png 486w, https://proxysp.com/wp-content/uploads/2021/09/Real-Time-Crawler-for-Yandex-Upload-to-Storage1-300x201.png 300w" sizes="(max-width: 486px) 100vw, 486px" /></p>
<p>You can find bucket policy in this <a class="custom_link" href="https://docs.oxylabs.io/resources/s3_bucket_policy.json" target="_blank" rel="noopener">JSON</a> or in code sample area on the right. Don't forget to change bucket name under <code>YOUR_BUCKET_NAME</code>. This policy allows us to write to your bucket, give access to uploaded files to you, and know bucket location.</p>
<p id="google-cloud-storage"><strong>Google Cloud Storage</strong></p>
<p>To get your job results uploaded to your Google Cloud Storage bucket, please set up special permissions for our service. To do that, please create a custom role with the <code>storage.objects.create</code> permission and assign it to the Oxylabs service account email <code>oxyserps-storage@oxyserps-storage.iam.gserviceaccount.com</code>.</p>
<p><img loading="lazy" decoding="async" class="aligncenter size-full wp-image-8242" src="https://www.proxysp.com/wp-content/uploads/2021/09/Real-Time-Crawler-for-Yandex-Upload-to-Storage2.png" alt="Real-Time Crawler for Yandex Upload to Storage2" width="480" height="331" srcset="https://proxysp.com/wp-content/uploads/2021/09/Real-Time-Crawler-for-Yandex-Upload-to-Storage2.png 480w, https://proxysp.com/wp-content/uploads/2021/09/Real-Time-Crawler-for-Yandex-Upload-to-Storage2-300x207.png 300w" sizes="(max-width: 480px) 100vw, 480px" /></p>
<p><img loading="lazy" decoding="async" class="aligncenter size-full wp-image-8243" src="https://www.proxysp.com/wp-content/uploads/2021/09/Real-Time-Crawler-for-Yandex-Upload-to-Storage3.png" alt="Real-Time Crawler for Yandex Upload to Storage3" width="481" height="666" srcset="https://proxysp.com/wp-content/uploads/2021/09/Real-Time-Crawler-for-Yandex-Upload-to-Storage3.png 481w, https://proxysp.com/wp-content/uploads/2021/09/Real-Time-Crawler-for-Yandex-Upload-to-Storage3-217x300.png 217w" sizes="(max-width: 481px) 100vw, 481px" /></p>
<p id="usage"><strong>Usage</strong></p>
<p>To use this feature, please specify two additional parameters in your requests. Learn more <a href="#direct">here</a>.</p>
<p>The upload path looks like this: <code>YOUR_BUCKET_NAME/job_ID.json</code>. You will find job ID in response body that you receive from us after submitting a request. In <a href="#single-query">this example</a> job ID is <code>12345678900987654321</code>.</p>
<pre>{
    "Version": "2012-10-17",
    "Id": "Policy1577442634787",
    "Statement": [
        {
            "Sid": "Stmt1577442633719",
            "Effect": "Allow",
            "Principal": {
                "AWS": "arn:aws:iam::324311890426:user/oxylabs.s3.uploader"
            },
            "Action": "s3:GetBucketLocation",
            "Resource": "arn:aws:s3:::YOUR_BUCKET_NAME"
        },
        {
            "Sid": "Stmt1577442633719",
            "Effect": "Allow",
            "Principal": {
                "AWS": "arn:aws:iam::324311890426:user/oxylabs.s3.uploader"
            },
            "Action": [
                "s3:PutObject",
                "s3:PutObjectAcl"
            ],
            "Resource": "arn:aws:s3:::YOUR_BUCKET_NAME/*"
        }
    ]
}
</pre>
<hr />
<h3 id="realtime">Realtime</h3>
<p>The data submission is the same as in Push-Pull method, but Realtime case we will return the content on open connection. You send us a query, the connection remains open, we retrieve the content and bring it to you. The endpoint that handles that is this:</p>
<pre>POST https://realtime.oxylabs.io/v1/queries
</pre>
<p>There is a timeout limit of 150 seconds for open connections, therefore in rare cases of heavy load we may not be able to ensure the data gets to you.</p>
<p>You need to post query parameters as data in JSON body. Please see example for more details.</p>
<pre>curl --user user:pass1 'https://realtime.oxylabs.io/v1/queries' -H "Content-Type: application/json" 
 -d '{"source": "yandex_search", "domain": "com", "query": "adidas"}'
</pre>
<p>Example response body that will be returned on open connection:</p>
<pre>{
  "results": [
    {
      "content": "
      CONTENT
      "
      "created_at": "2019-10-01 00:00:01",
      "updated_at": "2019-10-01 00:00:15",
      "id": null,
      "page": 1,
      "url": "https://www.yandex.com/search?q=adidas&hl=en&gl=US",
      "job_id": "12345678900987654321",
      "status_code": 200
    }
  ]
}
</pre>
<hr />
<h3 id="superapi">SuperAPI</h3>
<p>If you ever used regular proxies for data scraping, integrating SuperAPI delivery method will be a breeze. All that needs to be done is to use our entry node as proxy, authorize with Real-Time Crawler credentials, and ignore certificates. In <code>cURL</code> it's <code>-k</code> or <code>--insecure</code>. Your data will reach you on open connection.</p>
<pre>GET realtime.oxylabs.io:60000
</pre>
<p>SuperAPI only supports a handful of parameters since it <strong>only works with <a href="#direct">Direct</a> data source</strong> where full URL is provided. These parameters should be sent as headers. This is a list of accepted parameters:</p>
<div class="su-table su-table-responsive su-table-alternate">
<table>
<tbody>
<tr>
<td><code>X-OxySERPs-User-Agent-Type</code></td>
<td>There is no way to indicate a specific User-Agent, but you can let us know which browser and platform to use. A list of supported User-Agents can be found <a href="#user-agent">here</a>.</td>
</tr>
<tr>
<td><code>X-OxySERPs-Geo-Location</code></td>
<td>Geographical location in Yandex <code>rstr</code> format</td>
</tr>
</tbody>
</table>
</div>
<p>If you need help setting up SuperAPI, drop a line at <a class="custom_link" href="mailto:support@oxylabs.io" target="_blank" rel="nofollow noopener">support@oxylabs.io</a>.</p>
<pre>curl -k -x realtime.oxylabs.io:60000 -U user:pass1 -H "X-OxySERPs-User-Agent-Type: desktop_chrome" 
-H "X-OxySERPs-Geo-Location: 15550" "https://yandex.com/search/?text=nike"
</pre>
<hr />
<h2 id="content-type">Content Type</h2>
<p>Real-Time Crawler returns <strong>raw HTML</strong>.</p>
<hr />
<h2 id="data-sources">Data Sources</h2>
<p>There are two approaches on how to retrieve data from Yandex using Real-Time Crawler. You can give us full URL via <a href="#direct">Direct</a>, or you can specify parameters via specifically built data source &#8211; <a href="#search">Search</a>.</p>
<p>Technically not a content type, but Real-Time Crawler is able to render JavaScript when scraping. This may be necessary in some Yandex pages. A checkmark under <code>Render JS</code> will indicate whether a particular data source can be scraped with JavaScript enabled.</p>
<p>If you are unsure which way to choose, drop us a line at <a class="custom_link" href="mailto:support@oxylabs.io" target="_blank" rel="nofollow noopener">support@oxylabs.io</a> or contact your account manager.</p>
<hr />
<h3 id="direct">Direct</h3>
<p><img loading="lazy" decoding="async" class="size-full wp-image-8248 alignnone" src="https://www.proxysp.com/wp-content/uploads/2021/09/Real-Time-Crawler-for-Yandex-Direct.png" alt="Real-Time Crawler for Yandex Direct" width="442" height="25" srcset="https://proxysp.com/wp-content/uploads/2021/09/Real-Time-Crawler-for-Yandex-Direct.png 442w, https://proxysp.com/wp-content/uploads/2021/09/Real-Time-Crawler-for-Yandex-Direct-300x17.png 300w" sizes="(max-width: 442px) 100vw, 442px" /></p>
<p><code>yandex</code> source is designed to retrieve content of direct URLs of various Yandex pages. This means that instead of sending multiple parameters, you can provide us with a direct URL to required Yandex page. We do not strip any parameters or alter your URLs in any other way.</p>
<p><span class="test">Query parameters</span></p>
<div class="su-table su-table-responsive su-table-alternate">
<table width="216">
<tbody>
<tr>
<td style="font-weight: 400;" width="72"><strong>Parameter</strong></td>
<td style="font-weight: 400;" width="72"><strong>Description</strong></td>
<td style="font-weight: 400;" width="72"><strong>Default Value</strong></td>
</tr>
<tr>
<td style="font-weight: 400;" width="72">source</td>
<td style="font-weight: 400;" width="72">Data source</td>
<td style="font-weight: 400;" width="72">yandex</td>
</tr>
<tr>
<td style="font-weight: 400;" width="72">url</td>
<td style="font-weight: 400;" width="72">Direct URL (link) to Yandex page</td>
<td style="font-weight: 400;" width="72">&#8211;</td>
</tr>
<tr>
<td style="font-weight: 400;" width="72">user_agent_type</td>
<td style="font-weight: 400;" width="72">Device type and browser. The full list can be found <a href="#user-agent">here.</a></td>
<td style="font-weight: 400;" width="72">desktop</td>
</tr>
<tr>
<td style="font-weight: 400;" width="72">render</td>
<td style="font-weight: 400;" width="72">Enable JavaScript rendering. Use when the target requires JavaScript to load content. Only works via Push-Pull (a.k.a. Callback) method. There are two available values for this parameter: html(get raw output) and png (get a Base64-encoded screenshot).</td>
<td style="font-weight: 400;" width="72"></td>
</tr>
<tr>
<td style="font-weight: 400;" width="72">callback_url</td>
<td style="font-weight: 400;" width="72">URL to your callback endpoint</td>
<td style="font-weight: 400;" width="72">&#8211;</td>
</tr>
<tr>
<td style="font-weight: 400;" width="72">storage_type</td>
<td style="font-weight: 400;" width="72">Storage service provider. We support Amazon S3 and Google Cloud Storage. The storage_type parameter values for these storage providers are, correspondingly, s3 and gcs. The full implementation can be found on the<a href="#upload-to-storage"> Upload to Storage </a>page. This feature only works via Push-Pull (Callback) method.</td>
<td style="font-weight: 400;" width="72">&#8211;</td>
</tr>
<tr>
<td style="font-weight: 400;" width="72">storage_url</td>
<td style="font-weight: 400;" width="72">Your storage bucket name. Only works via Push-Pull (Callback) method.</td>
<td style="font-weight: 400;" width="72">&#8211;</td>
</tr>
<tr>
<td style="font-weight: 400;" colspan="3" width="216">   &#8211; required parameter</td>
</tr>
</tbody>
</table>
</div>
<p>In this example the API will retrieve Yandex search for keyword <code>nike</code> in Push-Pull method:</p>
<pre>curl --user user:pass1 'https://data.oxylabs.io/v1/queries' -H "Content-Type: application/json"
 -d '{"source": "yandex", "url": "https://yandex.com/search/?text=nike&"}'
</pre>
<p>Here is the same example in Realtime:</p>
<pre>curl --user user:pass1 'https://realtime.oxylabs.io/v1/queries' -H "Content-Type: application/json"
 -d '{"source": "yandex", "url": "https://yandex.com/search/?text=nike&"}'
</pre>
<p>And via SuperAPI:</p>
<pre>curl -k -x realtime.oxylabs.io:60000 -U user:pass1 "https://yandex.com/search/?text=nike&"
</pre>
<hr />
<h3 id="search">Search</h3>
<p><img loading="lazy" decoding="async" class="size-full wp-image-8250 alignnone" src="https://www.proxysp.com/wp-content/uploads/2021/09/Real-Time-Crawler-for-Yandex-Search.png" alt="Real-Time Crawler for Yandex Search" width="424" height="27" srcset="https://proxysp.com/wp-content/uploads/2021/09/Real-Time-Crawler-for-Yandex-Search.png 424w, https://proxysp.com/wp-content/uploads/2021/09/Real-Time-Crawler-for-Yandex-Search-300x19.png 300w" sizes="(max-width: 424px) 100vw, 424px" /></p>
<p><code>yandex_search</code> source is designed to retrieve Yandex Search results (SERP).</p>
<p><span class="test">Query parameters</span></p>
<div class="su-table su-table-responsive su-table-alternate">
<table width="216">
<tbody>
<tr>
<td style="font-weight: 400;" width="72"><strong>Parameter</strong></td>
<td style="font-weight: 400;" width="72"><strong>Description</strong></td>
<td style="font-weight: 400;" width="72"><strong>Default Value</strong></td>
</tr>
<tr>
<td style="font-weight: 400;" width="72">source</td>
<td style="font-weight: 400;" width="72">Data source</td>
<td style="font-weight: 400;" width="72">yandex_search</td>
</tr>
<tr>
<td style="font-weight: 400;" width="72">domain</td>
<td style="font-weight: 400;" width="72">Domain localization. Available domains: com, ru, ua, by, kz, tr</td>
<td style="font-weight: 400;" width="72">com</td>
</tr>
<tr>
<td style="font-weight: 400;" width="72">query</td>
<td style="font-weight: 400;" width="72">UTF-encoded keyword</td>
<td style="font-weight: 400;" width="72">&#8211;</td>
</tr>
<tr>
<td style="font-weight: 400;" width="72">start_page</td>
<td style="font-weight: 400;" width="72">Starting page number</td>
<td style="font-weight: 400;" width="72">1</td>
</tr>
<tr>
<td style="font-weight: 400;" width="72">pages</td>
<td style="font-weight: 400;" width="72">Number of pages to retrieve</td>
<td style="font-weight: 400;" width="72">1</td>
</tr>
<tr>
<td style="font-weight: 400;" width="72">limit</td>
<td style="font-weight: 400;" width="72">Number of results to retrieve in each page</td>
<td style="font-weight: 400;" width="72">10</td>
</tr>
<tr>
<td style="font-weight: 400;" width="72">locale</td>
<td style="font-weight: 400;" width="72">Language. Available languages: en, ru, by, fr, de, id, kk, tt, tr, uk.</td>
<td style="font-weight: 400;" width="72">&#8211;</td>
</tr>
<tr>
<td style="font-weight: 400;" width="72">geo_location</td>
<td style="font-weight: 400;" width="72">Geographical location in Yandex rstr format</td>
<td style="font-weight: 400;" width="72">&#8211;</td>
</tr>
<tr>
<td style="font-weight: 400;" width="72">user_agent_type</td>
<td style="font-weight: 400;" width="72">Device type and browser. The full list can be found<a href="#user-agent"> here.</a></td>
<td style="font-weight: 400;" width="72">desktop</td>
</tr>
<tr>
<td style="font-weight: 400;" width="72">callback_url</td>
<td style="font-weight: 400;" width="72">URL to your callback endpoint</td>
<td style="font-weight: 400;" width="72">&#8211;</td>
</tr>
<tr>
<td style="font-weight: 400;" width="72">storage_type</td>
<td style="font-weight: 400;" width="72">Storage service provider. We support Amazon S3 and Google Cloud Storage. The storage_type parameter values for these storage providers are, correspondingly, s3 and gcs. The full implementation can be found on the <a href="#upload-to-storage">Upload to Storage </a>page. This feature only works via Push-Pull (Callback) method.</td>
<td style="font-weight: 400;" width="72">&#8211;</td>
</tr>
<tr>
<td style="font-weight: 400;" width="72">storage_url</td>
<td style="font-weight: 400;" width="72">Your storage bucket name. Only works via Push-Pull (Callback) method.</td>
<td style="font-weight: 400;" width="72">&#8211;</td>
</tr>
<tr>
<td style="font-weight: 400;" colspan="3" width="216">   &#8211; required parameter</td>
</tr>
</tbody>
</table>
</div>
<p id="search">API makes request to <code>yandex.com</code> to retrieve search results pages from number 11 to number 20 for keyword <code>adidas</code>. The API will post a JSON request to <code>your.callback.url</code> containing the URL to download the raw HTML output once the data retrieval task is successfully finished. This is Push-Pull:</p>
<pre>curl --user user:pass1 'https://data.oxylabs.io/v1/queries' -H "Content-Type: application/json"
 -d '{"source": "yandex_search", "domain": "com", "query": "adidas", "start_page": 11, "pages": 10, "callback_url": "https://your.callback.url"}'
</pre>
<p>And here is the same example in Realtime:</p>
<pre>curl --user user:pass1 'https://realtime.oxylabs.io/v1/queries' -H "Content-Type: application/json"
 -d '{"source": "yandex_search", "domain": "com", "query": "adidas", "start_page": 11, "pages": 10, "callback_url": "https://your.callback.url"}'
</pre>
<hr />
<h2 id="parameter-values">Parameter Values</h2>
<h3 id="user-agent">User-Agent</h3>
<p>Download full list of <code>user_agent_type</code> values in JSON <a class="custom_link" href="https://docs.oxylabs.io/resources/user_agent_type.json" target="_blank" rel="noopener">here</a>.</p>
<pre>[
  {
    "user_agent_type": "desktop",
    "description": "Random desktop browser User-Agent"
  },
  {
    "user_agent_type": "desktop_firefox",
    "description": "Random User-Agent of one of the latest versions of desktop Firefox"
  },
  {
    "user_agent_type": "desktop_chrome",
    "description": "Random User-Agent of one of the latest versions of desktop Chrome"
  },
  {
    "user_agent_type": "desktop_opera",
    "description": "Random User-Agent of one of the latest versions of desktop Opera"
  },
  {
    "user_agent_type": "desktop_edge",
    "description": "Random User-Agent of one of the latest versions of desktop Edge"
  },
  {
    "user_agent_type": "desktop_safari",
    "description": "Random User-Agent of one of the latest versions of desktop Safari"
  },
  {
    "user_agent_type": "mobile",
    "description": "Random mobile browser User-Agent"
  },
  {
    "user_agent_type": "mobile_android",
    "description": "Random User-Agent of one of the latest versions of Android browser"
  },
  {
    "user_agent_type": "mobile_ios",
    "description": "Random User-Agent of one of the latest versions of iPhone browser"
  },
  {
    "user_agent_type": "tablet",
    "description": "Random tablet browser User-Agent"
  },
  {
    "user_agent_type": "tablet_android",
    "description": "Random User-Agent of one of the latest versions of Android tablet"
  },
  {
    "user_agent_type": "tablet_ios",
    "description": "Random User-Agent of one of the latest versions of iPad tablet"
  }
]
</pre>
<hr />
<h2 id="account-status">Account Status</h2>
<h3 id="usage-statistics">Usage Statistics</h3>
<p>You can find your usage statistics by querying the following endpoint:</p>
<pre>GET https://data.oxylabs.io/v1/stats
</pre>
<p>By default the API will return all time usage statistics. Adding <code>?group_by=month</code> will return monthly stats, while <code>?group_by=day</code> will return daily numbers.</p>
<p>This query will return all time statistics. You can find your daily and monthly usage by adding either <code>?group_by=day</code> or <code>?group_by=month</code></p>
<pre>curl --user user:pass1 'https://data.oxylabs.io/v1/stats'
</pre>
<p>Sample output:</p>
<pre>{
    "data": {
        "sources": [
            {
                "realtime_results_count": "90",
                "results_count": "10",
                "title": "yandex"
            },
            {
                "realtime_results_count": "19",
                "results_count": "87",
                "title": "yandex_search"
            }
        ]
    },
    "meta": {
        "group_by": null
    }
}
</pre>
<hr />
<h3 id="limits">Limits</h3>
<p>The following endpoint will give your monthly commitment information as well as how much has already been used:</p>
<pre>GET https://data.oxylabs.io/v1/stats/limits
</pre>
<pre>curl --user user:pass1 'https://data.oxylabs.io/v1/stats/limits'
</pre>
<p>Sample output:</p>
<pre>{
    "monthly_requests_commitment": 4500000,
    "used_requests": 985000
}
</pre>
<hr />
<h2 id="response-codes">Response Codes</h2>
<div class="su-table su-table-responsive su-table-alternate">
<table>
<thead>
<tr>
<th>Code</th>
<th>Status</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><code>204</code></td>
<td>No Content</td>
<td>You are trying to retrieve a job that has not been completed yet.</td>
</tr>
<tr>
<td><code>400</code></td>
<td>Multiple error messages</td>
<td>Bad request structure, could be a misspelled parameter or invalid value. Response body will have more specific error message.</td>
</tr>
<tr>
<td><code>401</code></td>
<td>&#8216;Authorization header not provided' / &#8216;Invalid authorization header' / &#8216;Client not found'</td>
<td>Missing authorization header or incorrect login credentials.</td>
</tr>
<tr>
<td><code>403</code></td>
<td>Forbidden</td>
<td>Your account does not have access to this resource.</td>
</tr>
<tr>
<td><code>404</code></td>
<td>Not Found</td>
<td>Job ID you are looking for is no longer available.</td>
</tr>
<tr>
<td><code>429</code></td>
<td>Too many requests</td>
<td>Exceeded rate limit. Please contact your account manager to increase limits.</td>
</tr>
<tr>
<td><code>500</code></td>
<td>Unknown Error</td>
<td>Service unavailable.</td>
</tr>
<tr>
<td><code>524</code></td>
<td>Timeout</td>
<td>Service unavailable.</td>
</tr>
<tr>
<td><code>612</code></td>
<td>Undefined Internal Error</td>
<td>Something went wrong and we failed the job you submitted. You can try again at no extra cost, as we don't charge you for <code>faulted</code> jobs. If that doesn't work, give us a shout.</td>
</tr>
<tr>
<td><code>613</code></td>
<td>Faulted After Too Many Retries</td>
<td>We tried scraping the job you submitted, but gave up after reaching our retry limit. You can try again at no extra cost, as we don't charge you for <code>faulted</code> jobs. If that doesn't work, give us a shout.</td>
</tr>
</tbody>
</table>
</div>
<p>Cloud storage upload response codes:</p>
<div class="su-table su-table-responsive su-table-alternate">
<table>
<thead>
<tr>
<th>Code</th>
<th>Status</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><code>10001</code></td>
<td>Unexpected Exception</td>
<td>Something terribly wrong happened. We probably know about this already and are fixing it. Let us know anyway.</td>
</tr>
<tr>
<td><code>13000</code></td>
<td>Upload Success</td>
<td>All good!</td>
</tr>
<tr>
<td><code>13001</code></td>
<td>Upload Failed</td>
<td>We couldn't upload job results your bucket.</td>
</tr>
<tr>
<td><code>13102</code></td>
<td>No Such Path</td>
<td>We couldn't find a bucket with such name. Please double check.</td>
</tr>
<tr>
<td><code>13103</code></td>
<td>Access Denied</td>
<td>Bucket doesn't have required permissions. To find out how to give us required access, see <a href="#upload-to-storage">here</a>.</td>
</tr>
</tbody>
</table>
</div>
<hr />
<h4>References</h4>
<ul>
<li><a href="https://docs.oxylabs.io/rtc/source/yandex/index.html#quick-start" target="_blank" rel="nofollow noopener">https://docs.oxylabs.io/rtc/source/yandex/index.html</a></li>
<li><a href="https://docs.oxylabs.io/rtc/index.html" target="_blank" rel="nofollow noopener">https://docs.oxylabs.io/rtc/index.html</a></li>
</ul>
<p>&nbsp;</p>
<hr />
<blockquote><p><strong>Disclaimer:</strong> This part of the content is mainly from the merchant. If the merchant does not want it to be displayed on my website, please <a href="https://www.proxysp.com/contact-us/">contact us</a> to delete your content.</p></blockquote>
]]></content:encoded>
					
					<wfw:commentRss>https://proxysp.com/oxylabs-yandex-real-time-crawler/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">7633</post-id>	</item>
		<item>
		<title>How to use IPv4 Proxies API (By BlazingSEO) : Learn Manuals Before You Buy</title>
		<link>https://proxysp.com/how-to-ipv4-proxies-api/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=how-to-ipv4-proxies-api</link>
					<comments>https://proxysp.com/how-to-ipv4-proxies-api/#respond</comments>
		
		<dc:creator><![CDATA[admin]]></dc:creator>
		<pubDate>Thu, 01 Jan 1970 00:00:00 +0000</pubDate>
				<category><![CDATA[BlazingSEO Proxies]]></category>
		<guid isPermaLink="false">https://www.proxysp.com/?p=8893</guid>

					<description><![CDATA[Here is a guide to IPv4 proxies API Settings, We're using the sample of BlazingSEO's IPv4 proxies. API Key: mZQjSDSDSD-SAMPALE Welcome to the Blazing proxy API page! &#8230;<p class="read-more"> <a class="ast-button" href="https://proxysp.com/how-to-ipv4-proxies-api/"> <span class="screen-reader-text">How to use IPv4 Proxies API (By BlazingSEO) : Learn Manuals Before You Buy</span> Read More &#187;</a></p>]]></description>
										<content:encoded><![CDATA[<blockquote><p>Here is a guide to IPv4 proxies API Settings, We're using the sample of BlazingSEO's IPv4 proxies.</p></blockquote>
<h2><a href="https://www.proxysp.com/redirect/blazingseollc/" target="_blank" rel="nofollow noopener"><img loading="lazy" decoding="async" class="aligncenter wp-image-8894 size-large" src="https://www.proxysp.com/wp-content/uploads/2021/10/IPv4-proxies-price-1024x497.png" alt="ipv4 proxies price plan" width="1024" height="497" srcset="https://proxysp.com/wp-content/uploads/2021/10/IPv4-proxies-price-1024x497.png 1024w, https://proxysp.com/wp-content/uploads/2021/10/IPv4-proxies-price-300x146.png 300w, https://proxysp.com/wp-content/uploads/2021/10/IPv4-proxies-price-768x373.png 768w, https://proxysp.com/wp-content/uploads/2021/10/IPv4-proxies-price.png 1224w" sizes="(max-width: 1024px) 100vw, 1024px" /></a></h2>
<h2 class="desc-title-blk">API Key: <strong>mZQjSDSDSD-SAMPALE</strong></h2>
<p>Welcome to the Blazing proxy API page! The following guidelines provide the information you need to get started using your API to automate proxy management.</p>
<p>You will need your unique API key (<strong>mZQjSDSDSD-SAMPALE</strong>) any time you use the API. Treat this like you would any password, because it is unique to you and allows access to your proxy product details. It is worth noting that it does not enable access to any of your personal or billing information.</p>
<p>The following sections provide instructions to setup and use your API to view and manage your inventory:</p>
<hr />
<h2 class="desc-title-blk">Setup</h2>
<p><a href="https://www.proxysp.com/redirect/blazingseollc/" target="_blank" rel="nofollow noopener"><img loading="lazy" decoding="async" class="aligncenter wp-image-8895 size-large" src="https://www.proxysp.com/wp-content/uploads/2021/10/API-Access-1024x585.png" alt="API Access" width="1024" height="585" srcset="https://proxysp.com/wp-content/uploads/2021/10/API-Access-1024x585.png 1024w, https://proxysp.com/wp-content/uploads/2021/10/API-Access-300x171.png 300w, https://proxysp.com/wp-content/uploads/2021/10/API-Access-768x438.png 768w, https://proxysp.com/wp-content/uploads/2021/10/API-Access.png 1121w" sizes="(max-width: 1024px) 100vw, 1024px" /></a></p>
<p>The API will only work if you have set up authorization using either IP Auth or User/Password, so before using it be sure that your IPs are authorized. You can find instructions to do so by <a href="https://www.proxysp.com/how-to-use-blazingseo-proxies/" target="_blank" rel="noopener">clicking here.</a></p>
<p>Every request to the Customer Blazing Proxies API should contain an email and API key. If a user does not pass the email and API key or it is invalid &#8211; the API will respond with status 401 (Unauthorized).</p>
<hr />
<h2 class="desc-title-blk">Authorization type</h2>
<h3>Get your current authorization type:</h3>
<pre><code>https://blazingseollc.com/proxy/dashboard/api/auth-type/privateproxyreviews@gmail.com/mZQjUfW3</code></pre>
<h3>Change authorization type:</h3>
<pre><code>https://blazingseollc.com/proxy/dashboard/api/auth-type/privateproxyreviews@gmail.com/mZQjUfW3/authType</code></pre>
<h3>Change proxy authorization configuration with allowed types:</h3>
<ul>
<li>{authType} &#8211; authorization type to set, possible values &#8211; [&#8216;PW', &#8216;IP']</li>
<li>{ipAuthType} (query parameter) &#8211; can be specified if authType = IP, possible values &#8211; [&#8216;HTTP', &#8216;SOCKS']</li>
</ul>
<hr />
<h2 class="desc-title-blk">View Whitelisted Authorized Addresses</h2>
<p>Returns IPs that are authorized on your account to access proxies. It could take 10-30 minutes after an authorization request for the newly authorized IPs to show in this listing.</p>
<pre><code>https://blazingseollc.com/proxy/dashboard/api/export/ips/privateproxyreviews@gmail.com/mZQjUfW3</code></pre>
<hr />
<h2 class="desc-title-blk">List All Proxy IPs in Your Account</h2>
<p>Every time you call the API URL you will be given the newest list of <strong>authorized</strong> proxies in your account.</p>
<h3 class="desc-subtitle-blk">Export Proxy IPs to a CSV file</h3>
<pre><code>https://blazingseollc.com/proxy/dashboard/api/export/4/all/privateproxyreviews@gmail.com/mZQjUfW3/list.csv</code></pre>
<ul>
<li>additionalValues &#8211; You can specify this parameter to display additional values in the list (region,country,category)</li>
</ul>
<pre><code>https://blazingseollc.com/proxy/dashboard/api/export/4/all/privateproxyreviews@gmail.com/mZQjUfW3/list.csv?additionalValues=region,country</code></pre>
<hr />
<h3 class="desc-subtitle-blk">Get Proxy IPs by Country or Category</h3>
<pre><code>https://blazingseollc.com/proxy/dashboard/api/export/4/COUNTRY-CATEGORY/privateproxyreviews@gmail.com/mZQjUfW3/list.csv</code></pre>
<h3 class="desc-subtitle-blk">Get list of Proxy IPs of certain package</h3>
<ul>
<li>{COUNTRY} &#8211; package country in country code (us/de/br/fr/ca etc)</li>
<li>{CATEGORY} &#8211; package category (static/semi-3/rotate/sneaker/block/shopify/static-res)</li>
</ul>
<hr />
<h2 class="desc-title-blk">Adding and Removing IPs</h2>
<h3 class="desc-subtitle-blk">Add new IP</h3>
<pre><code>https://blazingseollc.com/proxy/dashboard/api/ips/add/privateproxyreviews@gmail.com/mZQjUfW3/IPTOADD</code></pre>
<ul>
<li>{IPTOADD} &#8211; IP address which should be enabled for proxy authorization (Note that it may take 10-30 minutes after the submission before your IP is ready for use).</li>
<li>{IPTOADD1,IPTOADD2,&#8230;,IPTOADD20} &#8211; You can add multiple IP addresses (separated by commas) for proxy authorization.</li>
</ul>
<h3 class="desc-subtitle-blk">Delete / Remove existing IP</h3>
<pre><code>https://blazingseollc.com/proxy/dashboard/api/ips/delete/privateproxyreviews@gmail.com/mZQjUfW3/IPTODELETE</code></pre>
<ul>
<li>{IPTODELETE} &#8211; previously added proxy authorization IP which you now want to remove from your account. Once this is submitted, the IP will no longer be authorized after 10-30 minutes.</li>
</ul>
<hr />
<h2 class="desc-title-blk">Replacing Proxy IPs</h2>
<h3 class="desc-subtitle-blk">Get available replacements</h3>
<pre><code>https://blazingseollc.com/proxy/dashboard/api/available-replacements/privateproxyreviews@gmail.com/mZQjUfW3</code></pre>
<h3 class="desc-subtitle-blk">Replace a Single Proxy IP</h3>
<p>Replaces single Proxy IP, and returns # of available replacements for Proxy IPs in the same package type.</p>
<pre><code>https://blazingseollc.com/proxy/dashboard/api/replace-ip/privateproxyreviews@gmail.com/mZQjUfW3/IP_Single</code></pre>
<ul>
<li>{IP} &#8211; Proxy IP to replace (will subsequently reduce the replacements amount)</li>
</ul>
<h3 class="desc-subtitle-blk">Replace multiple Proxy IPs</h3>
<p>Replaces multiple IPs at the same time. The list of ips must be comma-separated and provided as query parameter &#8216;replace';<br />
This also returns a list of successfully flagged (IPs to be replaced by cron job) IPs, and # of available replacements (similar to &#8216;Get Available Replacements' API method).</p>
<pre><code>https://blazingseollc.com/proxy/dashboard/api/replace-multiple-ips/privateproxyreviews@gmail.com/mZQjUfW3?replace=IP1,IP2,IPn</code></pre>
<hr />
<h3 class="desc-title-blk">Third-party Tool Setup: GSA SER</h3>
<p>To setup GSA SER to automatically grab your proxies at a certain interval, follow the instructions below. This is useful for semi-dedicated and dedicated users who request proxies to be changed every 30 days, or if a proxy dies by chance — GSA will automatically grab the new proxies for you 🙂</p>
<ol>
<li style="list-style-type: none;">
<ol>
<li>Open up Proxy Settings tab</li>
<li>Click on Add/Edit Proxy</li>
<li>Right click the list on the left and select ‘Check None’</li>
<li>Click the Add button</li>
<li>Add your API URL (above) and select the option to ‘Add as private proxy type’</li>
<li>Go back to the main Proxy settings page and click on the Options tab</li>
<li>Set ‘Automatically search for new proxies every’ — to 120 minutes</li>
<li>Done!</li>
</ol>
</li>
</ol>
<hr />
<h2 style="text-align: center;"><strong>Rotation Options</strong></h2>
<div class="panel-body">
<div class="alert alert-info">Rotation Options are only valid for Semi-Dedicated or <a href="https://www.proxysp.com/dedicated-proxies-blazingseo/">Dedicated Plans</a>.</div>
<ul>
<li class="alert alert-info"><label for="rotate_ever">Sometimes proxies may go down for a few seconds when we are making server optimizations (to make your proxies faster) and because we automatically replace any proxies that go down you would receive new proxies assigned to your ports. If you DO NOT want new proxies assigned if we detect any of them to go down, check this box. This option is suited for users that use our proxies for social media and do not want a new IP.</label></li>
<li>Check this box if you want your static proxies rotated every 30 days. This option is not suited for people that use our proxies for social media and wish to keep their IPs for as long as possible.</li>
</ul>
<hr />
<p>From,</p>
<ul>
<li><a href="https://blazingseollc.com/proxy/dashboard/settings" target="_blank" rel="nofollow noopener">https://billing.blazingseollc.com/hosting/affiliates.php</a></li>
</ul>
</div>
<hr />
<blockquote><p><strong>Disclaimer</strong>: This part of the content is mainly from the merchant. If the merchant does not want it to be displayed on my website, please <a href="https://www.proxysp.com/contact-us/">contact us</a> to delete your content.</p></blockquote>
]]></content:encoded>
					
					<wfw:commentRss>https://proxysp.com/how-to-ipv4-proxies-api/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">8893</post-id>	</item>
		<item>
		<title>How to Use Bing Real-Time Crawler [Part 3]: Oxylabs Real-Time Crawler for Bing</title>
		<link>https://proxysp.com/oxylabs-bing-real-time-crawler/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=oxylabs-bing-real-time-crawler</link>
					<comments>https://proxysp.com/oxylabs-bing-real-time-crawler/#respond</comments>
		
		<dc:creator><![CDATA[admin]]></dc:creator>
		<pubDate>Thu, 01 Jan 1970 00:00:00 +0000</pubDate>
				<category><![CDATA[How to Use OxyLabs Proxy (OxyLabs User Manual Navigation)]]></category>
		<guid isPermaLink="false">https://www.proxysp.com/?p=7634</guid>

					<description><![CDATA[Do you know how to use OxyLabs Real-time Crawler for Bing? This is the most comprehensive introduction from OxyLabs official. Quick Start Real-Time Crawler is built &#8230;<p class="read-more"> <a class="ast-button" href="https://proxysp.com/oxylabs-bing-real-time-crawler/"> <span class="screen-reader-text">How to Use Bing Real-Time Crawler [Part 3]: Oxylabs Real-Time Crawler for Bing</span> Read More &#187;</a></p>]]></description>
										<content:encoded><![CDATA[<blockquote><p>Do you know how to use OxyLabs Real-time Crawler for Bing? This is the most comprehensive introduction from OxyLabs official.</p></blockquote>
<h2 id="quick-start">Quick Start</h2>
<p>Real-Time Crawler is built for heavy-duty data retrieval operations. You can use Real-Time Crawler to access various Bing pages. It enables effortless web data extraction from search engines without any delays or errors.</p>
<p>Real-Time Crawler for Bing uses <a class="custom_link" href="https://en.wikipedia.org/wiki/Basic_access_authentication" target="_blank" rel="nofollow noopener">basic HTTP authentication</a> that requires sending username and password.</p>
<p>This is by far the fastest way to start using Real-Time Crawler for Bing. You will send a query <code>adidas</code> to <code>bing_search</code> using <a href="#realtime">Realtime</a> integration method. Don't forget to replace <code>USERNAME</code> and <code>PASSWORD</code> with your proxy user credentials.</p>
<pre>curl --user "USERNAME:PASSWORD" 'https://realtime.oxylabs.io/v1/queries' -H "Content-Type: application/json" -d '{"source": "bing_search", "domain": "com", "query": "adidas"}'
</pre>
<p>If you have any questions not covered by this documentation, please contact your account manager or our support staff at <a class="custom_link" href="mailto:support@oxylabs.io" target="_blank" rel="nofollow noopener">support@oxylabs.io</a>.</p>
<hr />
<h2 id="integration-methods">Integration Methods</h2>
<p>Real-Time Crawler for Bing supports three integration methods which have their unique benefits:</p>
<ul>
<li><a href="#push-pull">Push-Pull</a>. Using this method it is now required to mainain an active connection with our endpoint to retrieve the data. Upon making a request, our system is able to automatically ping users server when the job is done (see <a href="#callback">Callback</a>). This method saves computing resources and can be scaled easily.</li>
<li><a href="#realtime">Realtime</a>. The method requires user to maintain an active connection with our endpoint in order to get the results successfully when the job is completed. This method can be implemented into one service while Push-Pull method is a two step process.</li>
<li><a href="#superapi">SuperAPI</a>. This method is very similar to Realtime but instead posting data to our endpoint, user can use HTML Cralwer as a proxy. To retrieve the data, user must set up a proxy endpoint and make GET request to a desired URL. Additional parameters must be added using headers.</li>
</ul>
<p>Our recommended data extraction method is <a href="#push-pull">Push-Pull</a>.</p>
<hr />
<h3 id="push-pull">Push-Pull</h3>
<p>This is the most simple yet the most reliable and recommended data delivery method. In Push-Pull scenario you send us a query, we return you job <code>id</code>, and once the job is done you can use that <code>id</code> to retrieve content from <code>/results</code> endpoint. You can check job completion status yourself, or you can set up a simple listener that is able to accept POST queries.</p>
<p>This way we will send you a callback message once the job is ready to be retrieved. In this particular example the results will be automatically <a href="#upload-to-storage">uploaded to your S3 bucket</a> named <code>YOUR_BUCKET_NAME</code>.</p>
<hr />
<h4 id="single-query"><strong>Single Query</strong></h4>
<p>The following endpoint will handle single queries for one keyword or URL. The API will return a confirmation message containing job information, including job <code>id</code>. You can check job completion status using that <code>id</code>, or you can ask us to ping your callback endpoint once the scraping task is finished by adding <code>callback_url</code> in the query.</p>
<pre>POST https://data.oxylabs.io/v1/queries
</pre>
<p>You need to post query parameters as data in JSON body.</p>
<pre>curl --user user:pass1 'https://data.oxylabs.io/v1/queries' -H "Content-Type: application/json" 
 -d '{"source": "bing_search", "domain": "com", "query": "adidas", "callback_url": "https://your.callback.url", "storage_type": "s3", "storage_url": "YOUR_BUCKET_NAME"}'
</pre>
<p>The API will respond with query information in JSON format, by printing it in response body, similar to this:</p>
<pre>{
  "callback_url": "https://your.callback.url",
  "client_id": 5,
  "context": [
    {
      "key": "safe_search",
      "value": null
    }
  ],
  "created_at": "2019-10-01 00:00:01",
  "domain": "com",
  "geo_location": null,
  "id": "12345678900987654321",
  "limit": 10,
  "locale": null,
  "pages": 1,
  "render": null,
  "query": "adidas",
  "source": "bing_search",
  "start_page": 1,
  "status": "pending",  
  "storage_type": "s3",
  "storage_url": "YOUR_BUCKET_NAME/12345678900987654321.json",
  "subdomain": "www",
  "updated_at": "2019-10-01 00:00:01",
  "user_agent_type": "desktop",
  "_links": [
    {
      "rel": "self",
      "href": "http://data.oxylabs.io/v1/queries/12345678900987654321",
      "method": "GET"
    },
    {
      "rel": "results",
      "href": "http://data.oxylabs.io/v1/queries/12345678900987654321/results",
      "method": "GET"
    }
  ]
}
</pre>
<hr />
<h4 id="check-job-status"><strong>Check Job Status</strong></h4>
<p>If your query had <code>callback_url</code>, we will send you a message containing link to content once the scraping task is done. However, if there was no <code>callback_url</code> in the query, you will need to check job status yourself. For that you need to use the URL in <code>href</code> under <code>rel</code>:<code>self</code> in the response message you received after submitting your query to our API. It should look similar to this: <code>http://data.oxylabs.io/v1/queries/12345678900987654321</code>.</p>
<pre>GET https://data.oxylabs.io/v1/queries/{id}
</pre>
<p>Querying this link will return job information, including its <code>status</code>. There are 3 possible <code>status</code> values:</p>
<div class="su-table su-table-responsive su-table-alternate">
<table>
<tbody>
<tr>
<td><code>pending</code></td>
<td>The job is still in the queue and has not been completed.</td>
</tr>
<tr>
<td><code>done</code></td>
<td>The job is completed, you may retrieve the result by querying the URL in <code>href</code> under <code>rel</code>:<code>results</code> : <code>http://data.oxylabs.io/v1/queries/12345678900987654321/results</code></td>
</tr>
<tr>
<td><code>faulted</code></td>
<td>There was an issue with the job and we couldn't complete it, most likely due to a server error on the target site's side.</td>
</tr>
</tbody>
</table>
</div>
<pre>curl --user user:pass1 'http://data.oxylabs.io/v1/queries/12345678900987654321'
</pre>
<p>The API will respond with query information in JSON format, by printing it in response body. Notice that job <code>status</code> has been changed to <code>done</code>. You can now retrieve content by querying <code>http://data.oxylabs.io/v1/queries/12345678900987654321/results</code>.</p>
<p>You can also see that the task has been <code>updated_at</code> <code>2019-10-01 00:00:15</code> &#8211; the query took 14 seconds to complete.</p>
<pre>{
  "client_id": 5,
  "context": [
    {
      "key": "safe_search",
      "value": null
    }
  ],
  "created_at": "2019-10-01 00:00:01",
  "domain": "com",
  "geo_location": null,
  "id": "12345678900987654321",
  "limit": 10,
  "locale": null,
  "pages": 1,
  "render": null,
  "query": "adidas",
  "source": "bing_search",
  "start_page": 1,
  "status": "done",
  "subdomain": "www",
  "updated_at": "2019-10-01 00:00:15",
  "user_agent_type": "desktop",
  "_links": [
    {
      "rel": "self",
      "href": "http://data.oxylabs.io/v1/queries/12345678900987654321",
      "method": "GET"
    },
    {
      "rel": "results",
      "href": "http://data.oxylabs.io/v1/queries/12345678900987654321/results",
      "method": "GET"
    }
  ]
}
</pre>
<hr />
<h4 id="retrieve-job-content"><strong>Retrieve Job Content</strong></h4>
<p>Once you know the job is ready to retrieved either by checking its status or receiving a callback from us, you can GET it using the URL in <code>href</code> under <code>rel</code>:<code>results</code> in either our initial response or in callback message. It should look similar to this: <code>http://data.oxylabs.io/v1/queries/12345678900987654321/results</code></p>
<pre>GET https://data.oxylabs.io/v1/queries/{id}/results
</pre>
<p>The results can be automatically retrieved without periodically checking job status by setting up <a href="#callback">Callback</a> service. User needs to specfy the IP or domain of the server where the Callback service is running. When our system completes a job, it will send a message to the provided IP or domain and the Callback service will download the results as described in the <a href="#callback">Callback implementation example</a>.</p>
<pre>curl --user user:pass1 'http://data.oxylabs.io/v1/queries/12345678900987654321/results'
</pre>
<p>The API will return job content:</p>
<pre>{
  "results": [
    {
      "content": "&lt;!doctype html&gt;
        CONTENT      
      ",
      "created_at": "2019-10-01 00:00:01",
      "updated_at": "2019-10-01 00:00:15",
      "page": 1,
      "url": "https://www.bing.com/search?q=adidas",
      "job_id": "12345678900987654321",
      "status_code": 200
    }
  ]
}
</pre>
<hr />
<h4 id="callback"><strong>Callback</strong></h4>
<p>A callback is a <code>POST</code> request we send to your machine, informing that the data extraction task is completed and providing URL to download scraped content. This means that you no longer need to <a href="#check-job-status">check job status</a> manually. Once the data is here, we will let you know, and all you need to do now is <a href="#retrieve-job-content">retrieve it</a>.</p>
<pre># Please see code samples in Python and PHP.
</pre>
<p>Sample callback output</p>
<pre>{  
   "created_at":"2019-10-01 00:00:01",
   "updated_at":"2019-10-01 00:00:15",
   "locale":null,
   "client_id":163,
   "user_agent_type":"desktop",
   "source":"bing_search",
   "pages":1,
   "subdomain":"www",
   "status":"done",
   "start_page":1,
   "render":null,
   "priority":0,
   "ttl":0,
   "origin":"api",
   "persist":true,
   "id":"12345678900987654321",
   "callback_url":"http://your.callback.url/",
   "query":"adidas",
   "domain":"com",
   "limit":10,
   "geo_location":null,
   {...}
   "_links":[
      {  
         "href":"https://data.oxylabs.io/v1/queries/12345678900987654321",
         "method":"GET",
         "rel":"self"
      },
      {  
         "href":"https://data.oxylabs.io/v1/queries/12345678900987654321/results",
         "method":"GET",
         "rel":"results"
      }
   ],
}
</pre>
<hr />
<h4 id="batch-query"><strong>Batch Query</strong></h4>
<p>Real-Time Crawler also supports executing multiple keywords, up to 1,000 keywords with each batch. The following endpoint will submit multiple keywords to the extraction queue.</p>
<pre>POST https://data.oxylabs.io/v1/queries/batch
</pre>
<p>You need to post query parameters as data in JSON body.</p>
<p>The system will handle every keyword as a separate request. If you provided callback URL, you will get a separate call for each keyword. Otherwise, our initial response will contain job <code>id</code>s for all keywords. For example, if you sent 50 keywords, we will return 50 unique job <code>id</code>s.</p>
<p>Important! <code>query</code> is the only parameter that can have multiple values. All other parameters are the same for that batch query.</p>
<pre>curl --user user:pass1 'https://data.oxylabs.io/v1/queries/batch' -H 'Content-Type: application/json'
 -d '@keywords.json'
</pre>
<p><code>keywords.json</code> content:</p>
<pre>{  
   "query":[  
      "adidas",
      "nike",
      "reebok"
   ],
   "source": "bing_search",
   "domain": "com",
   "callback_url": "https://your.callback.url"
}
</pre>
<p>The API will respond with query information in JSON format, by printing it in response body, similar to this:</p>
<pre>{
  "queries": [
    {
      "callback_url": "https://your.callback.url",
      {...}
      "created_at": "2019-10-01 00:00:01",
      "domain": "com",
      "id": "12345678900987654321",
      {...}
      "query": "adidas",
      "source": "bing_search",
      {...}
          "rel": "results",
          "href": "http://data.oxylabs.io/v1/queries/12345678900987654321/results",
          "method": "GET"
        }
      ]
    },
    {
      "callback_url": "https://your.callback.url",
      {...}
      "created_at": "2019-10-01 00:00:01",
      "domain": "com",
      "id": "12345678901234567890",
      {...}
      "query": "nike",
      "source": "bing_search",
      {...}
          "rel": "results",
          "href": "http://data.oxylabs.io/v1/queries/12345678901234567890/results",
          "method": "GET"
        }
      ]
    },
    {
      "callback_url": "https://your.callback.url",
      {...}
      "created_at": "2019-10-01 00:00:01",
      "domain": "com",
      "id": "01234567899876543210",
      {...}
      "query": "reebok",
      "source": "bing_search",
      {...}
          "rel": "results",
          "href": "http://data.oxylabs.io/v1/queries/01234567899876543210/results",
          "method": "GET"
        }
      ]
    }
  ]
}
</pre>
<hr />
<h4 id="get-notifier-ip-address-list"><strong>Get Notifier IP Address List</strong></h4>
<p>You may want to whitelist the IPs sending you callback messages or get the list of these IPs for other purposes. This can be done by <code>GET</code>ing this endpoint: <code>https://data.oxylabs.io/v1/info/callbacker_ips</code>.</p>
<pre>curl --user user:pass1 'https://data.oxylabs.io/v1/info/callbacker_ips'
</pre>
<p>The API will return the list of IPs making callback requests to your system:</p>
<pre>{
    "ips": [
        "x.x.x.x",
        "y.y.y.y"
    ]
}
</pre>
<hr />
<h4 id="upload-to-storage"><strong>Upload to Storage</strong></h4>
<p>By default RTC job results are stored in our databases. This means that you will need to query our results endpoint and retrieve content yourself. Custom storage feature allows you to store results in your own cloud storage. The advantage of this feature is that you don't have to make extra requests in order to fetch results &#8211; everything goes directly to your storage bucket.</p>
<p>We support Amazon S3 and Google Cloud Storage. If you would like to use a different type of storage, please contact your account manager to discuss the feature delivery timeline.</p>
<p id="amazon-s3"><strong>Amazon S3</strong></p>
<p>To get your job results uploaded to your Amazon S3 bucket, please set up access permissions for our service. To do that, go to <code>https://s3.console.aws.amazon.com/ &gt; S3 &gt; Storage &gt; Bucket Name (if don't have one, create new) &gt; Permissions &gt; Bucket Policy</code></p>
<p><img loading="lazy" decoding="async" class="aligncenter size-full wp-image-8257" src="https://www.proxysp.com/wp-content/uploads/2021/09/oxylabs-Real-Time-Crawler-for-Bing-Upload-to-Storage1.png" alt="oxylabs Real-Time Crawler for Bing Upload to Storage1" width="485" height="325" srcset="https://proxysp.com/wp-content/uploads/2021/09/oxylabs-Real-Time-Crawler-for-Bing-Upload-to-Storage1.png 485w, https://proxysp.com/wp-content/uploads/2021/09/oxylabs-Real-Time-Crawler-for-Bing-Upload-to-Storage1-300x201.png 300w" sizes="(max-width: 485px) 100vw, 485px" /></p>
<p>You can find bucket policy in this <a class="custom_link" href="https://docs.oxylabs.io/resources/s3_bucket_policy.json" target="_blank" rel="noopener">JSON</a> or in code sample area on the right. Don't forget to change bucket name under <code>YOUR_BUCKET_NAME</code>. This policy allows us to write to your bucket, give access to uploaded files to you, and know bucket location.</p>
<p id="google-cloud-storage"><strong>Google Cloud Storage</strong></p>
<p>To get your job results uploaded to your Google Cloud Storage bucket, please set up special permissions for our service. To do that, please create a custom role with the <code>storage.objects.create</code> permission and assign it to the Oxylabs service account email <code>oxyserps-storage@oxyserps-storage.iam.gserviceaccount.com</code>.</p>
<p><img loading="lazy" decoding="async" class="aligncenter size-full wp-image-8258" src="https://www.proxysp.com/wp-content/uploads/2021/09/oxylabs-Real-Time-Crawler-for-Bing-Upload-to-Storage2.png" alt="oxylabs Real-Time Crawler for Bing Upload to Storage2" width="484" height="311" srcset="https://proxysp.com/wp-content/uploads/2021/09/oxylabs-Real-Time-Crawler-for-Bing-Upload-to-Storage2.png 484w, https://proxysp.com/wp-content/uploads/2021/09/oxylabs-Real-Time-Crawler-for-Bing-Upload-to-Storage2-300x193.png 300w" sizes="(max-width: 484px) 100vw, 484px" /></p>
<p><img loading="lazy" decoding="async" class="aligncenter size-full wp-image-8259" src="https://www.proxysp.com/wp-content/uploads/2021/09/oxylabs-Real-Time-Crawler-for-Bing-Upload-to-Storage3.png" alt="oxylabs Real-Time Crawler for Bing Upload to Storage3" width="484" height="668" srcset="https://proxysp.com/wp-content/uploads/2021/09/oxylabs-Real-Time-Crawler-for-Bing-Upload-to-Storage3.png 484w, https://proxysp.com/wp-content/uploads/2021/09/oxylabs-Real-Time-Crawler-for-Bing-Upload-to-Storage3-217x300.png 217w" sizes="(max-width: 484px) 100vw, 484px" /></p>
<p id="usage"><strong>Usage</strong></p>
<p>To use this feature, please specify two additional parameters in your requests. Learn more <a href="#direct">here</a>.</p>
<p>The upload path looks like this: <code>YOUR_BUCKET_NAME/job_ID.json</code>. You will find job ID in response body that you receive from us after submitting a request. In <a href="#single-query">this example</a> job ID is <code>12345678900987654321</code>.</p>
<pre>{
    "Version": "2012-10-17",
    "Id": "Policy1577442634787",
    "Statement": [
        {
            "Sid": "Stmt1577442633719",
            "Effect": "Allow",
            "Principal": {
                "AWS": "arn:aws:iam::324311890426:user/oxylabs.s3.uploader"
            },
            "Action": "s3:GetBucketLocation",
            "Resource": "arn:aws:s3:::YOUR_BUCKET_NAME"
        },
        {
            "Sid": "Stmt1577442633719",
            "Effect": "Allow",
            "Principal": {
                "AWS": "arn:aws:iam::324311890426:user/oxylabs.s3.uploader"
            },
            "Action": [
                "s3:PutObject",
                "s3:PutObjectAcl"
            ],
            "Resource": "arn:aws:s3:::YOUR_BUCKET_NAME/*"
        }
    ]
}
</pre>
<hr />
<h3 id="realtime">Realtime</h3>
<p>The data submission is the same as in Push-Pull method, but Realtime case we will return the content on open connection. You send us a query, the connection remains open, we retrieve the content and bring it to you. The endpoint that handles that is this:</p>
<pre>POST https://realtime.oxylabs.io/v1/queries
</pre>
<p>There is a timeout limit of 150 seconds for open connections, therefore in rare cases of heavy load we may not be able to ensure the data gets to you.</p>
<p>You need to post query parameters as data in JSON body. Please see example for more details.</p>
<pre>curl --user user:pass1 'https://realtime.oxylabs.io/v1/queries' -H "Content-Type: application/json" 
 -d '{"source": "bing_search", "domain": "com", "query": "adidas"}'
</pre>
<p>Example response body that will be returned on open connection:</p>
<pre>{
  "results": [
    {
      "content": "
      CONTENT
      "
      "created_at": "2019-10-01 00:00:01",
      "updated_at": "2019-10-01 00:00:15",
      "id": null,
      "page": 1,
      "url": "https://www.bing.com/search?q=adidas",
      "job_id": "12345678900987654321",
      "status_code": 200
    }
  ]
}
</pre>
<hr />
<h3 id="superapi">SuperAPI</h3>
<p>If you ever used regular proxies for data scraping, integrating SuperAPI delivery method will be a breeze. All that needs to be done is to use our entry node as proxy, authorize with Real-Time Crawler credentials, and ignore certificates. In <code>cURL</code> it's <code>-k</code> or <code>--insecure</code>. Your data will reach you on open connection.</p>
<pre>GET realtime.oxylabs.io:60000
</pre>
<p>SuperAPI only supports a handful of parameters since it <strong>only works with <a href="#direct">Direct</a> data source</strong> where full URL is provided. These parameters should be sent as headers. This is a list of accepted parameters:</p>
<div class="su-table su-table-responsive su-table-alternate">
<table>
<tbody>
<tr>
<td><code>X-OxySERPs-User-Agent-Type</code></td>
<td>There is no way to indicate a specific User-Agent, but you can let us know which browser and platform to use. A list of supported User-Agents can be found <a href="#user-agent">here</a>.</td>
</tr>
<tr>
<td><code>X-OxySERPs-Geo-Location</code></td>
<td>The API uses Canonical Geo Location format to determine request location. It goes like this: <code>City,Region,Country</code>, for example <code>Harrisburg,Arkansas,United States</code>). More information how to create Canonical Geolocation name can be found <a class="custom_link" href="https://developers.google.com/adwords/api/docs/appendix/geotargeting" target="_blank" rel="nofollow noopener">here</a>.</td>
</tr>
</tbody>
</table>
</div>
<p>If you need help setting up SuperAPI, drop a line at <a class="custom_link" href="mailto:support@oxylabs.io" target="_blank" rel="nofollow noopener">support@oxylabs.io</a>.</p>
<pre>curl -k -x realtime.oxylabs.io:60000 -U user:pass1 -H "X-OxySERPs-User-Agent-Type: desktop_chrome" 
-H "X-OxySERPs-Geo-Location: 15550" "https://bing.com/search/?text=nike"
</pre>
<hr />
<h2 id="content-type">Content Type</h2>
<p>Real-Time Crawler returns <strong>raw HTML</strong>.</p>
<hr />
<h2 id="data-sources">Data Sources</h2>
<p>There are two approaches on how to retrieve data from Bing using Real-Time Crawler. You can give us full URL via <a href="#direct">Direct</a>, or you can specify parameters via specifically built data source &#8211; <a href="#search">Search</a>.</p>
<p>If you are unsure which way to choose, drop us a line at <a class="custom_link" href="mailto:support@oxylabs.io" target="_blank" rel="nofollow noopener">support@oxylabs.io</a> or contact your account manager.</p>
<hr />
<h3 id="direct">Direct</h3>
<p><img loading="lazy" decoding="async" class="size-full wp-image-8260 alignnone" src="https://www.proxysp.com/wp-content/uploads/2021/09/Oxylabs-Real-Time-Crawler-for-Bing-Direct.png" alt="Oxylabs Real-Time Crawler for Bing Direct" width="424" height="24" srcset="https://proxysp.com/wp-content/uploads/2021/09/Oxylabs-Real-Time-Crawler-for-Bing-Direct.png 424w, https://proxysp.com/wp-content/uploads/2021/09/Oxylabs-Real-Time-Crawler-for-Bing-Direct-300x17.png 300w" sizes="(max-width: 424px) 100vw, 424px" /></p>
<p><code>bing</code> source is designed to retrieve content of direct URLs of various Bing pages. This means that instead of sending multiple parameters, you can provide us with a direct URL to required Bing page. We do not strip any parameters or alter your URLs in any other way.</p>
<p><span class="test">Query parameters</span></p>
<div class="su-table su-table-responsive su-table-alternate">
<table width="216">
<tbody>
<tr>
<td style="font-weight: 400;" width="72"><strong>Parameter</strong></td>
<td style="font-weight: 400;" width="72"><strong>Description</strong></td>
<td style="font-weight: 400;" width="72"><strong>Default Value</strong></td>
</tr>
<tr>
<td style="font-weight: 400;" width="72">source</td>
<td style="font-weight: 400;" width="72">Data source</td>
<td style="font-weight: 400;" width="72">bing</td>
</tr>
<tr>
<td style="font-weight: 400;" width="72">url</td>
<td style="font-weight: 400;" width="72">Direct URL (link) to Bing page</td>
<td style="font-weight: 400;" width="72">&#8211;</td>
</tr>
<tr>
<td style="font-weight: 400;" width="72">user_agent_type</td>
<td style="font-weight: 400;" width="72">Device type and browser. The full list can be found <a href="#user-agent">here.</a></td>
<td style="font-weight: 400;" width="72">desktop</td>
</tr>
<tr>
<td style="font-weight: 400;" width="72">geo_location</td>
<td style="font-weight: 400;" width="72">The API uses Canonical Geo Location format to determine request location. It goes like this: City,Region,Country, for example Harrisburg,Arkansas,United States). More information how to create Canonical Geolocation name can be found <a href="https://developers.google.com/adwords/api/docs/appendix/geotargeting" target="_blank" rel="nofollow noopener">here.</a></td>
<td style="font-weight: 400;" width="72">&#8211;</td>
</tr>
<tr>
<td style="font-weight: 400;" width="72">callback_url</td>
<td style="font-weight: 400;" width="72">URL to your callback endpoint</td>
<td style="font-weight: 400;" width="72">&#8211;</td>
</tr>
<tr>
<td style="font-weight: 400;" width="72">storage_type</td>
<td style="font-weight: 400;" width="72">Storage service provider. We support Amazon S3 and Google Cloud Storage. The storage_type parameter values for these storage providers are, correspondingly, s3 and gcs. The full implementation can be found on the <a href="#upload-to-storage">Upload to Storage</a> page. This feature only works via Push-Pull (Callback) method.</td>
<td style="font-weight: 400;" width="72">&#8211;</td>
</tr>
<tr>
<td style="font-weight: 400;" width="72">storage_url</td>
<td style="font-weight: 400;" width="72">Your storage bucket name. Only works via Push-Pull (Callback) method.</td>
<td style="font-weight: 400;" width="72">&#8211;</td>
</tr>
<tr>
<td style="font-weight: 400;" colspan="3" width="216">   &#8211; required parameter</td>
</tr>
</tbody>
</table>
</div>
<p>In this example the API will retrieve Bing search for keyword <code>nike</code> in Push-Pull method:</p>
<pre>curl --user user:pass1 'https://data.oxylabs.io/v1/queries' -H "Content-Type: application/json"
 -d '{"source": "bing", "url": "https://bing.com/search/?text=nike&"}'
</pre>
<p>Here is the same example in Realtime:</p>
<pre>curl --user user:pass1 'https://realtime.oxylabs.io/v1/queries' -H "Content-Type: application/json"
 -d '{"source": "bing", "url": "https://bing.com/search/?text=nike&"}'
</pre>
<p>And via SuperAPI:</p>
<pre>curl -k -x realtime.oxylabs.io:60000 -U user:pass1 "https://bing.com/search/?text=nike&"
</pre>
<hr />
<h3 id="search">Search</h3>
<p><img loading="lazy" decoding="async" class="size-full wp-image-8262 alignnone" src="https://www.proxysp.com/wp-content/uploads/2021/09/Oxylabs-Real-Time-Crawler-for-Bing-Search.png" alt="Oxylabs Real-Time Crawler for Bing Search" width="443" height="26" srcset="https://proxysp.com/wp-content/uploads/2021/09/Oxylabs-Real-Time-Crawler-for-Bing-Search.png 443w, https://proxysp.com/wp-content/uploads/2021/09/Oxylabs-Real-Time-Crawler-for-Bing-Search-300x18.png 300w" sizes="(max-width: 443px) 100vw, 443px" /></p>
<p><code>bing_search</code> source is designed to retrieve Bing Search results (SERP).</p>
<p><span class="test">Query parameters</span></p>
<div class="su-table su-table-responsive su-table-alternate">
<table width="216">
<tbody>
<tr>
<td style="font-weight: 400;" width="72"><strong>Parameter</strong></td>
<td style="font-weight: 400;" width="72"><strong>Description</strong></td>
<td style="font-weight: 400;" width="72"><strong>Default Value</strong></td>
</tr>
<tr>
<td style="font-weight: 400;" width="72">source</td>
<td style="font-weight: 400;" width="72">Data source</td>
<td style="font-weight: 400;" width="72">bing_search</td>
</tr>
<tr>
<td style="font-weight: 400;" width="72">domain</td>
<td style="font-weight: 400;" width="72">Domain localization. Available domains: com, ru, ua, by, kz, tr</td>
<td style="font-weight: 400;" width="72">com</td>
</tr>
<tr>
<td style="font-weight: 400;" width="72">query</td>
<td style="font-weight: 400;" width="72">UTF-encoded keyword</td>
<td style="font-weight: 400;" width="72">&#8211;</td>
</tr>
<tr>
<td style="font-weight: 400;" width="72">start_page</td>
<td style="font-weight: 400;" width="72">Starting page number</td>
<td style="font-weight: 400;" width="72">1</td>
</tr>
<tr>
<td style="font-weight: 400;" width="72">pages</td>
<td style="font-weight: 400;" width="72">Number of pages to retrieve</td>
<td style="font-weight: 400;" width="72">1</td>
</tr>
<tr>
<td style="font-weight: 400;" width="72">limit</td>
<td style="font-weight: 400;" width="72">Number of results to retrieve in each page</td>
<td style="font-weight: 400;" width="72">10</td>
</tr>
<tr>
<td style="font-weight: 400;" width="72">locale</td>
<td style="font-weight: 400;" width="72">Language. You can use either a 2-letter ISO country code (ex. en, by, fr, etc.), or a language tag (ex. en-US, de-DE, ar-EG, etc.).</td>
<td style="font-weight: 400;" width="72">&#8211;</td>
</tr>
<tr>
<td style="font-weight: 400;" width="72">geo_location</td>
<td style="font-weight: 400;" width="72">The API uses Canonical Geo Location format to determine request location. It goes like this: City,Region,Country, for example Harrisburg,Arkansas,United States). More information how to create Canonical Geolocation name can be found<a href="https://developers.google.com/adwords/api/docs/appendix/geotargeting" target="_blank" rel="nofollow noopener"> here.</a></td>
<td style="font-weight: 400;" width="72">&#8211;</td>
</tr>
<tr>
<td style="font-weight: 400;" width="72">user_agent_type</td>
<td style="font-weight: 400;" width="72">Device type and browser. The full list can be found <a href="#user-agent">here.</a></td>
<td style="font-weight: 400;" width="72">desktop</td>
</tr>
<tr>
<td style="font-weight: 400;" width="72">callback_url</td>
<td style="font-weight: 400;" width="72">URL to your callback endpoint</td>
<td style="font-weight: 400;" width="72">&#8211;</td>
</tr>
<tr>
<td style="font-weight: 400;" width="72">storage_type</td>
<td style="font-weight: 400;" width="72">Storage service provider. We support Amazon S3 and Google Cloud Storage. The storage_type parameter values for these storage providers are, correspondingly, s3 and gcs. The full implementation can be found on the <a href="#upload-to-storage">Upload to Storage </a>page. This feature only works via Push-Pull (Callback) method.</td>
<td style="font-weight: 400;" width="72">&#8211;</td>
</tr>
<tr>
<td style="font-weight: 400;" width="72">storage_url</td>
<td style="font-weight: 400;" width="72">Your storage bucket name. Only works via Push-Pull (Callback) method.</td>
<td style="font-weight: 400;" width="72">&#8211;</td>
</tr>
<tr>
<td style="font-weight: 400;" colspan="3" width="216">   &#8211; required parameter</td>
</tr>
</tbody>
</table>
</div>
<p>API makes request to <code>bing.com</code> to retrieve search results pages from number 11 to number 20 for keyword <code>adidas</code>. The API will post a JSON request to <code>your.callback.url</code> containing the URL to download the raw HTML output once the data retrieval task is successfully finished. This is Push-Pull:</p>
<pre>curl --user user:pass1 'https://data.oxylabs.io/v1/queries' -H "Content-Type: application/json"
 -d '{"source": "bing_search", "domain": "com", "query": "adidas", "start_page": 11, "pages": 10, "callback_url": "https://your.callback.url"}'
</pre>
<p>And here is the same example in Realtime:</p>
<pre>curl --user user:pass1 'https://realtime.oxylabs.io/v1/queries' -H "Content-Type: application/json"
 -d '{"source": "bing_search", "domain": "com", "query": "adidas", "start_page": 11, "pages": 10, "callback_url": "https://your.callback.url"}'
</pre>
<hr />
<h2 id="parameter-values">Parameter Values</h2>
<h3 id="user-agent">User-Agent</h3>
<p>Download full list of <code>user_agent_type</code> values in JSON <a class="custom_link" href="https://docs.oxylabs.io/resources/user_agent_type.json" target="_blank" rel="noopener">here</a>.</p>
<pre>[
  {
    "user_agent_type": "desktop",
    "description": "Random desktop browser User-Agent"
  },
  {
    "user_agent_type": "desktop_firefox",
    "description": "Random User-Agent of one of the latest versions of desktop Firefox"
  },
  {
    "user_agent_type": "desktop_chrome",
    "description": "Random User-Agent of one of the latest versions of desktop Chrome"
  },
  {
    "user_agent_type": "desktop_opera",
    "description": "Random User-Agent of one of the latest versions of desktop Opera"
  },
  {
    "user_agent_type": "desktop_edge",
    "description": "Random User-Agent of one of the latest versions of desktop Edge"
  },
  {
    "user_agent_type": "desktop_safari",
    "description": "Random User-Agent of one of the latest versions of desktop Safari"
  },
  {
    "user_agent_type": "mobile",
    "description": "Random mobile browser User-Agent"
  },
  {
    "user_agent_type": "mobile_android",
    "description": "Random User-Agent of one of the latest versions of Android browser"
  },
  {
    "user_agent_type": "mobile_ios",
    "description": "Random User-Agent of one of the latest versions of iPhone browser"
  },
  {
    "user_agent_type": "tablet",
    "description": "Random tablet browser User-Agent"
  },
  {
    "user_agent_type": "tablet_android",
    "description": "Random User-Agent of one of the latest versions of Android tablet"
  },
  {
    "user_agent_type": "tablet_ios",
    "description": "Random User-Agent of one of the latest versions of iPad tablet"
  }
]
</pre>
<hr />
<h2 id="account-status">Account Status</h2>
<h3 id="usage-statistics">Usage Statistics</h3>
<p>You can find your usage statistics by querying the following endpoint:</p>
<pre>GET https://data.oxylabs.io/v1/stats
</pre>
<p>By default the API will return all time usage statistics. Adding <code>?group_by=month</code> will return monthly stats, while <code>?group_by=day</code> will return daily numbers.</p>
<p>This query will return all time statistics. You can find your daily and monthly usage by adding either <code>?group_by=day</code> or <code>?group_by=month</code></p>
<pre>curl --user user:pass1 'https://data.oxylabs.io/v1/stats'
</pre>
<p>Sample output:</p>
<pre>{
    "data": {
        "sources": [
            {
                "realtime_results_count": "90",
                "results_count": "10",
                "title": "bing"
            },
            {
                "realtime_results_count": "19",
                "results_count": "87",
                "title": "bing_search"
            }
        ]
    },
    "meta": {
        "group_by": null
    }
}
</pre>
<hr />
<h3 id="limits">Limits</h3>
<p>The following endpoint will give your monthly commitment information as well as how much has already been used:</p>
<pre>GET https://data.oxylabs.io/v1/stats/limits
</pre>
<pre>curl --user user:pass1 'https://data.oxylabs.io/v1/stats/limits'
</pre>
<p>Sample output:</p>
<pre>{
    "monthly_requests_commitment": 4500000,
    "used_requests": 985000
}
</pre>
<hr />
<h2 id="response-codes">Response Codes</h2>
<div class="su-table su-table-responsive su-table-alternate">
<table>
<thead>
<tr>
<th>Code</th>
<th>Status</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><code>204</code></td>
<td>No Content</td>
<td>You are trying to retrieve a job that has not been completed yet.</td>
</tr>
<tr>
<td><code>400</code></td>
<td>Multiple error messages</td>
<td>Bad request structure, could be a misspelled parameter or invalid value. Response body will have more specific error message.</td>
</tr>
<tr>
<td><code>401</code></td>
<td>&#8216;Authorization header not provided' / &#8216;Invalid authorization header' / &#8216;Client not found'</td>
<td>Missing authorization header or incorrect login credentials.</td>
</tr>
<tr>
<td><code>403</code></td>
<td>Forbidden</td>
<td>Your account does not have access to this resource.</td>
</tr>
<tr>
<td><code>404</code></td>
<td>Not Found</td>
<td>Job ID you are looking for is no longer available.</td>
</tr>
<tr>
<td><code>429</code></td>
<td>Too many requests</td>
<td>Exceeded rate limit. Please contact your account manager to increase limits.</td>
</tr>
<tr>
<td><code>500</code></td>
<td>Unknown Error</td>
<td>Service unavailable.</td>
</tr>
<tr>
<td><code>524</code></td>
<td>Timeout</td>
<td>Service unavailable.</td>
</tr>
<tr>
<td><code>612</code></td>
<td>Undefined Internal Error</td>
<td>Something went wrong and we failed the job you submitted. You can try again at no extra cost, as we don't charge you for <code>faulted</code> jobs. If that doesn't work, give us a shout.</td>
</tr>
<tr>
<td><code>613</code></td>
<td>Faulted After Too Many Retries</td>
<td>We tried scraping the job you submitted, but gave up after reaching our retry limit. You can try again at no extra cost, as we don't charge you for <code>faulted</code> jobs. If that doesn't work, give us a shout.</td>
</tr>
</tbody>
</table>
</div>
<p>Cloud storage upload response codes:</p>
<div class="su-table su-table-responsive su-table-alternate">
<table>
<tbody>
<tr>
<td><code>10001</code></td>
<td>Unexpected Exception</td>
<td>Something terribly wrong happened. We probably know about this already and are fixing it. Let us know anyway.</td>
</tr>
<tr>
<td><code>13000</code></td>
<td>Upload Success</td>
<td>All good!</td>
</tr>
<tr>
<td><code>13001</code></td>
<td>Upload Failed</td>
<td>We couldn't upload job results your bucket.</td>
</tr>
<tr>
<td><code>13102</code></td>
<td>No Such Path</td>
<td>We couldn't find a bucket with such name. Please double check.</td>
</tr>
<tr>
<td><code>13103</code></td>
<td>Access Denied</td>
<td>Bucket doesn't have required permissions. To find out how to give us required access, see <a href="#upload-to-storage">here</a>.</td>
</tr>
</tbody>
</table>
</div>
<hr />
<h4>References</h4>
<ul>
<li><a href="https://docs.oxylabs.io/rtc/source/bing/index.html" target="_blank" rel="nofollow noopener">https://docs.oxylabs.io/rtc/source/bing/index.html</a></li>
<li><a href="https://docs.oxylabs.io/rtc/index.html" target="_blank" rel="nofollow noopener">https://docs.oxylabs.io/rtc/index.html</a></li>
</ul>
<p>&nbsp;</p>
<hr />
<blockquote><p><strong>Disclaimer:</strong> This part of the content is mainly from the merchant. If the merchant does not want it to be displayed on my website, please <a href="https://www.proxysp.com/contact-us/">contact us</a> to delete your content.</p></blockquote>
]]></content:encoded>
					
					<wfw:commentRss>https://proxysp.com/oxylabs-bing-real-time-crawler/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">7634</post-id>	</item>
		<item>
		<title>How to Use Bright Data API? Learn Manuals Before You Buy</title>
		<link>https://proxysp.com/how-to-use-bright-data-api/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=how-to-use-bright-data-api</link>
					<comments>https://proxysp.com/how-to-use-bright-data-api/#respond</comments>
		
		<dc:creator><![CDATA[proxysp]]></dc:creator>
		<pubDate>Thu, 01 Jan 1970 00:00:00 +0000</pubDate>
				<category><![CDATA[APIs]]></category>
		<guid isPermaLink="false">https://www.proxysp.com/?p=8710</guid>

					<description><![CDATA[Want to scraping data by Bright Data API? We make a some examples of code for popular programming languages, with it you can easily to know &#8230;<p class="read-more"> <a class="ast-button" href="https://proxysp.com/how-to-use-bright-data-api/"> <span class="screen-reader-text">How to Use Bright Data API? Learn Manuals Before You Buy</span> Read More &#187;</a></p>]]></description>
										<content:encoded><![CDATA[<blockquote><p>Want to scraping data by Bright Data API? We make a some examples of code for popular programming languages, with it you can easily to know how ot use Bright Data proxy API.</p></blockquote>
<p><a href="https://www.proxysp.com/redirect/brightdata" target="_blank" rel="nofollow noopener"><img loading="lazy" decoding="async" class="aligncenter wp-image-6287 size-full" src="https://www.proxysp.com/wp-content/uploads/2021/02/Bright-Data-homepage.jpg" alt="Bright Data homepage" width="1000" height="455" srcset="https://proxysp.com/wp-content/uploads/2021/02/Bright-Data-homepage.jpg 1000w, https://proxysp.com/wp-content/uploads/2021/02/Bright-Data-homepage-300x137.jpg 300w, https://proxysp.com/wp-content/uploads/2021/02/Bright-Data-homepage-768x349.jpg 768w" sizes="(max-width: 1000px) 100vw, 1000px" /></a></p>
<h2>Luminati proxy API</h2>
<h3>For Browser or Software,</h3>
<p>Use the following settings in your Bot, Crawler or other software,</p>
<ol>
<li>Proxy: <b>zproxy.lum-superproxy.io</b></li>
<li>Port: <b>22225</b></li>
<li>User: <b>lum-customer-Your_username- Your_zonesetting</b></li>
<li>Password: <b>0Yourpasswords0</b></li>
</ol>
<hr />
<h3>Shell</h3>
<pre><span class="token function">curl</span> --proxy zproxy.lum-superproxy.io:22225 --proxy-user lum-customer-Your_username- Your_zonesetting:0Yourpasswords0 <span class="token string">"http://lumtest.com/myip.json"</span></pre>
<hr />
<h3>Node.js</h3>
<pre>#!/usr/bin/env node
require('request-promise')({
url: 'http://lumtest.com/myip.json',
proxy: 'http://lum-customer-Your_username- Your_zonesetting:0Yourpasswords0@zproxy.lum-superproxy.io:22225',
})
.then(function(data){ console.log(data); },
function(err){ console.error(err); });

Java

package example;

import org.apache.http.HttpHost;
import org.apache.http.client.fluent.*;

public class Example {
public static void main(String[] args) throws Exception {
System.out.println("To enable your free eval account and get "
+"CUSTOMER, YOURZONE and YOURPASS, please contact "
+"sales@brightdata.com");
HttpHost proxy = new HttpHost("zproxy.lum-superproxy.io", 22225);
String res = Executor.newInstance()
.auth(proxy, "lum-customer-Your_username- Your_zonesetting", "0Yourpasswords0")
.execute(Request.Get("http://lumtest.com/myip.json").viaProxy(proxy))
.returnContent().asString();
System.out.println(res);
}
}</pre>
<hr />
<h3>C#</h3>
<pre>using System;
using System.Net;

class Example
{
static void Main()
{
Console.WriteLine("To enable your free eval account and get CUSTOMER, "
+"YOURZONE and YOURPASS, please contact sales@brightdata.com");
var client = new WebClient();
client.Proxy = new WebProxy("zproxy.lum-superproxy.io:22225");
client.Proxy.Credentials = new NetworkCredential("lum-customer-Your_username- Your_zonesetting", "0Yourpasswords0");
Console.WriteLine(client.DownloadString("http://lumtest.com/myip.json"));
}
}</pre>
<hr />
<h3>VB</h3>
<pre>Imports System.Net

Module Module1
Sub Main()
Console.WriteLine("To enable your free eval account and get " & 
"CUSTOMER, YOURZONE and YOURPASS, please contact " &
"sales@brightdata.com")
Dim Client As New WebClient
Client.Proxy = New WebProxy("http://zproxy.lum-superproxy.io:22225")
Client.Proxy.Credentials = New NetworkCredential("lum-customer-Your_username- Your_zonesetting", "0Yourpasswords0")
Console.WriteLine(Client.DownloadString("http://lumtest.com/myip.json"))
End Sub
End Module</pre>
<hr />
<h3>PHP</h3>
<pre>&lt;?php
echo 'To enable your free eval account and get CUSTOMER, YOURZONE and '
.'YOURPASS, please contact sales@brightdata.com';
$curl = curl_init('http://lumtest.com/myip.json');
curl_setopt($curl, CURLOPT_PROXY, 'http://zproxy.lum-superproxy.io:22225');
curl_setopt($curl, CURLOPT_PROXYUSERPWD, 'lum-customer-Your_username- Your_zonesetting:0Yourpasswords0');
curl_exec($curl);
?&gt;</pre>
<hr />
<h3>Python</h3>
<pre>#!/usr/bin/env python
print('If you get error "ImportError: No module named \'six\'" install six:\n'+\
'$ sudo pip install six');
print('To enable your free eval account and get CUSTOMER, YOURZONE and ' + \
'YOURPASS, please contact sales@brightdata.com')
import sys
if sys.version_info[0]==2:
import six
from six.moves.urllib import request
opener = request.build_opener(
request.ProxyHandler(
{'http': 'http://lum-customer-Your_username- Your_zonesetting:0Yourpasswords0@zproxy.lum-superproxy.io:22225',
'https': 'http://lum-customer-Your_username- Your_zonesetting:0Yourpasswords0@zproxy.lum-superproxy.io:22225'}))
print(opener.open('http://lumtest.com/myip.json').read())
if sys.version_info[0]==3:
import urllib.request
opener = urllib.request.build_opener(
urllib.request.ProxyHandler(
{'http': 'http://lum-customer-Your_username- Your_zonesetting:0Yourpasswords0@zproxy.lum-superproxy.io:22225',
'https': 'http://lum-customer-Your_username- Your_zonesetting:0Yourpasswords0@zproxy.lum-superproxy.io:22225'}))
print(opener.open('http://lumtest.com/myip.json').read())</pre>
<hr />
<h3>Ruby</h3>
<pre>#!/usr/bin/ruby

require 'uri'
require 'net/http'
require 'net/https'

puts 'To enable your free eval account and get CUSTOMER, YOURZONE and YOURPASS, please contact sales@brightdata.com'

uri = URI.parse('http://lumtest.com/myip.json')
proxy = Net::HTTP::Proxy('zproxy.lum-superproxy.io', 22225, 'lum-customer-Your_username- Your_zonesetting', '0Yourpasswords0')

req = Net::HTTP::Get.new(uri.path)

result = proxy.start(uri.host,uri.port, :use_ssl =&gt; uri.scheme == 'https') do |http|
http.request(req)
end

puts result.body</pre>
<h3>Perl</h3>
<pre>#!/usr/bin/perl
print 'To enable your free eval account and get CUSTOMER, YOURZONE and '
.'YOURPASS, please contact sales@brightdata.com';
use LWP::UserAgent;
my $agent = LWP::UserAgent-&gt;new();
$agent-&gt;proxy(['http', 'https'], "http://lum-customer-Your_username- Your_zonesetting:0Yourpasswords0\@zproxy.lum-superproxy.io:22225");
print $agent-&gt;get('http://lumtest.com/myip.json')-&gt;content();</pre>
<hr />
<h2 class="cp_page_header">Search Engine Crawler API</h2>
<h3>Google Search Crawler API</h3>
<h4>Search</h4>
<p>Localization</p>
<div class="parameter_header">
<div class="parameter_label">gl     <span style="font-size: 16px;">Two-letter country code used to define the country of search</span></div>
<div>
<pre class="p-0">curl -v --compressed --proxy zproxy.lum-superproxy.io:22225 --proxy-user lum-customer-username-zone-ZONE:PASSWORD "http://www.google.com/search?q=pizza&gl=us"</pre>
</div>
</div>
<div class="parameter_header">
<div class="parameter_label">hl     <span style="font-size: 16px;">Two-letter language code used to define the page language</span></div>
<div>
<pre class="p-0">curl -v --compressed --proxy zproxy.lum-superproxy.io:22225 --proxy-user lum-customer-username-zone-ZONE:PASSWORD "http://www.google.com/search?q=pizza&hl=us"</pre>
</div>
<hr />
</div>
<p>Type of search</p>
<div class="parameter_header">
<div class="parameter_label">tbm     <span style="font-size: 16px;">Define search type. For regular search there is no need to use the </span><span class="parameter_label" style="font-size: 16px;">tbm</span><span style="font-size: 16px;"> parameter while other types have </span></div>
<div class="parameter_label"><span style="font-size: 16px;">            a unique </span><span class="parameter_label" style="font-size: 16px;">tbm</span><span style="font-size: 16px;"> value.</span></div>
</div>
<div class="parameter_input">            Example:<br />
<span class="parameter_label">            tbm=isch</span> &#8211; images<br />
<span class="parameter_label">            tbm=shop</span> &#8211; shopping<br />
[%nws] &#8211; news</div>
<div>
<pre class="p-0">curl -v --compressed --proxy zproxy.lum-superproxy.io:22225 --proxy-user lum-customer-username-zone-ZONE:PASSWORD "http://www.google.com/search?q=pizza&tbm=shop"</pre>
</div>
<div class="parameter_header">
<div class="parameter_label">ibp     <span style="font-size: 16px;">Use the </span><span class="parameter_label" style="font-size: 16px;">ibp</span><span style="font-size: 16px;"> parameter for Jobs search type.</span></div>
</div>
<div class="parameter_input">           Example:<br />
<span class="parameter_label">           ibp=htl;jobs</span> &#8211; Jobs</div>
<div>
<pre class="p-0">curl -v --compressed --proxy zproxy.lum-superproxy.io:22225 --proxy-user lum-customer-username-zone-ZONE:PASSWORD "http://www.google.com/search?q=pizza&ibp=htl%3Bjobs"</pre>
</div>
<hr />
<p>Pagination</p>
<div class="parameter_header">
<div class="parameter_label">start     <span style="font-size: 16px;">Define the result offset &#8211; results to start from the selected value. Used for managing pagination.</span></div>
</div>
<div class="parameter_input">             Examples:<br />
<span class="parameter_label">             start=0</span> (default) &#8211; first page of results<br />
<span class="parameter_label">             start=10</span> &#8211; second page of results<br />
<span class="parameter_label">             start=20</span> &#8211; third page of results, etc.</div>
<div>
<pre class="p-0">curl -v --compressed --proxy zproxy.lum-superproxy.io:22225 --proxy-user lum-customer-username-zone-ZONE:PASSWORD "http://www.google.com/search?q=pizza&start=10"</pre>
</div>
<div class="parameter_header">
<div class="parameter_label">num     <span style="font-size: 16px;">Defines the number of results to return.</span></div>
</div>
<div class="parameter_input">             Examples:<br />
<span class="parameter_label">             num=10</span> (default) returns 10 results<br />
<span class="parameter_label">             num=30</span> returns 30 results, etc.</div>
<div>
<pre class="p-0">curl -v --compressed --proxy zproxy.lum-superproxy.io:22225 --proxy-user lum-customer-username-zone-ZONE:PASSWORD "http://www.google.com/search?q=pizza&num=100"</pre>
</div>
<hr />
<p>Geographic Location</p>
<div class="parameter_header">
<div class="parameter_label">uule     <span style="font-size: 16px;">Stands for the encoded location you want to use for your search and will be used to change geo-location. A CSV with all available </span><span class="parameter_label" style="font-size: 16px;">uule</span><span style="font-size: 16px;"> values can be </span><a style="font-size: 16px; background-color: #ffffff;" href="https://developers.google.com/adwords/api/docs/appendix/geotargeting" target="_blank" rel="nofollow noopener">downloaded here</a></div>
<div>
<pre class="p-0">curl -v --compressed --proxy zproxy.lum-superproxy.io:22225 --proxy-user lum-customer-username-zone-ZONE:PASSWORD "http://www.google.com/search?q=pizza&uule=w+CAIQICINVW5pdGVkK1N0YXRlcw"</pre>
</div>
</div>
<hr />
<p>Device and output format</p>
<div class="parameter_header">
<div class="parameter_label">lum_mobile     <span style="font-size: 16px;">Define what device type to be represented in user-agent</span></div>
</div>
<div class="parameter_input">
<p>                           Default or <span class="parameter_label">lum_mobile=0</span> will provide random desktop user-agent while <span class="parameter_label">lum_mobile=1</span> will provide random mobile user-agent</p>
<div class="cp_serp_api_results_code">
<div class="copy-container">
<div class="zcode_wrapper">
<div class="zcode_source">
<pre class=" language-bash"><code class=" zcode_lang_source zcode_lang_source--mh1 language-bash"><span class="token function">curl</span> -v --compressed --proxy zproxy.lum-superproxy.io:22225 --proxy-user lum-customer-username-zone-ZONE:PA</code></pre>
</div>
</div>
</div>
</div>
</div>
<div class="parameter_header">
<div class="parameter_label">lum_json     <span style="font-size: 16px;">Bright Data parameter allowing to return parsed JSON instead of raw HTML</span></div>
</div>
<div class="parameter_input">                      Examples:<br />
<span class="parameter_label">                      lum_json=1</span> &#8211; return results in JSON<br />
<span class="parameter_label">                      lum_json=html</span> &#8211; return JSON with &#8220;html&#8221; field containing raw HTML<br />
<span class="parameter_label">                      lum_json=hotel</span> &#8211; make additional request to retrieve hotel prices<br />
<span class="parameter_label">                      lum_json=hotel,html</span> &#8211; two values can be combined while separated by comma</div>
<div>
<pre class="p-0">curl -v --compressed --proxy zproxy.lum-superproxy.io:22225 --proxy-user lum-customer-username-zone-ZONE:PASSWORD "http://www.google.com/search?q=pizza&lum_json=1"</pre>
</div>
<hr />
<p>Search by image</p>
<div class="parameter_header">
<div class="parameter_label">download     <span style="font-size: 16px;">Download image on the proxy side and post it to google using POST request</span></div>
</div>
<div class="parameter_input">                       Examples:<br />
default &#8211; download-and-post if google isn't able to download the image<br />
<span class="parameter_label">                       download=1</span> &#8211; force download-and-post image<br />
<span class="parameter_label">                       download=0</span> &#8211; regular GET request with image URL</div>
<div>
<pre class="p-0">curl -v --compressed --proxy zproxy.lum-superproxy.io:22225 --proxy-user lum-customer-username-zone-ZONE:PASSWORD "http://www.google.com/searchbyimage?image_url=https%3A%2F%2Flive.staticflickr.com%2F213%2F491726079_4f46636859_w.jpg&download=1"</pre>
</div>
<hr />
<p>Multiple requests</p>
<div class="parameter_header">
<div class="parameter_label">multi     <span style="font-size: 16px;">Make parallel requests through our API server using POST request.</span></div>
</div>
<div class="parameter_input">               Parallel requests will be using the same peer and session and can be used for comparison tests, I.e. making an identical pair of requests with 2 different values for a selected parameter<br />
<span class="parameter_label">               multi=[{&#8220;keyword&#8221;:&#8221;pizza&#8221;,&#8221;num&#8221;:20},{&#8220;keyword&#8221;:&#8221;pizza&#8221;,&#8221;num&#8221;:100}]</span> &#8211; the same keyword with different num param<br />
<span class="parameter_label">               multi=[{&#8220;keyword&#8221;:&#8221;pizza&#8221;},{&#8220;keyword&#8221;:&#8221;burger&#8221;}]</span> &#8211; different keywords</div>
<div>
<pre class="p-0">curl -v --compressed "https://brightdata.com/api/serp/req" -H "Content-Type: application/json" -H "Authorization: Bearer API_TOKEN" -d "{\"country\":\"us\",\"multi\":[{\"keyword\":\"pizza\",\"num\":20},{\"keyword\":\"pizza\",\"num\":100}]}"</pre>
</div>
<hr />
<p>Asynchronous requests</p>
<div class="cp_serp_api_async_desc">Send requests without waiting for the response. Collect results via a designated endpoint or a webhook.</div>
<div class="cp_serp_api_results_code">
<p class="faq_unit_item_p">To initiate a request, perform:</p>
<pre class="p-0">RESPONSE_ID=`curl -i --silent --compressed "https://brightdata.com/api/serp/req?customer=username&zone=ZONE" -H "Content-Type: application/json" -H "Authorization: Bearer &lt;API_TOKEN&gt;" -d "{\"query\":{\"q\":\"pizza\"},\"country\":\"us\"}" | sed -En 's/^x-response-id: (.*)/\1/p' | tr -d '\r'`</pre>
</div>
<p>`x-response-id` header will contain the id of the request so you can use it in the next request to fetch the result</p>
<pre class="p-0">curl -v --compressed "https://brightdata.com/api/serp/get_result?customer=username&zone=ZONE&response_id=${RESPONSE_ID}" -H "Authorization: Bearer &lt;API_TOKEN&gt;"</pre>
<p>You can adjust your zone async settings on <a href="https://brightdata.com/cp/zones?id=username" target="_blank" rel="nofollow noopener">zones page</a>.<br />
Optional settings:<br />
<b>Result lifetime (days)</b> &#8211; number of days to keep results<br />
<b>Web Hook URL</b> &#8211; address to deliver results<br />
<b>Web Hook Request Method</b> &#8211; HTTP method to use to deliver response, GET or POST are optional</p>
<hr />
<p>Parsing schema</p>
<div class="cp_serp_api_schema_desc">The parsing scheme can be obtained by the following endpoint: <code>GET /api/serp/google/parsing_schema</code></div>
<div class="cp_serp_api_results_code">
<p class="faq_unit_item_p">To get schema, perform:</p>
<pre class="p-0">curl --compressed "https://brightdata.com/api/serp/google/parsing_schema" -H "Authorization: Bearer API_TOKEN"</pre>
</div>
<hr />
<h4>Maps</h4>
<p>Localization</p>
<div class="parameter_header">
<div class="parameter_label">gl     <span style="font-size: 16px;">Two-letter country code used to define the country of search</span></div>
<div>
<pre class="p-0">curl -v --compressed --proxy zproxy.lum-superproxy.io:22225 --proxy-user lum-customer-username-zone-ZONE:PASSWORD "http://www.google.com/maps/search/restaurants+new+york/?gl=us"</pre>
</div>
</div>
<div class="parameter_header">
<div class="parameter_label">hl <span style="font-size: 16px;">Two-letter language code used to define the page language</span></div>
<div>
<pre class="p-0">curl -v --compressed --proxy zproxy.lum-superproxy.io:22225 --proxy-user lum-customer-username-zone-ZONE:PASSWORD "http://www.google.com/maps/search/restaurants+new+york/?hl=en"</pre>
</div>
</div>
<hr />
<p>Pagination</p>
<div class="parameter_header">
<div class="parameter_label">start     <span style="font-size: 16px;">Define the result offset &#8211; results to start from the selected value. Used for managing pagination.</span></div>
</div>
<div class="parameter_input">             Examples:<br />
<span class="parameter_label">             start=0</span> (default) &#8211; first page of results<br />
<span class="parameter_label">             start=20</span> &#8211; second page of results<br />
<span class="parameter_label">             start=40</span> &#8211; third page of results, etc.</div>
<div>
<pre class="p-0">curl -v --compressed --proxy zproxy.lum-superproxy.io:22225 --proxy-user lum-customer-username-zone-ZONE:PASSWORD "http://www.google.com/maps/search/restaurants+new+york/?start=20"</pre>
</div>
<div class="parameter_header">
<div class="parameter_label">num     <span style="font-size: 16px;">Defines the number of results to return.</span></div>
</div>
<div class="parameter_input">             Examples:<br />
<span class="parameter_label">             num=40</span> (default) returns 40 results<br />
<span class="parameter_label">             num=50</span> returns 50 results, etc.</div>
<div>
<pre class="p-0">curl -v --compressed --proxy zproxy.lum-superproxy.io:22225 --proxy-user lum-customer-username-zone-ZONE:PASSWORD "http://www.google.com/maps/search/restaurants+new+york/?num=40"</pre>
</div>
<hr />
<p>Output format</p>
<div class="parameter_header">
<div class="parameter_label">lum_json     <span style="font-size: 16px;">Bright Data parameter allowing to return parsed JSON instead of raw HTML</span></div>
</div>
<div class="parameter_input">                       Examples:<br />
<span class="parameter_label">                       lum_json=1</span> &#8211; return results in JSON</div>
<div>
<pre class="p-0">curl -v --compressed --proxy zproxy.lum-superproxy.io:22225 --proxy-user lum-customer-username-zone-ZONE:PASSWORD "http://www.google.com/maps/search/restaurants+new+york/?lum_json=1"</pre>
</div>
<hr />
<h4>Trends</h4>
<p>Geo</p>
<p><span style="font-size: 16px;">geo </span><span style="font-size: 16px;">Location of interest, two-letter country code</span></p>
<pre class="p-0">curl -v --compressed --proxy zproxy.lum-superproxy.io:22225 --proxy-user lum-customer-username-zone-ZONE:PASSWORD "http://trends.google.com/trends/explore?q=pizza&geo=us"</pre>
<hr />
<p>Localization</p>
<div class="parameter_header">
<div class="parameter_label">hl     <span style="font-size: 16px;">Preferred language, two-letter language code</span></div>
<div>
<pre class="p-0">curl -v --compressed --proxy zproxy.lum-superproxy.io:22225 --proxy-user lum-customer-username-zone-ZONE:PASSWORD "http://trends.google.com/trends/explore?q=pizza&hl=de"</pre>
</div>
</div>
<hr />
<p>Time range</p>
<div class="parameter_header">
<div class="parameter_label">date     <span style="font-size: 16px;">Time range to search. Available values are:</span></div>
</div>
<div class="parameter_input">             default: Past 12 month<br />
<span class="parameter_label">             now 1-H</span> &#8211; Past hour<br />
<span class="parameter_label">             now 4-H</span> &#8211; Past 4 hours<br />
<span class="parameter_label">             now 1-d</span> &#8211; Past day<br />
<span class="parameter_label">             now 7-d</span> &#8211; Past 7 days<br />
<span class="parameter_label">             today 1-m</span> &#8211; Past 30 days<br />
<span class="parameter_label">             today 3-m</span> &#8211; Past 90 days<br />
<span class="parameter_label">             today 12-m</span> &#8211; Past 12 months<br />
<span class="parameter_label">             today 5-y</span> &#8211; Past 5 years<br />
<span class="parameter_label">             2020-07-01 2020-12-31</span> &#8211; custom date range</p>
<div class="cp_serp_api_results_code">
<div class="copy-container">
<div class="zcode_wrapper">
<div class="zcode_source">
<pre class=" language-bash"><code class=" zcode_lang_source zcode_lang_source--mh1 language-bash"><span class="token function">curl</span> -v --compressed --proxy zproxy.lum-</code></pre>
</div>
</div>
</div>
</div>
</div>
<hr />
<div class="title_header">
<div class="cp_title cp_title_small">Category</div>
</div>
<div class="parameter_item parameter_item_api parameter_item_cat">
<div class="parameter_header">
<div class="parameter_label">cat     <span style="font-size: 16px;">Category to search within. By default search within all categories.</span></div>
</div>
<div class="parameter_input">
<p>           You can find list of all categories <a href="https://trends.google.com/trends/api/explore/pickers/category?hl=en-US&tz=240" target="_blank" rel="noopener">here</a>.</p>
<div class="cp_serp_api_results_code">
<div class="copy-container">
<div class="zcode_wrapper">
<div class="zcode_source">
<pre class=" language-bash"><code class=" zcode_lang_source zcode_lang_source--mh1 language-bash"><span class="token function">curl</span> -v --compressed --proxy zproxy.lum-superproxy.io:22225 --proxy-user lum-customer-username-zone-ZONE:PASSWORD <span class="token string">"http:/</span></code></pre>
</div>
</div>
</div>
</div>
</div>
</div>
<hr />
<div class="title_header">
<div class="cp_title cp_title_small">Type of search</div>
</div>
<div class="parameter_item parameter_item_api parameter_item_gprop">
<div class="parameter_header">
<div class="parameter_label">gprop      <span style="font-size: 16px;">Google property to filter on. Defaults to web search.</span></div>
</div>
<div class="parameter_input">
<p>                 Possible values are: <span class="parameter_label">images</span>, <span class="parameter_label">news</span>, <span class="parameter_label">groogle</span>, <span class="parameter_label">youtube</span></p>
<div class="cp_serp_api_results_code">
<div class="copy-container">
<div class="zcode_wrapper">
<div class="zcode_source">
<pre class=" language-bash"><code class=" zcode_lang_source zcode_lang_source--mh1 language-bash"><span class="token function">curl</span> -v --compressed --proxy zproxy.lum-superproxy.io:22225 --proxy-user lum-customer-username-zone-ZONE:PASSWORD <span class="token string">"htt</span></code></pre>
</div>
</div>
</div>
</div>
</div>
</div>
<hr />
<div class="title_header">
<div class="cp_title cp_title_small">Asynchronous requests</div>
</div>
<div class="cp_serp_api_async_desc">Send requests without waiting for the response. Collect results via a designated endpoint or a webhook.</div>
<div class="cp_serp_api_results_code">
<p class="faq_unit_item_p">To initiate a request, perform:</p>
<div class="copy-container">
<div class="zcode_wrapper">
<div class="zcode_source">
<pre class=" language-bash"><code class=" zcode_lang_source zcode_lang_source--mh1 language-bash"><span class="token assign-left variable">RESPONSE_ID</span><span class="token operator">=</span><span class="token variable">`<span class="token function">curl</span> -i --silent --compressed <span class="token string">"https://brightdata.com/api/serp/trends?customer=username&zone=ZONE"</span> -H <span class="token string">"Content-Type: application/json"</span> -H <span class="token string">"Authorization: Bearer &lt;API_TOKEN&gt;"</span> -d <span class="token string">"{<span class="token entity" title="\&quot;">\"</span>query<span class="token entity" title="\&quot;">\"</span>:{<span class="token entity" title="\&quot;">\"</span>q<span class="token entity" title="\&quot;">\"</span>:<span class="token entity" title="\&quot;">\"</span>pizza<span class="token entity" title="\&quot;">\"</span>},<span class="token entity" title="\&quot;">\"</span>country<span class="token entity" title="\&quot;">\"</span>:<span class="token entity" title="\&quot;">\"</span>us<span class="token entity" title="\&quot;">\"</span>}"</span> <span class="token operator">|</span> <span class="token function">sed</span> -En <span class="token string">'s/^x-response-id: (.*)/<span class="token entity" title="\1">\1</span>/p'</span> <span class="token operator">|</span> <span class="token function">tr</span> -d <span class="token string">'<span class="token entity" title="\r">\r</span>'</span>`</span></code></pre>
<div class="zcode_tooltip zcode_tooltip--bottom">
<div class="copy_wrapper">
<div class="btn_icon btn_icon_circle">
<div class="btn_icon_ic btn_icon_ic_copy btn_icon_ic_tiny"></div>
</div>
</div>
</div>
</div>
</div>
</div>
<p class="faq_unit_item_p">`x-response-id` header will contain the id of the request so you can use it in the next request to fetch the result</p>
<div class="copy-container">
<div class="zcode_wrapper">
<div class="zcode_source">
<pre class=" language-bash"><code class=" zcode_lang_source zcode_lang_source--mh1 language-bash"><span class="token function">curl</span> -v --compressed <span class="token string">"https://brightdata.com/api/serp/get_result?customer=username&zone=ZONE&output=json&response_id=<span class="token variable">${RESPONSE_ID}</span>"</span> -H <span class="token string">"Authorization: Bearer &lt;API_TOKEN&gt;"</span></code></pre>
<div class="zcode_tooltip zcode_tooltip--bottom">
<div class="copy_wrapper">
<div class="btn_icon btn_icon_circle">
<div class="btn_icon_ic btn_icon_ic_copy btn_icon_ic_tiny"></div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
<p>You can adjust your zone async settings on <a href="https://brightdata.com/cp/zones?id=username" target="_blank" rel="nofollow noopener">zones page</a>.<br />
Optional settings:<br />
<b>Result lifetime (days)</b> &#8211; number of days to keep results<br />
<b>Web Hook URL</b> &#8211; address to deliver results<br />
<b>Web Hook Request Method</b> &#8211; HTTP method to use to deliver response, GET or POST are optional</p>
<hr />
<div class="row">
<div class="col-md-12 col-sm-12 col-xs-12">
<div class="cp_container parameters_unit">
<div class="cp_container_content ">
<div class="title_header">
<div>
<h4>Reviews</h4>
</div>
<div class="cp_title cp_title_small">Feature id</div>
</div>
<div class="parameter_item parameter_item_api parameter_item_fid">
<div class="parameter_header">
<div class="parameter_label">fid    Feature id what you want to fetch reviews to.<br />
fid parameter can be found in knowledge.fid field of google search response.<br />
For example: http://www.google.com/search?q=hilton%20new%20york%20midtown</div>
</div>
<div class="parameter_input">
<div class="cp_serp_api_results_code">
<div class="copy-container">
<div class="zcode_wrapper">
<div class="zcode_source">
<pre class=" language-bash"><code class=" zcode_lang_source zcode_lang_source--mh1 language-bash"><span class="token function">curl</span> -v --compressed --proxy zproxy.lum-superproxy.io:22225 --proxy-user lum-customer-username-zone-ZONE:PASSWORD <span class="token string">"http://www.google.com/reviews?fid=0x808fba02425dad8f%3A0x6c296c66619367e0"</span></code></pre>
<div class="zcode_tooltip zcode_tooltip--bottom">
<div class="copy_wrapper">
<div class="btn_icon btn_icon_circle">
<div class="btn_icon_ic btn_icon_ic_copy btn_icon_ic_tiny">
<hr />
<p><span style="font-size: 16px;">Localization</span></p>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
<div class="row">
<div class="col-md-12 col-sm-12 col-xs-12">
<div class="cp_container parameters_unit">
<div class="cp_container_content ">
<div class="parameter_item parameter_item_api parameter_item_hl">
<div class="parameter_header">
<div class="parameter_label">hl      <span style="font-size: 16px;">Preferred language, two-letter language code</span></div>
</div>
<div class="parameter_input">
<div class="cp_serp_api_results_code">
<div class="copy-container">
<div class="zcode_wrapper">
<div class="zcode_source">
<pre class=" language-bash"><code class=" zcode_lang_source zcode_lang_source--mh1 language-bash"><span class="token function">curl</span> -v --compressed --proxy zproxy.lum-superproxy.io:22225 --proxy-user lum-customer-username-zone-ZONE:PASSWORD <span class="token string">"http://www.google.com/reviews?hl=de&fid=0x808fba02425dad8f%3A0x6c296c66619367e0"</span></code></pre>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
<div class="row">
<div class="col-md-12 col-sm-12 col-xs-12">
<div class="cp_container parameters_unit">
<div class="cp_container_content ">
<div class="title_header">
<div class="cp_title cp_title_small">
<hr />
<p>Sorting and filtering</p>
</div>
</div>
<div class="parameter_item parameter_item_api parameter_item_sort">
<div class="parameter_header">
<div class="parameter_label">sort      <span style="font-size: 16px;">The way reviews are sorted. Possible values are:</span></div>
</div>
<div class="parameter_input"><span class="parameter_label">             sort=qualityScore</span> (default) &#8211; most relevant first<br />
<span class="parameter_label">             sort=newestFirst</span> &#8211; newest first<br />
<span class="parameter_label">             sort=ratingHigh</span> &#8211; highest rating first<br />
<span class="parameter_label">             sort=ratingLow</span> &#8211; lowest rating first</p>
<div class="cp_serp_api_results_code">
<div class="copy-container">
<div class="zcode_wrapper">
<div class="zcode_source">
<pre class=" language-bash"><code class=" zcode_lang_source zcode_lang_source--mh1 language-bash"><span class="token function">curl</span> -v --compressed --proxy zproxy.lum-superproxy.io:22225 --proxy-user lum-customer-username-zone-ZONE:PASSWORD <span class="token string">"http://www.google.com/reviews?fid=0x808fba02425dad8f%3A0x6c296c66619367e0&sort=newestFirst"</span></code></pre>
</div>
</div>
</div>
</div>
</div>
</div>
<div class="parameter_item parameter_item_api parameter_item_filter">
<div class="parameter_header">
<div class="parameter_label">filter     <span style="font-size: 16px;">Filter keyword. Will respond with reviews that contain specified keyword only. Example:</span></div>
</div>
<div class="parameter_input">
<p><span class="parameter_label">              filter=awesome</span> &#8211; search for reviews containing &#8216;awesome' word</p>
<div class="cp_serp_api_results_code">
<div class="copy-container">
<div class="zcode_wrapper">
<div class="zcode_source">
<pre class=" language-bash"><code class=" zcode_lang_source zcode_lang_source--mh1 language-bash"><span class="token function">curl</span> -v --compressed --proxy zproxy.lum-superproxy.io:22225 --proxy-user lum-customer-username-zone-ZONE:PASSWORD <span class="token string">"http://www.google.com/reviews?filter=awesome&fid=0x808fba02425dad8f%3A0x6c296c66619367e0"</span></code></pre>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
<div class="row">
<div class="col-md-12 col-sm-12 col-xs-12">
<div class="cp_container parameters_unit">
<div class="cp_container_content ">
<div class="title_header">
<div class="cp_title cp_title_small">
<hr />
<p>Pagination</p>
</div>
</div>
<div class="parameter_item parameter_item_api parameter_item_start">
<div class="parameter_header">
<div class="parameter_label">start     <span style="font-size: 16px;">Define the result offset &#8211; results to start from the selected value. Used for managing pagination.</span></div>
</div>
<div class="parameter_input">             Examples:<br />
<span class="parameter_label">             start=0</span> (default) &#8211; first page of results<br />
<span class="parameter_label">             start=10</span> &#8211; second page of results<br />
<span class="parameter_label">             start=20</span> &#8211; third page of results, etc.</p>
<div class="cp_serp_api_results_code">
<div class="copy-container">
<div class="zcode_wrapper">
<div class="zcode_source">
<pre class=" language-bash"><code class=" zcode_lang_source zcode_lang_source--mh1 language-bash"><span class="token function">curl</span> -v --compressed --proxy zproxy.lum-superproxy.io:22225 --proxy-user lum-customer-username-zone-ZONE:PASSWORD <span class="token string">"http://www.google.com/reviews?start=10&fid=0x808fba02425dad8f%3A0x6c296c66619367e0"</span></code></pre>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
<div class="row">
<div class="col-md-12 col-sm-12 col-xs-12">
<div class="cp_container parameters_unit">
<div class="cp_container_content ">
<div class="title_header">
<div class="cp_title cp_title_small">
<hr />
<p>Asynchronous requests</p>
</div>
</div>
<div class="cp_serp_api_async_desc">Send requests without waiting for the response. Collect results via a designated endpoint or a webhook.</div>
<div class="cp_serp_api_results_code">
<p class="faq_unit_item_p">To initiate a request, perform:</p>
<div class="copy-container">
<div class="zcode_wrapper">
<div class="zcode_source">
<pre class=" language-bash"><code class=" zcode_lang_source zcode_lang_source--mh1 language-bash"><span class="token assign-left variable">RESPONSE_ID</span><span class="token operator">=</span><span class="token variable">`<span class="token function">curl</span> -i --silent --compressed <span class="token string">"https://brightdata.com/api/serp/reviews?customer=username&zone=ZONE"</span> -H <span class="token string">"Content-Type: application/json"</span> -H <span class="token string">"Authorization: Bearer &lt;API_TOKEN&gt;"</span> -d <span class="token string">"{<span class="token entity" title="\&quot;">\"</span>query<span class="token entity" title="\&quot;">\"</span>:{<span class="token entity" title="\&quot;">\"</span>fid<span class="token entity" title="\&quot;">\"</span>:<span class="token entity" title="\&quot;">\"</span>0x808fba02425dad8f:0x6c296c66619367e0<span class="token entity" title="\&quot;">\"</span>},<span class="token entity" title="\&quot;">\"</span>country<span class="token entity" title="\&quot;">\"</span>:<span class="token entity" title="\&quot;">\"</span>us<span class="token entity" title="\&quot;">\"</span>}"</span> <span class="token operator">|</span> <span class="token function">sed</span> -En <span class="token string">'s/^x-response-id: (.*)/<span class="token entity" title="\1">\1</span>/p'</span> <span class="token operator">|</span> <span class="token function">tr</span> -d <span class="token string">'<span class="token entity" title="\r">\r</span>'</span>`</span></code></pre>
</div>
</div>
</div>
<p class="faq_unit_item_p">`x-response-id` header will contain the id of the request so you can use it in the next request to fetch the result</p>
<div class="copy-container">
<div class="zcode_wrapper">
<div class="zcode_source">
<pre class=" language-bash"><code class=" zcode_lang_source zcode_lang_source--mh1 language-bash"><span class="token function">curl</span> -v --compressed <span class="token string">"https://brightdata.com/api/serp/get_result?customer=username&zone=ZONE&response_id=<span class="token variable">${RESPONSE_ID}</span>"</span> -H <span class="token string">"Authorization: Bearer &lt;API_TOKEN&gt;"</span></code></pre>
</div>
</div>
</div>
</div>
<p>You can adjust your zone async settings on <a href="https://brightdata.com/cp/zones?id=username" target="_blank" rel="nofollow noopener">zones page</a>.<br />
Optional settings:<br />
<b>Result lifetime (days)</b> &#8211; number of days to keep results<br />
<b>Web Hook URL</b> &#8211; address to deliver results<br />
<b>Web Hook Request Method</b> &#8211; HTTP method to use to deliver response, GET or POST are optional</p>
</div>
</div>
</div>
</div>
<hr />
<h3>Bing Search Crawler API</h3>
<div class="row">
<div class="col-md-12 col-sm-12 col-xs-12">
<div class="cp_container parameters_unit">
<div class="cp_container_content ">
<div class="title_header">
<div class="cp_title cp_title_small">Localization</div>
</div>
<div class="parameter_item parameter_item_api parameter_item_cc">
<div class="parameter_header">
<div class="parameter_label">cc     <span style="font-size: 16px;">Two-letter country code used to define the country of search</span></div>
</div>
<div class="parameter_input">
<div class="cp_serp_api_results_code">
<div class="copy-container">
<div class="zcode_wrapper">
<div class="zcode_source">
<pre class=" language-bash"><code class=" zcode_lang_source zcode_lang_source--mh1 language-bash"><span class="token function">curl</span> -v --compressed --proxy zproxy.lum-superproxy.io:22225 --proxy-user lum-customer-username-zone-ZONE:PASSWORD <span class="token string">"http://www.bing.com/search?q=pizza&cc=us"</span></code></pre>
<div class="zcode_tooltip zcode_tooltip--bottom">
<div class="copy_wrapper">
<div class="btn_icon btn_icon_circle">
<div class="btn_icon_ic btn_icon_ic_copy btn_icon_ic_tiny">
<hr />
<p><span style="font-size: 16px;">Geographic Location</span></p>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
<div class="row">
<div class="col-md-12 col-sm-12 col-xs-12">
<div class="cp_container parameters_unit">
<div class="cp_container_content ">
<div class="parameter_item parameter_item_api parameter_item_location">
<div class="parameter_header">
<div class="parameter_label">location     <span style="font-size: 16px;">A location for the search origin.</span></div>
</div>
<div class="parameter_input">
<p><span class="parameter_label">                    lat</span> and <span class="parameter_label">lon</span> parameters must be specified as well</p>
<div class="cp_serp_api_results_code">
<div class="copy-container">
<div class="zcode_wrapper">
<div class="zcode_source">
<pre class=" language-bash"><code class=" zcode_lang_source zcode_lang_source--mh1 language-bash"><span class="token function">curl</span> -v --compressed --proxy zproxy.lum-superproxy.io:22225 --proxy-user lum-customer-username-zone-ZONE:PASSWORD <span class="token string">"http://www.bing.com/search?q=pizza&location=New+York%2C+New+York%2C+United+States&lat=40.7001958&lon=-74.1087142"</span></code></pre>
<div class="zcode_tooltip zcode_tooltip--bottom">
<div class="copy_wrapper">
<div class="btn_icon btn_icon_circle">
<div class="btn_icon_ic btn_icon_ic_copy btn_icon_ic_tiny"><span style="font-size: 16px;">lat     </span><span style="font-size: 16px;">A GPS latitude for the search origin</span></div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
<div class="parameter_item parameter_item_api parameter_item_lat">
<div class="parameter_input">
<div class="cp_serp_api_results_code">
<div class="copy-container">
<div class="zcode_wrapper">
<div class="zcode_source">
<pre class=" language-bash"><code class=" zcode_lang_source zcode_lang_source--mh1 language-bash"><span class="token function">curl</span> -v --compressed --proxy zproxy.lum-superproxy.io:22225 --proxy-user lum-customer-username-zone-ZONE:PASSWORD <span class="token string">"http://www.bing.com/search?q=pizza&lat=40.7001958&lon=-74.1087142"</span></code></pre>
<div class="zcode_tooltip zcode_tooltip--bottom">
<div class="copy_wrapper">
<div class="btn_icon btn_icon_circle">
<div class="btn_icon_ic btn_icon_ic_copy btn_icon_ic_tiny"><span style="font-size: 16px;">lon     </span><span style="font-size: 16px;">A GPS longitude for the search origin</span></div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
<div class="parameter_item parameter_item_api parameter_item_lon">
<div class="parameter_input">
<div class="cp_serp_api_results_code">
<div class="copy-container">
<div class="zcode_wrapper">
<div class="zcode_source">
<pre class=" language-bash"><code class=" zcode_lang_source zcode_lang_source--mh1 language-bash"><span class="token function">curl</span> -v --compressed --proxy zproxy.lum-superproxy.io:22225 --proxy-user lum-customer-username-zone-ZONE:PASSWORD <span class="token string">"http://www.bing.com/search?q=pizza&lat=40.7001958&lon=-74.1087142"</span></code></pre>
<div class="zcode_tooltip zcode_tooltip--bottom">
<div class="copy_wrapper">
<div class="btn_icon btn_icon_circle">
<div class="btn_icon_ic btn_icon_ic_copy btn_icon_ic_tiny"><span style="font-size: 16px;">mkt     </span><span style="font-size: 16px;">The market where the search results come from. Use </span><a style="font-size: 16px; background-color: #ffffff;" href="https://brightdata.com/api/serp/bing/mkt_values" target="_blank" rel="noopener">this link</a><span style="font-size: 16px;"> to view all optional values.</span></div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
<div class="parameter_item parameter_item_api parameter_item_mkt">
<div class="parameter_input">
<div class="cp_serp_api_results_code">
<div class="copy-container">
<div class="zcode_wrapper">
<div class="zcode_source">
<pre class=" language-bash"><code class=" zcode_lang_source zcode_lang_source--mh1 language-bash"><span class="token function">curl</span> -v --compressed --proxy zproxy.lum-superproxy.io:22225 --proxy-user lum-customer-username-zone-ZONE:PASSWORD <span class="token string">"http://www.bing.com/search?q=pizza&mkt=en-US"</span></code></pre>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
<div class="row">
<div class="col-md-12 col-sm-12 col-xs-12">
<div class="cp_container parameters_unit">
<div class="cp_container_content ">
<div class="title_header">
<div class="cp_title cp_title_small">
<hr />
<p>Pagination</p>
</div>
</div>
<div class="parameter_item parameter_item_api parameter_item_first">
<div class="parameter_header">
<div class="parameter_label">first     <span style="font-size: 16px;">Define the result offset &#8211; results to start from the selected value. Used for managing pagination.</span></div>
</div>
<div class="parameter_input">             Examples:<br />
<span class="parameter_label">             first=1</span> (default) &#8211; first page of results<br />
<span class="parameter_label">             first=11</span> &#8211; second page of results<br />
<span class="parameter_label">             first=21</span> &#8211; third page of results, etc.</p>
<div class="cp_serp_api_results_code">
<div class="copy-container">
<div class="zcode_wrapper">
<div class="zcode_source">
<pre class=" language-bash"><code class=" zcode_lang_source zcode_lang_source--mh1 language-bash"><span class="token function">curl</span> -v --compressed --proxy zproxy.lum-superproxy.io:22225 --proxy-user lum-customer-username-zone-ZONE:PASSWORD <span class="token string">"http://www.bing.com/search?q=pizza&first=11"</span></code></pre>
<div class="zcode_tooltip zcode_tooltip--bottom">
<div class="copy_wrapper">
<div class="btn_icon btn_icon_circle">
<div class="btn_icon_ic btn_icon_ic_copy btn_icon_ic_tiny"><span style="font-size: 16px;">count     </span><span style="font-size: 16px;">Defines the number of results to return.</span></div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
<div class="parameter_item parameter_item_api parameter_item_count">
<div class="parameter_input">                Examples:<br />
<span class="parameter_label">                count=10</span> (default) returns 10 results<br />
<span class="parameter_label">                count=30</span> returns 30 results, etc.</p>
<div class="cp_serp_api_results_code">
<div class="copy-container">
<div class="zcode_wrapper">
<div class="zcode_source">
<pre class=" language-bash"><code class=" zcode_lang_source zcode_lang_source--mh1 language-bash"><span class="token function">curl</span> -v --compressed --proxy zproxy.lum-superproxy.io:22225 --proxy-user lum-customer-username-zone-ZONE:PASSWORD <span class="token string">"http://www.bing.com/search?q=pizza&num=20"</span></code></pre>
<div class="zcode_tooltip zcode_tooltip--bottom">
<div class="copy_wrapper">
<div class="btn_icon btn_icon_circle">
<div class="btn_icon_ic btn_icon_ic_copy btn_icon_ic_tiny">
<hr />
<p><span style="font-size: 16px;">Device and output format</span></p>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
<div class="row">
<div class="col-md-12 col-sm-12 col-xs-12">
<div class="cp_container parameters_unit">
<div class="cp_container_content ">
<div class="parameter_item parameter_item_api parameter_item_lum_mobile">
<div class="parameter_header">
<div class="parameter_label">lum_mobile     <span style="font-size: 16px;">Define what device type to be represented in user-agent</span></div>
</div>
<div class="parameter_input">
<p>                           Default or <span class="parameter_label">lum_mobile=0</span> will provide random desktop user-agent while <span class="parameter_label">lum_mobile=1</span> will provide random mobile user-agent</p>
<div class="cp_serp_api_results_code">
<div class="copy-container">
<div class="zcode_wrapper">
<div class="zcode_source">
<pre class=" language-bash"><code class=" zcode_lang_source zcode_lang_source--mh1 language-bash"><span class="token function">curl</span> -v --compressed --proxy zproxy.lum-superproxy.io:22225 --proxy-user lum-customer-username-zone-ZONE:PASSWORD <span class="token string">"http://www.bing.com/search?q=pizza&lum_mobile=1"</span></code></pre>
<div class="zcode_tooltip zcode_tooltip--bottom">
<div class="copy_wrapper">
<div class="btn_icon btn_icon_circle">
<div class="btn_icon_ic btn_icon_ic_copy btn_icon_ic_tiny"><span style="font-size: 16px;">lum_json     </span><span style="font-size: 16px;">Bright Data parameter allowing to return parsed JSON instead of raw HTML</span></div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
<div class="parameter_item parameter_item_api parameter_item_lum_json">
<div class="parameter_input">                       Examples:<br />
<span class="parameter_label">                       lum_json=1</span> &#8211; return results in JSON<br />
<span class="parameter_label">                       lum_json=html</span> &#8211; return JSON with &#8220;html&#8221; field containing raw HTML<br />
<span class="parameter_label">                       lum_json=hotel</span> &#8211; make additional request to retrieve hotel prices<br />
<span class="parameter_label">                       lum_json=hotel,html</span> &#8211; two values can be combined while separated by comma</p>
<div class="cp_serp_api_results_code">
<div class="copy-container">
<div class="zcode_wrapper">
<div class="zcode_source">
<pre class=" language-bash"><code class=" zcode_lang_source zcode_lang_source--mh1 language-bash"><span class="token function">curl</span> -v --compressed --proxy zproxy.lum-superproxy.io:22225 --proxy-user lum-customer-username-zone-ZONE:PASSWORD <span class="token string">"http://www.bing.com/search?q=pizza&lum_json=1"</span></code></pre>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
<div class="row">
<div class="col-md-12 col-sm-12 col-xs-12">
<div class="cp_container parameters_unit">
<div class="cp_container_content ">
<div class="title_header">
<div class="cp_title cp_title_small">
<hr />
<p>Asynchronous requests</p>
</div>
</div>
<div class="cp_serp_api_async_desc">Send requests without waiting for the response. Collect results via a designated endpoint or a webhook.</div>
<div class="cp_serp_api_results_code">
<p class="faq_unit_item_p">To initiate a request, perform:</p>
<div class="copy-container">
<div class="zcode_wrapper">
<div class="zcode_source">
<pre class=" language-bash"><code class=" zcode_lang_source zcode_lang_source--mh1 language-bash"><span class="token assign-left variable">RESPONSE_ID</span><span class="token operator">=</span><span class="token variable">`<span class="token function">curl</span> -i --silent --compressed <span class="token string">"https://brightdata.com/api/serp/bing/search?customer=username&zone=ZONE"</span> -H <span class="token string">"Content-Type: application/json"</span> -H <span class="token string">"Authorization: Bearer &lt;API_TOKEN&gt;"</span> -d <span class="token string">"{<span class="token entity" title="\&quot;">\"</span>query<span class="token entity" title="\&quot;">\"</span>:{<span class="token entity" title="\&quot;">\"</span>q<span class="token entity" title="\&quot;">\"</span>:<span class="token entity" title="\&quot;">\"</span>pizza<span class="token entity" title="\&quot;">\"</span>},<span class="token entity" title="\&quot;">\"</span>country<span class="token entity" title="\&quot;">\"</span>:<span class="token entity" title="\&quot;">\"</span>us<span class="token entity" title="\&quot;">\"</span>}"</span> <span class="token operator">|</span> <span class="token function">sed</span> -En <span class="token string">'s/^x-response-id: (.*)/<span class="token entity" title="\1">\1</span>/p'</span> <span class="token operator">|</span> <span class="token function">tr</span> -d <span class="token string">'<span class="token entity" title="\r">\r</span>'</span>`</span></code></pre>
<div class="zcode_tooltip zcode_tooltip--bottom">
<div class="copy_wrapper">
<div class="btn_icon btn_icon_circle">
<div class="btn_icon_ic btn_icon_ic_copy btn_icon_ic_tiny"><span style="font-size: 16px;">`x-response-id` header will contain the id of the request so you can use it in the next request to fetch the result</span></div>
</div>
</div>
</div>
</div>
</div>
</div>
<div class="copy-container">
<div class="zcode_wrapper">
<div class="zcode_source">
<pre class=" language-bash"><code class=" zcode_lang_source zcode_lang_source--mh1 language-bash"><span class="token function">curl</span> -v --compressed <span class="token string">"https://brightdata.com/api/serp/get_result?customer=username&zone=ZONE&response_id=<span class="token variable">${RESPONSE_ID}</span>"</span> -H <span class="token string">"Authorization: Bearer &lt;API_TOKEN&gt;"</span></code></pre>
<div class="zcode_tooltip zcode_tooltip--bottom">
<div class="copy_wrapper">
<div class="btn_icon btn_icon_circle">
<div class="btn_icon_ic btn_icon_ic_copy btn_icon_ic_tiny"><span style="font-size: 16px;">You can adjust your zone async settings on </span><a style="font-size: 16px; background-color: #ffffff;" href="https://brightdata.com/cp/zones?id=username" target="_blank" rel="nofollow noopener">zones page</a><span style="font-size: 16px;">.</span></div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
<p>Optional settings:<br />
<b>Result lifetime (days)</b> &#8211; number of days to keep results<br />
<b>Web Hook URL</b> &#8211; address to deliver results<br />
<b>Web Hook Request Method</b> &#8211; HTTP method to use to deliver response, GET or POST are optional</p>
</div>
</div>
</div>
</div>
<div class="row">
<div class="col-md-12 col-sm-12 col-xs-12">
<div class="cp_container parameters_unit">
<div class="cp_container_content ">
<div class="title_header">
<div class="cp_title cp_title_small">
<hr />
<p>Parsing schema</p>
</div>
</div>
<div class="cp_serp_api_schema_desc">The parsing scheme can be obtained by the following endpoint: <code>GET /api/serp/bing/parsing_schema</code></div>
<div class="cp_serp_api_results_code">
<p class="faq_unit_item_p">To get schema, perform:</p>
<div class="copy-container">
<div class="zcode_wrapper">
<div class="zcode_source">
<pre class=" language-bash"><code class=" zcode_lang_source zcode_lang_source--mh1 language-bash"><span class="token function">curl</span> --compressed <span class="token string">"https://brightdata.com/api/serp/bing/parsing_schema"</span> -H <span class="token string">"Authorization: Bearer API_TOKEN"</span></code></pre>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
<hr />
<h3 class="cp_tab_label">Yandex Search Crawler API</h3>
<div>
<div class="row">
<div class="col-md-12 col-sm-12 col-xs-12">
<div class="cp_container parameters_unit">
<div class="cp_container_content ">
<div class="title_header">
<div class="cp_title cp_title_small">Localization</div>
</div>
<div class="parameter_item parameter_item_api parameter_item_lr">
<div class="parameter_header">
<div class="parameter_label">lr     <span style="font-size: 16px;">Region or country to search. Examples:</span></div>
</div>
<div class="parameter_input"><span class="parameter_label">        1</span> &#8211; Moscow<br />
<span class="parameter_label">        2</span> &#8211; Saint-Petersburg<br />
<span class="parameter_label">        84</span> &#8211; USA<br />
<span class="parameter_label">        95</span> &#8211; Canada<br />
<span class="parameter_label">       134</span> &#8211; China</p>
<div class="cp_serp_api_results_code">
<div class="copy-container">
<div class="zcode_wrapper">
<div class="zcode_source">
<pre class=" language-bash"><code class=" zcode_lang_source zcode_lang_source--mh1 language-bash"><span class="token function">curl</span> -v --compressed --proxy zproxy.lum-superproxy.io:22225 --proxy-user lum-customer-username-zone-ZONE:PASSWORD <span class="token string">"https://www.yandex.com/search/?text=pizza&lr=84"</span></code></pre>
<div class="zcode_tooltip zcode_tooltip--bottom">
<div class="copy_wrapper">
<div class="btn_icon btn_icon_circle">
<div class="btn_icon_ic btn_icon_ic_copy btn_icon_ic_tiny"><span style="font-size: 16px;">lang     </span><span style="font-size: 16px;">Two-letter language code used to define the page language</span></div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
<div class="parameter_item parameter_item_api parameter_item_lang">
<div class="parameter_input">
<div class="cp_serp_api_results_code">
<div class="copy-container">
<div class="zcode_wrapper">
<div class="zcode_source">
<pre class=" language-bash"><code class=" zcode_lang_source zcode_lang_source--mh1 language-bash"><span class="token function">curl</span> -v --compressed --proxy zproxy.lum-superproxy.io:22225 --proxy-user lum-customer-username-zone-ZONE:PASSWORD <span class="token string">"https://www.yandex.com/search/?text=pizza&lang=en"</span></code></pre>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
<div class="row">
<div class="col-md-12 col-sm-12 col-xs-12">
<div class="cp_container parameters_unit">
<div class="cp_container_content ">
<div class="title_header">
<div class="cp_title cp_title_small">
<hr />
<p>Pagination</p>
</div>
</div>
<div class="parameter_item parameter_item_api parameter_item_p">
<div class="parameter_header">
<div class="parameter_label">p     <span style="font-size: 16px;">Define the result page &#8211; results to start from the selected value. Used for managing pagination.</span></div>
</div>
<div class="parameter_input">       Examples:<br />
<span class="parameter_label">       p=1</span> (default) &#8211; first page of results<br />
<span class="parameter_label">       p=2</span> &#8211; second page of results<br />
<span class="parameter_label">       p=4</span> &#8211; fourth page of results, etc.</p>
<div class="cp_serp_api_results_code">
<div class="copy-container">
<div class="zcode_wrapper">
<div class="zcode_source">
<pre class=" language-bash"><code class=" zcode_lang_source zcode_lang_source--mh1 language-bash"><span class="token function">curl</span> -v --compressed --proxy zproxy.lum-superproxy.io:22225 --proxy-user lum-customer-username-zone-ZONE:PASSWORD <span class="token string">"https://www.yandex.com/search/?text=pizza&p=1"</span></code></pre>
<div class="zcode_tooltip zcode_tooltip--bottom">
<div class="copy_wrapper">
<div class="btn_icon btn_icon_circle">
<div class="btn_icon_ic btn_icon_ic_copy btn_icon_ic_tiny"><span style="font-size: 16px;">numdoc      </span><span style="font-size: 16px;">Defines the number of results to return.</span></div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
<div class="parameter_item parameter_item_api parameter_item_numdoc">
<div class="parameter_input">
<p>                     Takes the values <span class="parameter_label">10</span>, <span class="parameter_label">20</span>, <span class="parameter_label">30</span>, and <span class="parameter_label">10</span>. When using numbers other than these values which less than <span class="parameter_label">50</span>, rounding up to the nearest of them occurs. When using numbers over <span class="parameter_label">50</span>,                                 rounding up to <span class="parameter_label">50</span> occurs.</p>
<div class="cp_serp_api_results_code">
<div class="copy-container">
<div class="zcode_wrapper">
<div class="zcode_source">
<pre class=" language-bash"><code class=" zcode_lang_source zcode_lang_source--mh1 language-bash"><span class="token function">curl</span> -v --compressed --proxy zproxy.lum-superproxy.io:22225 --proxy-user lum-customer-username-zone-ZONE:PASSWORD <span class="token string">"https://www.yandex.com/search/?text=pizza&numdoc=10"</span></code></pre>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
<div class="row">
<div class="col-md-12 col-sm-12 col-xs-12">
<div class="cp_container parameters_unit">
<div class="cp_container_content ">
<div class="title_header">
<div class="cp_title cp_title_small">
<hr />
<p>Time range</p>
</div>
</div>
<div class="parameter_item parameter_item_api parameter_item_within">
<div class="parameter_header">
<div class="parameter_label">within     <span style="font-size: 16px;">Time range to search. Available values are:</span></div>
</div>
<div class="parameter_input"><span class="parameter_label">                 1</span> &#8211; Past 2 weeks<br />
<span class="parameter_label">                 2</span> &#8211; Past month<br />
<span class="parameter_label">                 3</span> &#8211; Past 3 months<br />
<span class="parameter_label">                 4</span> &#8211; Past 6 months<br />
<span class="parameter_label">                 5</span> &#8211; Past year<br />
<span class="parameter_label">                 6</span> &#8211; Past 2 years<br />
<span class="parameter_label">                 7</span> &#8211; Past day<br />
<span class="parameter_label">                 77</span> &#8211; Past 24 hours<br />
<span class="parameter_label">                 8</span> &#8211; Past 3 days<br />
<span class="parameter_label">                 9</span> &#8211; Past week</p>
<div class="cp_serp_api_results_code">
<div class="copy-container">
<div class="zcode_wrapper">
<div class="zcode_source">
<pre class=" language-bash"><code class=" zcode_lang_source zcode_lang_source--mh1 language-bash"><span class="token function">curl</span> -v --compressed --proxy zproxy.lum-superproxy.io:22225 --proxy-user lum-customer-username-zone-ZONE:PASSWORD <span class="token string">"https://www.yandex.com/search/?text=pizza&within=1"</span></code></pre>
<div class="zcode_tooltip zcode_tooltip--bottom">
<div class="copy_wrapper">
<div class="btn_icon btn_icon_circle">
<div class="btn_icon_ic btn_icon_ic_copy btn_icon_ic_tiny"><span style="font-size: 16px;">from_date_full     </span><span style="font-size: 16px;">Define the result start date. Used for managing time range (format DD.MM.YYYY).</span></div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
<div class="parameter_item parameter_item_api parameter_item_from_date_full">
<div class="parameter_input">                                 Examples:<br />
<span class="parameter_label">                                 from_date_full=12.12.2020</span> &#8211; date to start from</p>
<div class="cp_serp_api_results_code">
<div class="copy-container">
<div class="zcode_wrapper">
<div class="zcode_source">
<pre class=" language-bash"><code class=" zcode_lang_source zcode_lang_source--mh1 language-bash"><span class="token function">curl</span> -v --compressed --proxy zproxy.lum-superproxy.io:22225 --proxy-user lum-customer-username-zone-ZONE:PASSWORD <span class="token string">"https://www.yandex.com/search/?text=pizza&from_date_full=12.12.2020"</span></code></pre>
<div class="zcode_tooltip zcode_tooltip--bottom">
<div class="copy_wrapper">
<div class="btn_icon btn_icon_circle">
<div class="btn_icon_ic btn_icon_ic_copy btn_icon_ic_tiny"><span style="font-size: 16px;">to_date_full      </span><span style="font-size: 16px;">Define the result end date. Used for managing time range (format DD.MM.YYYY).</span></div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
<div class="parameter_item parameter_item_api parameter_item_to_date_full">
<div class="parameter_input">                             Examples:<br />
<span class="parameter_label">                             to_date_full=01.01.2021</span> &#8211; date to end search</p>
<div class="cp_serp_api_results_code">
<div class="copy-container">
<div class="zcode_wrapper">
<div class="zcode_source">
<pre class=" language-bash"><code class=" zcode_lang_source zcode_lang_source--mh1 language-bash"><span class="token function">curl</span> -v --compressed --proxy zproxy.lum-superproxy.io:22225 --proxy-user lum-customer-username-zone-ZONE:PASSWORD <span class="token string">"https://www.yandex.com/search/?text=pizza&to_date_full=01.01.2021"</span></code></pre>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
<div class="row">
<div class="col-md-12 col-sm-12 col-xs-12">
<div class="cp_container parameters_unit">
<div class="cp_container_content ">
<div class="title_header">
<div class="btn_icon btn_icon_no_link btn_icon_no_hover">
<div class="btn_icon_ic btn_icon_ic_perm_serp btn_icon_ic_small">
<hr />
<p><span style="font-size: 16px;">Device and output format</span></p>
</div>
</div>
</div>
<div class="parameter_item parameter_item_api parameter_item_lum_mobile">
<div class="parameter_header">
<div class="parameter_label">lum_mobile      <span style="font-size: 16px;">Define what device type to be represented in user-agent</span></div>
</div>
<div class="parameter_input">
<p>                            Default or <span class="parameter_label">lum_mobile=0</span> will provide random desktop user-agent while <span class="parameter_label">lum_mobile=1</span> will provide random mobile user-agent</p>
<div class="cp_serp_api_results_code">
<div class="copy-container">
<div class="zcode_wrapper">
<div class="zcode_source">
<pre class=" language-bash"><code class=" zcode_lang_source zcode_lang_source--mh1 language-bash"><span class="token function">curl</span> -v --compressed --proxy zproxy.lum-superproxy.io:22225 --proxy-user lum-customer-username-zone-ZONE:PASSWORD <span class="token string">"https://www.yandex.com/search/?lum_mobile=1&text=pizza"</span></code></pre>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
<div class="row">
<div class="col-md-12 col-sm-12 col-xs-12">
<div class="cp_container parameters_unit">
<div class="cp_container_content ">
<div class="title_header">
<div class="cp_title cp_title_small">
<hr />
<p>Asynchronous requests</p>
</div>
</div>
<div class="cp_serp_api_async_desc">Send requests without waiting for the response. Collect results via a designated endpoint or a webhook.</div>
<div class="cp_serp_api_results_code">
<p class="faq_unit_item_p">To initiate a request, perform:</p>
<div class="copy-container">
<div class="zcode_wrapper">
<div class="zcode_source">
<pre class=" language-bash"><code class=" zcode_lang_source zcode_lang_source--mh1 language-bash"><span class="token assign-left variable">RESPONSE_ID</span><span class="token operator">=</span><span class="token variable">`<span class="token function">curl</span> -i --silent --compressed <span class="token string">"https://brightdata.com/api/serp/yandex/search?customer=username&zone=ZONE"</span> -H <span class="token string">"Content-Type: application/json"</span> -H <span class="token string">"Authorization: Bearer &lt;API_TOKEN&gt;"</span> -d <span class="token string">"{<span class="token entity" title="\&quot;">\"</span>query<span class="token entity" title="\&quot;">\"</span>:{<span class="token entity" title="\&quot;">\"</span>text<span class="token entity" title="\&quot;">\"</span>:<span class="token entity" title="\&quot;">\"</span>pizza<span class="token entity" title="\&quot;">\"</span>},<span class="token entity" title="\&quot;">\"</span>country<span class="token entity" title="\&quot;">\"</span>:<span class="token entity" title="\&quot;">\"</span>us<span class="token entity" title="\&quot;">\"</span>}"</span> <span class="token operator">|</span> <span class="token function">sed</span> -En <span class="token string">'s/^x-response-id: (.*)/<span class="token entity" title="\1">\1</span>/p'</span> <span class="token operator">|</span> <span class="token function">tr</span> -d <span class="token string">'<span class="token entity" title="\r">\r</span>'</span>`</span></code></pre>
</div>
</div>
</div>
<p class="faq_unit_item_p">`x-response-id` header will contain the id of the request so you can use it in the next request to fetch the result</p>
<div class="copy-container">
<div class="zcode_wrapper">
<div class="zcode_source">
<pre class=" language-bash"><code class=" zcode_lang_source zcode_lang_source--mh1 language-bash"><span class="token function">curl</span> -v --compressed <span class="token string">"https://brightdata.com/api/serp/get_result?customer=username&zone=ZONE&response_id=<span class="token variable">${RESPONSE_ID}</span>"</span> -H <span class="token string">"Authorization: Bearer &lt;API_TOKEN&gt;"</span></code></pre>
</div>
</div>
</div>
</div>
<p>You can adjust your zone async settings on <a href="https://brightdata.com/cp/zones?id=username" target="_blank" rel="nofollow noopener">zones page</a>.<br />
Optional settings:<br />
<b>Result lifetime (days)</b> &#8211; number of days to keep results<br />
<b>Web Hook URL</b> &#8211; address to deliver results<br />
<b>Web Hook Request Method</b> &#8211; HTTP method to use to deliver response, GET or POST are optional</p>
</div>
</div>
</div>
</div>
</div>
<div class="cp_tab ">
<hr />
<h3 class="cp_tab_label">DuckDuckGo Search Crawler API</h3>
<div class="row">
<div class="col-md-12 col-sm-12 col-xs-12">
<div class="cp_container parameters_unit">
<div class="cp_container_content ">
<div class="title_header">
<div class="cp_title cp_title_small">Localization</div>
</div>
<div class="parameter_item parameter_item_api parameter_item_kl">
<div class="parameter_header">
<div class="parameter_label">kl     <span style="font-size: 16px;">Country and language code used to define the country and language of search</span></div>
</div>
<div class="parameter_input">
<div class="cp_serp_api_results_code">
<div class="copy-container">
<div class="zcode_wrapper">
<div class="zcode_source">
<pre class=" language-bash"><code class=" zcode_lang_source zcode_lang_source--mh1 language-bash"><span class="token function">curl</span> -v --compressed --proxy zproxy.lum-superproxy.io:22225 --proxy-user lum-customer-username-zone-ZONE:PASSWORD <span class="token string">"https://duckduckgo.com/?q=pizza&kl=us-en"</span></code></pre>
<div class="zcode_tooltip zcode_tooltip--bottom">
<div class="copy_wrapper">
<div class="btn_icon btn_icon_circle">
<div class="btn_icon_ic btn_icon_ic_copy btn_icon_ic_tiny">
<hr />
<p><span style="font-size: 16px;">Safe search</span></p>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
<div class="row">
<div class="col-md-12 col-sm-12 col-xs-12">
<div class="cp_container parameters_unit">
<div class="cp_container_content ">
<div class="parameter_item parameter_item_api parameter_item_kp">
<div class="parameter_header">
<div class="parameter_label">kp     <span style="font-size: 16px;">Removes adult content from search results.</span></div>
</div>
<div class="parameter_input">         Available values are:<br />
<span class="parameter_label">         1</span> &#8211; Turn on safe search</div>
<div class="parameter_input"><span class="parameter_label">         3</span> &#8211; Moderate search content<br />
<span class="parameter_label">         3</span> &#8211; Turn off safe search</p>
<div class="cp_serp_api_results_code">
<div class="copy-container">
<div class="zcode_wrapper">
<div class="zcode_source">
<pre class=" language-bash"><code class=" zcode_lang_source zcode_lang_source--mh1 language-bash"><span class="token function">curl</span> -v --compressed --proxy zproxy.lum-superproxy.io:22225 --proxy-user lum-customer-username-zone-ZONE:PASSWORD <span class="token string">"https://duckduckgo.com/?q=pizza&kp=1"</span></code></pre>
<div class="zcode_tooltip zcode_tooltip--bottom">
<div class="copy_wrapper">
<div class="btn_icon btn_icon_circle">
<div class="btn_icon_ic btn_icon_ic_copy btn_icon_ic_tiny">
<hr />
<p><span style="font-size: 16px;">Time range</span></p>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
<div class="row">
<div class="col-md-12 col-sm-12 col-xs-12">
<div class="cp_container parameters_unit">
<div class="cp_container_content ">
<div class="parameter_item parameter_item_api parameter_item_df">
<div class="parameter_header">
<div class="parameter_label">df     <span style="font-size: 16px;">Time range to search. Available values are:</span></div>
</div>
<div class="parameter_input"><span class="parameter_label">         d</span> &#8211; Past 2 weeks<br />
<span class="parameter_label">         w</span> &#8211; Past month<br />
<span class="parameter_label">         m</span> &#8211; Past 3 months<br />
<span class="parameter_label">         w</span> &#8211; Past 6 months</p>
<div class="cp_serp_api_results_code">
<div class="copy-container">
<div class="zcode_wrapper">
<div class="zcode_source">
<pre class=" language-bash"><code class=" zcode_lang_source zcode_lang_source--mh1 language-bash"><span class="token function">curl</span> -v --compressed --proxy zproxy.lum-superproxy.io:22225 --proxy-user lum-customer-username-zone-ZONE:PASSWORD <span class="token string">"https://duckduckgo.com/?q=pizza&df=d"</span></code></pre>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
<div class="row">
<div class="col-md-12 col-sm-12 col-xs-12">
<div class="cp_container parameters_unit">
<div class="cp_container_content ">
<div class="title_header">
<div class="cp_title cp_title_small">
<hr />
<p>Device and output format</p>
</div>
</div>
<div class="parameter_item parameter_item_api parameter_item_lum_mobile">
<div class="parameter_header">
<div class="parameter_label">lum_mobile     <span style="font-size: 16px;">Define what device type to be represented in user-agent</span></div>
</div>
<div class="parameter_input">
<p>                           Default or <span class="parameter_label">lum_mobile=0</span> will provide random desktop user-agent while <span class="parameter_label">lum_mobile=1</span> will provide random mobile user-agent</p>
<div class="cp_serp_api_results_code">
<div class="copy-container">
<div class="zcode_wrapper">
<div class="zcode_source">
<pre class=" language-bash"><code class=" zcode_lang_source zcode_lang_source--mh1 language-bash"><span class="token function">curl</span> -v --compressed --proxy zproxy.lum-superproxy.io:22225 --proxy-user lum-customer-username-zone-ZONE:PASSWORD <span class="token string">"https://duckduckgo.com/?q=pizza&lum_mobile=1"</span></code></pre>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
<div class="row">
<div class="col-md-12 col-sm-12 col-xs-12">
<div class="cp_container parameters_unit">
<div class="cp_container_content ">
<div class="title_header">
<div class="cp_title cp_title_small">
<hr />
<p>Asynchronous requests</p>
</div>
</div>
<div class="cp_serp_api_async_desc">Send requests without waiting for the response. Collect results via a designated endpoint or a webhook.</div>
<div class="cp_serp_api_results_code">
<p class="faq_unit_item_p">To initiate a request, perform:</p>
<div class="copy-container">
<div class="zcode_wrapper">
<div class="zcode_source">
<pre class=" language-bash"><code class=" zcode_lang_source zcode_lang_source--mh1 language-bash"><span class="token assign-left variable">RESPONSE_ID</span><span class="token operator">=</span><span class="token variable">`<span class="token function">curl</span> -i --silent --compressed <span class="token string">"https://brightdata.com/api/serp/duckduckgo/search?customer=username&zone=ZONE"</span> -H <span class="token string">"Content-Type: application/json"</span> -H <span class="token string">"Authorization: Bearer &lt;API_TOKEN&gt;"</span> -d <span class="token string">"{<span class="token entity" title="\&quot;">\"</span>query<span class="token entity" title="\&quot;">\"</span>:{<span class="token entity" title="\&quot;">\"</span>q<span class="token entity" title="\&quot;">\"</span>:<span class="token entity" title="\&quot;">\"</span>pizza<span class="token entity" title="\&quot;">\"</span>},<span class="token entity" title="\&quot;">\"</span>country<span class="token entity" title="\&quot;">\"</span>:<span class="token entity" title="\&quot;">\"</span>us<span class="token entity" title="\&quot;">\"</span>}"</span> <span class="token operator">|</span> <span class="token function">sed</span> -En <span class="token string">'s/^x-response-id: (.*)/<span class="token entity" title="\1">\1</span>/p'</span> <span class="token operator">|</span> <span class="token function">tr</span> -d <span class="token string">'<span class="token entity" title="\r">\r</span>'</span>`</span></code></pre>
</div>
</div>
</div>
<p class="faq_unit_item_p">`x-response-id` header will contain the id of the request so you can use it in the next request to fetch the result</p>
<div class="copy-container">
<div class="zcode_wrapper">
<div class="zcode_source">
<pre class=" language-bash"><code class=" zcode_lang_source zcode_lang_source--mh1 language-bash"><span class="token function">curl</span> -v --compressed <span class="token string">"https://brightdata.com/api/serp/get_result?customer=username&zone=ZONE&response_id=<span class="token variable">${RESPONSE_ID}</span>"</span> -H <span class="token string">"Authorization: Bearer &lt;API_TOKEN&gt;"</span></code></pre>
</div>
</div>
</div>
</div>
<p>You can adjust your zone async settings on <a href="https://brightdata.com/cp/zones?id=username" target="_blank" rel="nofollow noopener">zones page</a>.<br />
Optional settings:<br />
<b>Result lifetime (days)</b> &#8211; number of days to keep results<br />
<b>Web Hook URL</b> &#8211; address to deliver results<br />
<b>Web Hook Request Method</b> &#8211; HTTP method to use to deliver response, GET or POST are optional</p>
</div>
</div>
</div>
</div>
</div>
<hr />
<h4>Resource,</h4>
<ul>
<li><a href="https://www.bestproxyreviews.com/luminati/" target="_blank" rel="noopener">https://www.bestproxyreviews.com/luminati/</a></li>
<li><a href="https://brightdata.com/cp/serp_api/api/google" target="_blank" rel="nofollow noopener">https://brightdata.com/cp/serp_api/playground/google</a></li>
</ul>
<hr />
<blockquote><p><strong>Disclaimer</strong>: This part of the content is mainly from the merchant. If the merchant does not want it to be displayed on my website, please <a href="https://www.proxysp.com/contact-us/">contact us</a> to delete your content.</p></blockquote>
]]></content:encoded>
					
					<wfw:commentRss>https://proxysp.com/how-to-use-bright-data-api/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">8710</post-id>	</item>
		<item>
		<title>How to Use Free ProxyScrape API</title>
		<link>https://proxysp.com/free-proxyscrape-api/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=free-proxyscrape-api</link>
					<comments>https://proxysp.com/free-proxyscrape-api/#respond</comments>
		
		<dc:creator><![CDATA[proxysp]]></dc:creator>
		<pubDate>Thu, 01 Jan 1970 00:00:00 +0000</pubDate>
				<category><![CDATA[APIs]]></category>
		<category><![CDATA[Manuals]]></category>
		<guid isPermaLink="false">https://www.proxysp.com/?p=8485</guid>

					<description><![CDATA[Do you know how to use free ProxyScrape API? This article will give you the detailed guide. This API is for our free proxy list and &#8230;<p class="read-more"> <a class="ast-button" href="https://proxysp.com/free-proxyscrape-api/"> <span class="screen-reader-text">How to Use Free ProxyScrape API</span> Read More &#187;</a></p>]]></description>
										<content:encoded><![CDATA[<blockquote><p>Do you know how to use free ProxyScrape API? This article will give you the detailed guide.</p></blockquote>
<p>This API is for our free proxy list and the results returned by it can be used anywhere free of charge.</p>
<h2>Get proxy list</h2>
<pre>https://api.proxyscrape.com/v2/?request=displayproxies&protocol=http&timeout=10000&country=all&ssl=all&anonymity=all</pre>
<div>
<div><strong>Sample codes,</strong></div>
<div></div>
<div>
<h3>C#</h3>
<pre>var client = new RestClient("https://api.proxyscrape.com/v2/?request=displayproxies&protocol=http&timeout=10000&country=all&ssl=all&anonymity=all"); client.Timeout = -1; var request = new RestRequest(Method.GET); IRestResponse response = client.Execute(request); Console.WriteLine(response.Content);</pre>
<h3>CURL</h3>
<pre>curl --location --request GET 'https://api.proxyscrape.com/v2/?request=displayproxies&protocol=http&timeout=10000&country=all&ssl=all&anonymity=all'</pre>
<h3>Dart &#8211; Http</h3>
<pre>var request = http.Request('GET', Uri.parse('https://api.proxyscrape.com/v2/?request=displayproxies&protocol=http&timeout=10000&country=all&ssl=all&anonymity=all')); http.StreamedResponse response = await request.send(); if (response.statusCode == 200) { print(await response.stream.bytesToString()); } else { print(response.reasonPhrase); }</pre>
<h3>Go &#8211; Native</h3>
<pre>package main import ( "fmt" "net/http" "io/ioutil" ) func main() { url := "https://api.proxyscrape.com/v2/?request=displayproxies&protocol=http&timeout=10000&country=all&ssl=all&anonymity=all" method := "GET" client := &http.Client { } req, err := http.NewRequest(method, url, nil) if err != nil { fmt.Println(err) return } res, err := client.Do(req) if err != nil { fmt.Println(err) return } defer res.Body.Close() body, err := ioutil.ReadAll(res.Body) if err != nil { fmt.Println(err) return } fmt.Println(string(body)) }</pre>
<h3>HTTP</h3>
<pre>GET /v2/?request=displayproxies&protocol=http&timeout=10000&country=all&ssl=all&anonymity=all HTTP/1.1 Host: api.proxyscrape.com</pre>
<h3>java okhttp</h3>
<pre>OkHttpClient client = new OkHttpClient().newBuilder() .build(); Request request = new Request.Builder() .url("https://api.proxyscrape.com/v2/?request=displayproxies&protocol=http&timeout=10000&country=all&ssl=all&anonymity=all") .method("GET", null) .build(); Response response = client.newCall(request).execute();</pre>
</div>
</div>
<h3>JavaScript &#8211; Fetch</h3>
<pre>var requestOptions = { method: 'GET', redirect: 'follow' }; fetch("https://api.proxyscrape.com/v2/?request=displayproxies&protocol=http&timeout=10000&country=all&ssl=all&anonymity=all", requestOptions) .then(response =&gt; response.text()) .then(result =&gt; console.log(result)) .catch(error =&gt; console.log('error', error));</pre>
<h3>JavaScript &#8211; jQuery</h3>
<pre>var settings = { "url": "https://api.proxyscrape.com/v2/?request=displayproxies&protocol=http&timeout=10000&country=all&ssl=all&anonymity=all", "method": "GET", "timeout": 0, }; $.ajax(settings).done(function (response) { console.log(response); });</pre>
<h3>JavaScript &#8211; XHR</h3>
<pre> var xhr = new XMLHttpRequest(); xhr.withCredentials = true; xhr.addEventListener("readystatechange", function() { if(this.readyState === 4) { console.log(this.responseText); } }); xhr.open("GET", "https://api.proxyscrape.com/v2/?request=displayproxies&protocol=http&timeout=10000&country=all&ssl=all&anonymity=all"); xhr.send();</pre>
<h3>C &#8211; libcurl</h3>
<pre>CURL *curl; CURLcode res; curl = curl_easy_init(); if(curl) { curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "GET"); curl_easy_setopt(curl, CURLOPT_URL, "https://api.proxyscrape.com/v2/?request=displayproxies&protocol=http&timeout=10000&country=all&ssl=all&anonymity=all"); curl_easy_setopt(curl, CURLOPT_FOLLOWLOCATION, 1L); curl_easy_setopt(curl, CURLOPT_DEFAULT_PROTOCOL, "https"); struct curl_slist *headers = NULL; curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers); res = curl_easy_perform(curl); } curl_easy_cleanup(curl);</pre>
<h3>NodeJs &#8211; Axios</h3>
<pre>var axios = require('axios'); var config = { method: 'get', url: 'https://api.proxyscrape.com/v2/?request=displayproxies&protocol=http&timeout=10000&country=all&ssl=all&anonymity=all', headers: { } }; axios(config) .then(function (response) { console.log(JSON.stringify(response.data)); }) .catch(function (error) { console.log(error); });</pre>
<div class="styles__LanguageDropdownContainer-a58kfo-12 jvdkTJ">
<div class="styles__DropDownContainer-a58kfo-0 htYUoE" tabindex="-1">
<div class="styles__DropdownSelectorContainer-a58kfo-11 cvEhHU">
<div class="styles__DropDownHeader-a58kfo-1 fpZSxZ">
<h3 class="styles__DropDownValue-a58kfo-3 dUOehM">NodeJs &#8211; Native</h3>
<pre>var https = require('follow-redirects').https; var fs = require('fs'); var options = { 'method': 'GET', 'hostname': 'api.proxyscrape.com', 'path': '/v2/?request=displayproxies&protocol=http&timeout=10000&country=all&ssl=all&anonymity=all', 'headers': { }, 'maxRedirects': 20 }; var req = https.request(options, function (res) { var chunks = []; res.on("data", function (chunk) { chunks.push(chunk); }); res.on("end", function (chunk) { var body = Buffer.concat(chunks); console.log(body.toString()); }); res.on("error", function (error) { console.error(error); }); }); req.end();</pre>
<div></div>
</div>
<h3>DNodeJs &#8211; Request</h3>
</div>
</div>
</div>
<pre>var request = require('request'); var options = { 'method': 'GET', 'url': 'https://api.proxyscrape.com/v2/?request=displayproxies&protocol=http&timeout=10000&country=all&ssl=all&anonymity=all', 'headers': { } }; request(options, function (error, response) { if (error) throw new Error(error); console.log(response.body); });</pre>
<div></div>
<h3>PHP &#8211; cURL</h3>
<pre>&lt;?php $curl = curl_init(); curl_setopt_array($curl, array( CURLOPT_URL =&gt; 'https://api.proxyscrape.com/v2/?request=displayproxies&protocol=http&timeout=10000&country=all&ssl=all&anonymity=all', CURLOPT_RETURNTRANSFER =&gt; true, CURLOPT_ENCODING =&gt; '', CURLOPT_MAXREDIRS =&gt; 10, CURLOPT_TIMEOUT =&gt; 0, CURLOPT_FOLLOWLOCATION =&gt; true, CURLOPT_HTTP_VERSION =&gt; CURL_HTTP_VERSION_1_1, CURLOPT_CUSTOMREQUEST =&gt; 'GET', )); $response = curl_exec($curl); curl_close($curl); echo $response;</pre>
<div></div>
<h3>Python &#8211; http.client</h3>
<pre>import http.client conn = http.client.HTTPSConnection("api.proxyscrape.com") payload = '' headers = {} conn.request("GET", "/v2/?request=displayproxies&protocol=http&timeout=10000&country=all&ssl=all&anonymity=all", payload, headers) res = conn.getresponse() data = res.read() print(data.decode("utf-8"))</pre>
<div></div>
<h3>Python &#8211; Requests</h3>
<pre>import requests url = "https://api.proxyscrape.com/v2/?request=displayproxies&protocol=http&timeout=10000&country=all&ssl=all&anonymity=all" payload={} headers = {} response = requests.request("GET", url, headers=headers, data=payload) print(response.text)</pre>
<div></div>
<h3>Ruby &#8211; Net::HTTP</h3>
<pre>require "uri" require "net/http" url = URI("https://api.proxyscrape.com/v2/?request=displayproxies&protocol=http&timeout=10000&country=all&ssl=all&anonymity=all") https = Net::HTTP.new(url.host, url.port) https.use_ssl = true request = Net::HTTP::Get.new(url) response = https.request(request) puts response.read_body</pre>
<div></div>
<h3>Shell &#8211; Httpie</h3>
<pre>http --follow --timeout 3600 GET 'https://api.proxyscrape.com/v2/?request=displayproxies&protocol=http&timeout=10000&country=all&ssl=all&anonymity=all'</pre>
<div></div>
<h3>Shell &#8211; get</h3>
<pre>wget --no-check-certificate --quiet \ --method GET \ --timeout=0 \ --header '' \ 'https://api.proxyscrape.com/v2/?request=displayproxies&protocol=http&timeout=10000&country=all&ssl=all&anonymity=all'</pre>
<p>&nbsp;</p>
<h3>Swift &#8211; URLSession</h3>
<pre>import Foundation #if canImport(FoundationNetworking) import FoundationNetworking #endif var semaphore = DispatchSemaphore (value: 0) var request = URLRequest(url: URL(string: "https://api.proxyscrape.com/v2/?request=displayproxies&protocol=http&timeout=10000&country=all&ssl=all&anonymity=all")!,timeoutInterval: Double.infinity) request.httpMethod = "GET" let task = URLSession.shared.dataTask(with: request) { data, response, error in guard let data = data else { print(String(describing: error)) semaphore.signal() return } print(String(data: data, encoding: .utf8)!) semaphore.signal() } task.resume() semaphore.wait()</pre>
<div></div>
<div>
<div>PARAMS</div>
<div><div class="su-table su-table-responsive su-table-alternate su-table-fixed"></div>
<div>
<table width="298">
<tbody>
<tr>
<td style="font-weight: 400;" width="72">request</td>
<td style="font-weight: 400;" width="226">displayproxies<br />
Define whether the proxies should download or display in the browser. Possible values:</p>
<ul>
<li>displayproxies: display the proxies in the browser</li>
<li>getproxies: download the proxies</li>
</ul>
</td>
</tr>
<tr>
<td style="font-weight: 400;" width="72">protocol</td>
<td style="font-weight: 400;" width="226">http<br />
Protocol of the proxies that should be downloaded. Possible values:</p>
<ul>
<li>http</li>
<li>socks4</li>
<li>socks5</li>
<li>all</li>
</ul>
<p>If you want to download two protocols at once, the values can be separated by a comma, E.G., protocol=socks4,socks5<br />
When this parameter is not defined, it will default to all.</td>
</tr>
<tr>
<td style="font-weight: 400;" width="72">timeout</td>
<td style="font-weight: 400;" width="226">10000<br />
The maximum timeout of the proxies that should be downloaded in miliseconds.</td>
</tr>
<tr>
<td style="font-weight: 400;" width="72">country</td>
<td style="font-weight: 400;" width="226">all<br />
The country parameter can be any Alpha 2 ISO country code or &#8216;all'. When no country is defined the country will be automatically set to &#8216;all'. You can also use multiple countries in 1 request by separating them by a comma.</td>
</tr>
<tr>
<td style="font-weight: 400;" width="72">ssl</td>
<td style="font-weight: 400;" width="226">all<br />
Should the proxies support SSL (HTTPS)? This parameter is only for if you download HTTP proxies.</td>
</tr>
<tr>
<td style="font-weight: 400;" width="72">anonymity</td>
<td style="font-weight: 400;" width="226">all<br />
Define which anonymity level the proxies should have:</p>
<ul>
<li>elite</li>
<li>anonymous</li>
<li>transparent</li>
<li>all</li>
</ul>
<p>When no anonymity level is defined, it will default to &#8216;all'. You can also use multiple anonymity levels in 1 request by separating them by a comma.<br />
This parameter only applies to HTTP(s) proxies.</td>
</tr>
</tbody>
</table>
</div>
</div>
</div>
<div class="styles__ExampleTitle-sc-1gk0rxh-1 coCuLw">Example Request:</div>
<div>
<pre class="language-javascript"><code class="language-javascript"><span class="token keyword">var</span> request <span class="token operator">=</span> http<span class="token punctuation">.</span><span class="token function">Request</span><span class="token punctuation">(</span><span class="token string">'GET'</span><span class="token punctuation">,</span> Uri<span class="token punctuation">.</span><span class="token function">parse</span><span class="token punctuation">(</span><span class="token string">'https://api.proxyscrape.com/v2/?request=displayproxies&protocol=http&timeout=10000&country=all&ssl=all&anonymity=all'</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">;</span>


http<span class="token punctuation">.</span>StreamedResponse response <span class="token operator">=</span> <span class="token keyword">await</span> request<span class="token punctuation">.</span><span class="token function">send</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span>

<span class="token keyword">if</span> <span class="token punctuation">(</span>response<span class="token punctuation">.</span>statusCode <span class="token operator">==</span> <span class="token number">200</span><span class="token punctuation">)</span> <span class="token punctuation">{</span>
  <span class="token function">print</span><span class="token punctuation">(</span><span class="token keyword">await</span> response<span class="token punctuation">.</span>stream<span class="token punctuation">.</span><span class="token function">bytesToString</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
<span class="token punctuation">}</span>
<span class="token keyword">else</span> <span class="token punctuation">{</span>
  <span class="token function">print</span><span class="token punctuation">(</span>response<span class="token punctuation">.</span>reasonPhrase<span class="token punctuation">)</span><span class="token punctuation">;</span>
<span class="token punctuation">}</span></code></pre>
</div>
<hr />
<h2>Get proxy list details</h2>
<pre>https://api.proxyscrape.com/v2/?request=proxyinfo</pre>
<div><span style="font-size: 16px;">This API endpoint will return information of the available proxies such as:</span></div>
<div>
<ul>
<li>Amount of available proxies</li>
<li>Time since last proxy list update</li>
<li>Available countries</li>
<li>Organizations the proxies are related to</li>
<li>Ports of the proxies</li>
</ul>
<p>This API end-point also supports all parameters described in &#8220;Get proxy list.&#8221;</p>
<p>PARAMS</p>
<div class="su-table su-table-responsive su-table-alternate su-table-fixed">
<table width="298">
<tbody>
<tr>
<td style="font-weight: 400;" width="72">request</td>
<td style="font-weight: 400;" width="226">proxyinfo</td>
</tr>
<tr>
<td style="font-weight: 400;" width="72">simplified</td>
<td style="font-weight: 400;" width="226">true<br />
Use this parameter if you only want to receive the amount of available proxies.</td>
</tr>
</tbody>
</table>
</div>
<div class="styles__ExampleTitle-sc-1gk0rxh-1 coCuLw">Example Request</div>
<div>
<pre class="language-javascript"><code class="language-javascript"><span class="token keyword">var</span> request <span class="token operator">=</span> http<span class="token punctuation">.</span><span class="token function">Request</span><span class="token punctuation">(</span><span class="token string">'GET'</span><span class="token punctuation">,</span> Uri<span class="token punctuation">.</span><span class="token function">parse</span><span class="token punctuation">(</span><span class="token string">'https://api.proxyscrape.com/v2/?request=proxyinfo'</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">;</span>


http<span class="token punctuation">.</span>StreamedResponse response <span class="token operator">=</span> <span class="token keyword">await</span> request<span class="token punctuation">.</span><span class="token function">send</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span>

<span class="token keyword">if</span> <span class="token punctuation">(</span>response<span class="token punctuation">.</span>statusCode <span class="token operator">==</span> <span class="token number">200</span><span class="token punctuation">)</span> <span class="token punctuation">{</span>
  <span class="token function">print</span><span class="token punctuation">(</span><span class="token keyword">await</span> response<span class="token punctuation">.</span>stream<span class="token punctuation">.</span><span class="token function">bytesToString</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
<span class="token punctuation">}</span>
<span class="token keyword">else</span> <span class="token punctuation">{</span>
  <span class="token function">print</span><span class="token punctuation">(</span>response<span class="token punctuation">.</span>reasonPhrase<span class="token punctuation">)</span><span class="token punctuation">;</span>
<span class="token punctuation">}</span></code></pre>
</div>
</div>
<hr />
<h4 id="references" class="ftwp-heading">References,</h4>
<ul>
<li><a href="https://docs.proxyscrape.com/#74a576d0-6201-494b-af94-e8aaf44b9c46" target="_blank" rel="nofollow noopener">https://docs.proxyscrape.com/#74a576d0-6201-494b-af94-e8aaf44b9c46</a></li>
</ul>
<hr />
<blockquote><p><strong>Disclaimer</strong>: This part of the content is mainly from the merchant. If the merchant does not want it to be displayed on my website, please <a href="https://www.proxysp.com/contact-us/">contact us</a> to delete your content.</p></blockquote>
]]></content:encoded>
					
					<wfw:commentRss>https://proxysp.com/free-proxyscrape-api/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">8485</post-id>	</item>
		<item>
		<title>How to Use Baidu Real-Time Crawler [Part 4]: Oxylabs Real-Time Crawler for Baidu</title>
		<link>https://proxysp.com/oxylabs-baidu-real-time-crawler/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=oxylabs-baidu-real-time-crawler</link>
					<comments>https://proxysp.com/oxylabs-baidu-real-time-crawler/#respond</comments>
		
		<dc:creator><![CDATA[admin]]></dc:creator>
		<pubDate>Thu, 01 Jan 1970 00:00:00 +0000</pubDate>
				<category><![CDATA[How to Use OxyLabs Proxy (OxyLabs User Manual Navigation)]]></category>
		<guid isPermaLink="false">https://www.proxysp.com/?p=7635</guid>

					<description><![CDATA[Do you know how to use OxyLabs Real-time Crawler for Baidu? This is the most comprehensive introduction from OxyLabs official. Quick Start Real-Time Crawler is built &#8230;<p class="read-more"> <a class="ast-button" href="https://proxysp.com/oxylabs-baidu-real-time-crawler/"> <span class="screen-reader-text">How to Use Baidu Real-Time Crawler [Part 4]: Oxylabs Real-Time Crawler for Baidu</span> Read More &#187;</a></p>]]></description>
										<content:encoded><![CDATA[<blockquote><p>Do you know how to use OxyLabs Real-time Crawler for Baidu? This is the most comprehensive introduction from OxyLabs official.</p></blockquote>
<h2 id="quick-start">Quick Start</h2>
<p>Real-Time Crawler is built for heavy-duty data retrieval operations. You can use Real-Time Crawler to access various Baidu pages. It enables effortless web data extraction from search engines without any delays or errors.</p>
<p>Real-Time Crawler for Baidu uses <a class="custom_link" href="https://en.wikipedia.org/wiki/Basic_access_authentication" target="_blank" rel="nofollow noopener">basic HTTP authentication</a> that requires sending username and password.</p>
<p>This is by far the fastest way to start using Real-Time Crawler for Baidu. You will send a query <code>adidas</code> to <code>baidu_search</code> using <a href="#realtime">Realtime</a> integration method. Don't forget to replace <code>USERNAME</code> and <code>PASSWORD</code> with your proxy user credentials.</p>
<pre>curl --user "USERNAME:PASSWORD" 'https://realtime.oxylabs.io/v1/queries' -H "Content-Type: application/json" -d '{"source": "baidu_search", "domain": "com", "query": "adidas"}'
</pre>
<p>If you have any questions not covered by this documentation, please contact your account manager or our support staff at <a class="custom_link" href="mailto:support@oxylabs.io" target="_blank" rel="nofollow noopener">support@oxylabs.io</a>.</p>
<hr />
<h2 id="integration-methods">Integration Methods</h2>
<p>Real-Time Crawler for Baidu supports three integration methods which have their unique benefits:</p>
<ul>
<li><a href="#push-pull">Push-Pull</a>. Using this method it is now required to mainain an active connection with our endpoint to retrieve the data. Upon making a request, our system is able to automatically ping users server when the job is done (see <a href="#callback">Callback</a>). This method saves computing resources and can be scaled easily.</li>
<li><a href="#realtime">Realtime</a>. The method requires user to maintain an active connection with our endpoint in order to get the results successfully when the job is completed. This method can be implemented into one service while Push-Pull method is a two step process.</li>
<li><a href="#superapi">SuperAPI</a>. This method is very similar to Realtime but instead posting data to our endpoint, user can use HTML Cralwer as a proxy. To retrieve the data, user must set up a proxy endpoint and make GET request to a desired URL. Additional parameters must be added using headers.</li>
</ul>
<p>Our recommended data extraction method is <a href="#push-pull">Push-Pull</a>.</p>
<hr />
<h3 id="push-pull">Push-Pull</h3>
<p>This is the most simple yet the most reliable and recommended data delivery method. In Push-Pull scenario you send us a query, we return you job <code>id</code>, and once the job is done you can use that <code>id</code> to retrieve content from <code>/results</code> endpoint. You can check job completion status yourself, or you can set up a simple listener that is able to accept POST queries.</p>
<p>This way we will send you a callback message once the job is ready to be retrieved. In this particular example the results will be automatically <a href="#upload-to-storage">uploaded to your S3 bucket</a> named <code>YOUR_BUCKET_NAME</code>.</p>
<hr />
<h4 id="single-query"><strong>Single Query</strong></h4>
<p>The following endpoint will handle single queries for one keyword or URL. The API will return a confirmation message containing job information, including job <code>id</code>. You can check job completion status using that <code>id</code>, or you can ask us to ping your callback endpoint once the scraping task is finished by adding <code>callback_url</code> in the query.</p>
<pre>POST https://data.oxylabs.io/v1/queries
</pre>
<p>You need to post query parameters as data in JSON body.</p>
<pre>curl --user user:pass1 'https://data.oxylabs.io/v1/queries' -H "Content-Type: application/json" 
 -d '{"source": "baidu_search", "domain": "com", "query": "adidas", "callback_url": "https://your.callback.url", "storage_type": "s3", "storage_url": "YOUR_BUCKET_NAME"}'
</pre>
<p>The API will respond with query information in JSON format, by printing it in response body, similar to this:</p>
<pre>{
  "callback_url": "https://your.callback.url",
  "client_id": 5,
  "created_at": "2019-10-01 00:00:01",
  "domain": "com",
  "geo_location": null,
  "id": "12345678900987654321",
  "limit": 10,
  "locale": null,
  "pages": 1,
  "render": null,
  "query": "adidas",
  "source": "baidu_search",
  "start_page": 1,
  "status": "pending",
  "storage_type": "s3",
  "storage_url": "YOUR_BUCKET_NAME/12345678900987654321.json",
  "subdomain": "www",
  "updated_at": "2019-10-01 00:00:01",
  "user_agent_type": "desktop",
  "_links": [
    {
      "rel": "self",
      "href": "http://data.oxylabs.io/v1/queries/12345678900987654321",
      "method": "GET"
    },
    {
      "rel": "results",
      "href": "http://data.oxylabs.io/v1/queries/12345678900987654321/results",
      "method": "GET"
    }
  ]
}
</pre>
<hr />
<h4 id="check-job-status"><strong>Check Job Status</strong></h4>
<p>If your query had <code>callback_url</code>, we will send you a message containing link to content once the scraping task is done. However, if there was no <code>callback_url</code> in the query, you will need to check job status yourself. For that you need to use the URL in <code>href</code> under <code>rel</code>:<code>self</code> in the response message you received after submitting your query to our API. It should look similar to this: <code>http://data.oxylabs.io/v1/queries/12345678900987654321</code>.</p>
<pre>GET https://data.oxylabs.io/v1/queries/{id}
</pre>
<p>Querying this link will return job information, including its <code>status</code>. There are 3 possible <code>status</code> values:</p>
<div class="su-table su-table-responsive su-table-alternate">
<table>
<tbody>
<tr>
<td><code>pending</code></td>
<td>The job is still in the queue and has not been completed.</td>
</tr>
<tr>
<td><code>done</code></td>
<td>The job is completed, you may retrieve the result by querying the URL in <code>href</code> under <code>rel</code>:<code>results</code> : <code>http://data.oxylabs.io/v1/queries/12345678900987654321/results</code></td>
</tr>
<tr>
<td><code>faulted</code></td>
<td>There was an issue with the job and we couldn't complete it, most likely due to a server error on the target site's side.</td>
</tr>
</tbody>
</table>
</div>
<pre>curl --user user:pass1 'http://data.oxylabs.io/v1/queries/12345678900987654321'
</pre>
<p>The API will respond with query information in JSON format, by printing it in response body. Notice that job <code>status</code> has been changed to <code>done</code>. You can now retrieve content by querying <code>http://data.oxylabs.io/v1/queries/12345678900987654321/results</code>.</p>
<p>You can also see that the task has been <code>updated_at</code> <code>2019-10-01 00:00:15</code> &#8211; the query took 14 seconds to complete.</p>
<pre>{
  "client_id": 5,
  "created_at": "2019-10-01 00:00:01",
  "domain": "com",
  "geo_location": null,
  "id": "12345678900987654321",
  "limit": 10,
  "locale": null,
  "pages": 1,
  "render": null,
  "query": "adidas",
  "source": "baidu_search",
  "start_page": 1,
  "status": "done",
  "subdomain": "www",
  "updated_at": "2019-10-01 00:00:15",
  "user_agent_type": "desktop",
  "_links": [
    {
      "rel": "self",
      "href": "http://data.oxylabs.io/v1/queries/12345678900987654321",
      "method": "GET"
    },
    {
      "rel": "results",
      "href": "http://data.oxylabs.io/v1/queries/12345678900987654321/results",
      "method": "GET"
    }
  ]
}
</pre>
<hr />
<h4 id="retrieve-job-content"><strong>Retrieve Job Content</strong></h4>
<p>Once you know the job is ready to retrieved either by checking its status or receiving a callback from us, you can GET it using the URL in <code>href</code> under <code>rel</code>:<code>results</code> in either our initial response or in callback message. It should look similar to this: <code>http://data.oxylabs.io/v1/queries/12345678900987654321/results</code>.</p>
<pre>GET https://data.oxylabs.io/v1/queries/{id}/results
</pre>
<p>The results can be automatically retrieved without periodically checking job status by setting up <a href="#callback">Callback</a> service. User needs to specfy the IP or domain of the server where the Callback service is running. When our system completes a job, it will send a message to the provided IP or domain and the Callback service will download the results as described in the <a href="#callback">Callback implementation example</a>.</p>
<pre>curl --user user:pass1 'http://data.oxylabs.io/v1/queries/12345678900987654321/results'
</pre>
<p>The API will return job content:</p>
<pre>{
  "results": [
    {
      "content": "&lt;!doctype html&gt;
        CONTENT      
      ",
      "created_at": "2019-10-01 00:00:01",
      "updated_at": "2019-10-01 00:00:15",
      "page": 1,
      "url": "https://www.baidu.com/search?q=adidas&hl=en&gl=US",
      "job_id": "12345678900987654321",
      "status_code": 200
    }
  ]
}
</pre>
<hr />
<h4 id="callback"><strong>Callback</strong></h4>
<p>A callback is a <code>POST</code> request we send to your machine, informing that the data extraction task is completed and providing URL to download scraped content. This means that you no longer need to <a href="#check-job-status">check job status</a> manually. Once the data is here, we will let you know, and all you need to do now is <a href="#retrieve-job-content">retrieve it</a>.</p>
<pre># Please see code samples in Python and PHP.
</pre>
<p>Sample callback output</p>
<pre>{  
   "created_at":"2019-10-01 00:00:01",
   "updated_at":"2019-10-01 00:00:15",
   "locale":null,
   "client_id":163,
   "user_agent_type":"desktop",
   "source":"baidu_search",
   "pages":1,
   "subdomain":"www",
   "status":"done",
   "start_page":1,
   "render":null,
   "priority":0,
   "ttl":0,
   "origin":"api",
   "persist":true,
   "id":"12345678900987654321",
   "callback_url":"http://your.callback.url/",
   "query":"adidas",
   "domain":"com",
   "limit":10,
   "geo_location":null,
   {...}
   "_links":[
      {  
         "href":"https://data.oxylabs.io/v1/queries/12345678900987654321",
         "method":"GET",
         "rel":"self"
      },
      {  
         "href":"https://data.oxylabs.io/v1/queries/12345678900987654321/results",
         "method":"GET",
         "rel":"results"
      }
   ],
}
</pre>
<hr />
<h4 id="batch-query"><strong>Batch Query</strong></h4>
<p>Real-Time Crawler also supports executing multiple keywords, up to 1,000 keywords with each batch. The following endpoint will submit multiple keywords to the extraction queue.</p>
<pre>POST https://data.oxylabs.io/v1/queries/batch
</pre>
<p>You need to post query parameters as data in JSON body.</p>
<p>The system will handle every keyword as a separate request. If you provided callback URL, you will get a separate call for each keyword. Otherwise, our initial response will contain job <code>id</code>s for all keywords. For example, if you sent 50 keywords, we will return 50 unique job <code>id</code>s.</p>
<p>Important! <code>query</code> is the only parameter that can have multiple values. All other parameters are the same for that batch query.</p>
<pre>curl --user user:pass1 'https://data.oxylabs.io/v1/queries/batch' -H 'Content-Type: application/json'
 -d '@keywords.json'
</pre>
<p><code>keywords.json</code> content:</p>
<pre>{  
   "query":[  
      "adidas",
      "nike",
      "reebok"
   ],
   "source": "baidu_search",
   "domain": "com",
   "callback_url": "https://your.callback.url"
}
</pre>
<p>The API will respond with query information in JSON format, by printing it in response body, similar to this:</p>
<pre>{
  "queries": [
    {
      "callback_url": "https://your.callback.url",
      {...}
      "created_at": "2019-10-01 00:00:01",
      "domain": "com",
      "id": "12345678900987654321",
      {...}
      "query": "adidas",
      "source": "baidu_search",
      {...}
          "rel": "results",
          "href": "http://data.oxylabs.io/v1/queries/12345678900987654321/results",
          "method": "GET"
        }
      ]
    },
    {
      "callback_url": "https://your.callback.url",
      {...}
      "created_at": "2019-10-01 00:00:01",
      "domain": "com",
      "id": "12345678901234567890",
      {...}
      "query": "nike",
      "source": "baidu_search",
      {...}
          "rel": "results",
          "href": "http://data.oxylabs.io/v1/queries/12345678901234567890/results",
          "method": "GET"
        }
      ]
    },
    {
      "callback_url": "https://your.callback.url",
      {...}
      "created_at": "2019-10-01 00:00:01",
      "domain": "com",
      "id": "01234567899876543210",
      {...}
      "query": "reebok",
      "source": "baidu_search",
      {...}
          "rel": "results",
          "href": "http://data.oxylabs.io/v1/queries/01234567899876543210/results",
          "method": "GET"
        }
      ]
    }
  ]
}
</pre>
<hr />
<h4 id="get-notifier-ip-address-list"><strong>Get Notifier IP Address List</strong></h4>
<p>You may want to whitelist the IPs sending you callback messages or get the list of these IPs for other purposes. This can be done by <code>GET</code>ing this endpoint: <code>https://data.oxylabs.io/v1/info/callbacker_ips</code>.</p>
<pre>curl --user user:pass1 'https://data.oxylabs.io/v1/info/callbacker_ips'
</pre>
<p>The API will return the list of IPs making callback requests to your system:</p>
<pre>{
    "ips": [
        "x.x.x.x",
        "y.y.y.y"
    ]
}
</pre>
<hr />
<h4 id="upload-to-storage"><strong>Upload to Storage</strong></h4>
<p>By default RTC job results are stored in our databases. This means that you will need to query our results endpoint and retrieve content yourself. Custom storage feature allows you to store results in your own cloud storage. The advantage of this feature is that you don't have to make extra requests in order to fetch results &#8211; everything goes directly to your storage bucket.</p>
<p>We support Amazon S3 and Google Cloud Storage. If you would like to use a different type of storage, please contact your account manager to discuss the feature delivery timeline.</p>
<p id="amazon-s3"><strong>Amazon S3</strong></p>
<p>To get your job results uploaded to your Amazon S3 bucket, please set up access permissions for our service. To do that, go to <code>https://s3.console.aws.amazon.com/ &gt; S3 &gt; Storage &gt; Bucket Name (if don't have one, create new) &gt; Permissions &gt; Bucket Policy</code></p>
<p><img loading="lazy" decoding="async" class="aligncenter size-full wp-image-8268" src="https://www.proxysp.com/wp-content/uploads/2021/09/Oxylabs-Real-Time-Crawler-for-Baidu-Upload-to-Storage.png" alt="Oxylabs Real-Time Crawler for Baidu Upload to Storage" width="485" height="333" srcset="https://proxysp.com/wp-content/uploads/2021/09/Oxylabs-Real-Time-Crawler-for-Baidu-Upload-to-Storage.png 485w, https://proxysp.com/wp-content/uploads/2021/09/Oxylabs-Real-Time-Crawler-for-Baidu-Upload-to-Storage-300x206.png 300w" sizes="(max-width: 485px) 100vw, 485px" /></p>
<p>You can find bucket policy in this <a class="custom_link" href="https://docs.oxylabs.io/resources/s3_bucket_policy.json" target="_blank" rel="noopener">JSON</a> or in code sample area on the right. Don't forget to change bucket name under <code>YOUR_BUCKET_NAME</code>. This policy allows us to write to your bucket, give access to uploaded files to you, and know bucket location.</p>
<p id="google-cloud-storage"><strong>Google Cloud Storage</strong></p>
<p>To get your job results uploaded to your Google Cloud Storage bucket, please set up special permissions for our service. To do that, please create a custom role with the <code>storage.objects.create</code> permission and assign it to the Oxylabs service account email <code>oxyserps-storage@oxyserps-storage.iam.gserviceaccount.com</code>.</p>
<p><img loading="lazy" decoding="async" class="aligncenter size-full wp-image-8270" src="https://www.proxysp.com/wp-content/uploads/2021/09/Oxylabs-Real-Time-Crawler-for-Baidu-Upload-to-Storage1.png" alt="Oxylabs Real-Time Crawler for Baidu Upload to Storage1" width="479" height="310" srcset="https://proxysp.com/wp-content/uploads/2021/09/Oxylabs-Real-Time-Crawler-for-Baidu-Upload-to-Storage1.png 479w, https://proxysp.com/wp-content/uploads/2021/09/Oxylabs-Real-Time-Crawler-for-Baidu-Upload-to-Storage1-300x194.png 300w" sizes="(max-width: 479px) 100vw, 479px" /></p>
<p><img loading="lazy" decoding="async" class="aligncenter size-full wp-image-8269" src="https://www.proxysp.com/wp-content/uploads/2021/09/Oxylabs-Real-Time-Crawler-for-Baidu-Upload-to-Storage2.png" alt="Oxylabs Real-Time Crawler for Baidu Upload to Storage2" width="482" height="670" srcset="https://proxysp.com/wp-content/uploads/2021/09/Oxylabs-Real-Time-Crawler-for-Baidu-Upload-to-Storage2.png 482w, https://proxysp.com/wp-content/uploads/2021/09/Oxylabs-Real-Time-Crawler-for-Baidu-Upload-to-Storage2-216x300.png 216w" sizes="(max-width: 482px) 100vw, 482px" /></p>
<p id="usage"><strong>Usage</strong></p>
<p>To use this feature, please specify two additional parameters in your requests. Learn more <a href="#direct">here</a>.</p>
<p>The upload path looks like this: <code>YOUR_BUCKET_NAME/job_ID.json</code>. You will find job ID in response body that you receive from us after submitting a request. In <a href="#single-query">this example</a> job ID is <code>12345678900987654321</code>.</p>
<hr />
<h3 id="realtime">Realtime</h3>
<p>The data submission is the same as in Push-Pull method, but Realtime case we will return the content on open connection. You send us a query, the connection remains open, we retrieve the content and bring it to you. The endpoint that handles that is this:</p>
<pre>POST https://realtime.oxylabs.io/v1/queries
</pre>
<p>There is a timeout limit of 150 seconds for open connections, therefore in rare cases of heavy load we may not be able to ensure the data gets to you.</p>
<p>You need to post query parameters as data in JSON body. Please see example for more details.</p>
<pre>curl --user user:pass1 'https://realtime.oxylabs.io/v1/queries' -H "Content-Type: application/json" 
 -d '{"source": "baidu_search", "domain": "com", "query": "adidas"}'
</pre>
<p>Example response body that will be returned on open connection:</p>
<pre>{
  "results": [
    {
      "content": "
      CONTENT
      "
      "created_at": "2019-10-01 00:00:01",
      "updated_at": "2019-10-01 00:00:15",
      "id": null,
      "page": 1,
      "url": "https://www.baidu.com/search?q=adidas&hl=en&gl=US",
      "job_id": "12345678900987654321",
      "status_code": 200
    }
  ]
}
</pre>
<hr />
<h3 id="superapi">SuperAPI</h3>
<p>If you ever used regular proxies for data scraping, integrating SuperAPI delivery method will be a breeze. All that needs to be done is to use our entry node as proxy, authorize with Real-Time Crawler credentials, and ignore certificates. In <code>cURL</code> it's <code>-k</code> or <code>--insecure</code>. Your data will reach you on open connection.</p>
<pre>GET realtime.oxylabs.io:60000
</pre>
<p>SuperAPI only supports a handful of parameters since it <strong>only works with <a href="#direct">Direct</a> data source</strong> where full URL is provided. These parameters should be sent as headers. This is a list of accepted parameters:</p>
<div class="su-table su-table-responsive su-table-alternate">
<table>
<tbody>
<tr>
<td><code>X-OxySERPs-User-Agent-Type</code></td>
<td>There is no way to indicate a specific User-Agent, but you can let us know which browser and platform to use. A list of supported User-Agents can be found <a href="#user-agent">here</a>.</td>
</tr>
</tbody>
</table>
</div>
<p>If you need help setting up SuperAPI, drop a line at <a class="custom_link" href="mailto:support@oxylabs.io" target="_blank" rel="nofollow noopener">support@oxylabs.io</a>.</p>
<pre>curl -k -x realtime.oxylabs.io:60000 -U user:pass1 -H "X-OxySERPs-User-Agent-Type: desktop_chrome" "https://www.baidu.com/search?q=adidas"
</pre>
<hr />
<h2 id="data-sources">Data Sources</h2>
<p>There are multiple approaches how to retrieve data from Baidu using Real-Time Crawler. You can give us full URL via <a href="#direct">Direct</a>, or you can specify parameters via specifically built data sources, such as <a href="#search">Search</a>, Shopping Product or Images.</p>
<p>If you are unsure which way to choose, drop us a line at <a class="custom_link" href="mailto:support@oxylabs.io" target="_blank" rel="nofollow noopener">support@oxylabs.io</a> or contact your account manager.</p>
<hr />
<h3 id="direct">Direct</h3>
<p><img loading="lazy" decoding="async" class="size-full wp-image-8272 alignnone" src="https://www.proxysp.com/wp-content/uploads/2021/09/Oxylabs-Real-Time-Crawler-for-Baidu-Direct.png" alt="Oxylabs Real-Time Crawler for Baidu Direct" width="425" height="29" srcset="https://proxysp.com/wp-content/uploads/2021/09/Oxylabs-Real-Time-Crawler-for-Baidu-Direct.png 425w, https://proxysp.com/wp-content/uploads/2021/09/Oxylabs-Real-Time-Crawler-for-Baidu-Direct-300x20.png 300w" sizes="(max-width: 425px) 100vw, 425px" /></p>
<p><code>baidu</code> source is designed to retrieve content of direct URLs of various Baidu pages. This means that instead of sending multiple parameters, you can provide us with a direct URL to required Baidu page. We do not strip any parameters or alter your URLs in any other way.</p>
<p><span class="test">Query parameters</span></p>
<div class="su-table su-table-responsive su-table-alternate">
<table width="216">
<tbody>
<tr>
<td style="font-weight: 400;" width="72"><strong>Parameter</strong></td>
<td style="font-weight: 400;" width="72"><strong>Description</strong></td>
<td style="font-weight: 400;" width="72"><strong>Default Value</strong></td>
</tr>
<tr>
<td style="font-weight: 400;" width="72">source</td>
<td style="font-weight: 400;" width="72">Data source</td>
<td style="font-weight: 400;" width="72">baidu</td>
</tr>
<tr>
<td style="font-weight: 400;" width="72">url</td>
<td style="font-weight: 400;" width="72">Direct URL (link) to Baidu page</td>
<td style="font-weight: 400;" width="72">&#8211;</td>
</tr>
<tr>
<td style="font-weight: 400;" width="72">user_agent_type</td>
<td style="font-weight: 400;" width="72">Device type and browser. The full list can be found<a href="#user-agent"> here.</a></td>
<td style="font-weight: 400;" width="72">desktop</td>
</tr>
<tr>
<td style="font-weight: 400;" width="72">callback_url</td>
<td style="font-weight: 400;" width="72">URL to your callback endpoint</td>
<td style="font-weight: 400;" width="72">&#8211;</td>
</tr>
<tr>
<td style="font-weight: 400;" width="72">storage_type</td>
<td style="font-weight: 400;" width="72">Storage service provider. We support Amazon S3 and Google Cloud Storage. The storage_type parameter values for these storage providers are, correspondingly, s3 and gcs. The full implementation can be found on the <a href="#upload-to-storage">Upload to Storage </a>page. This feature only works via Push-Pull (Callback) method.</td>
<td style="font-weight: 400;" width="72">&#8211;</td>
</tr>
<tr>
<td style="font-weight: 400;" width="72">storage_url</td>
<td style="font-weight: 400;" width="72">Your storage bucket name. Only works via Push-Pull (Callback) method.</td>
<td style="font-weight: 400;" width="72">&#8211;</td>
</tr>
<tr>
<td style="font-weight: 400;" colspan="3" width="216">   &#8211; required parameter</td>
</tr>
</tbody>
</table>
</div>
<p>In this example the API will retrieve Baidu search for keyword <code>adidas</code> in Push-Pull method:</p>
<pre>curl --user user:pass1 'https://data.oxylabs.io/v1/queries' -H "Content-Type: application/json"
 -d '{"source": "baidu", "url": "http://www.baidu.com/s?ie=utf-8&f=8&rsv_bp=1&rsv_idx=1&ch=&tn=baidu&bar=&wd=adidas"}'
</pre>
<p>Here is the same example in Realtime:</p>
<pre>curl --user user:pass1 'https://realtime.oxylabs.io/v1/queries' -H "Content-Type: application/json"
 -d '{"source": "baidu", "url": "http://www.baidu.com/s?ie=utf-8&f=8&rsv_bp=1&rsv_idx=1&ch=&tn=baidu&bar=&wd=adidas"}'
</pre>
<p>And via SuperAPI:</p>
<pre>curl -k -x realtime.oxylabs.io:60000 -U user:pass1 "http://www.baidu.com/s?ie=utf-8&f=8&rsv_bp=1&rsv_idx=1&ch=&tn=baidu&bar=&wd=adidas"
</pre>
<hr />
<h3 id="search">Search</h3>
<p><img loading="lazy" decoding="async" class="size-full wp-image-8273 alignnone" src="https://www.proxysp.com/wp-content/uploads/2021/09/Oxylabs-Real-Time-Crawler-for-Baidu-Search.png" alt="Oxylabs Real-Time Crawler for Baidu Search" width="425" height="26" srcset="https://proxysp.com/wp-content/uploads/2021/09/Oxylabs-Real-Time-Crawler-for-Baidu-Search.png 425w, https://proxysp.com/wp-content/uploads/2021/09/Oxylabs-Real-Time-Crawler-for-Baidu-Search-300x18.png 300w" sizes="(max-width: 425px) 100vw, 425px" /></p>
<p><code>baidu_search</code> source is designed to retrieve Baidu Search results (SERP) in HTML format.</p>
<p><span class="test">Query parameters</span></p>
<div class="su-table su-table-responsive su-table-alternate">
<table width="216">
<tbody>
<tr>
<td style="font-weight: 400;" width="72"><strong>Parameter</strong></td>
<td style="font-weight: 400;" width="72"><strong>Description</strong></td>
<td style="font-weight: 400;" width="72"><strong>Default Value</strong></td>
</tr>
<tr>
<td style="font-weight: 400;" width="72">source</td>
<td style="font-weight: 400;" width="72">Data source</td>
<td style="font-weight: 400;" width="72">baidu_search</td>
</tr>
<tr>
<td style="font-weight: 400;" width="72">domain</td>
<td style="font-weight: 400;" width="72">Domain localization</td>
<td style="font-weight: 400;" width="72">com</td>
</tr>
<tr>
<td style="font-weight: 400;" width="72">query</td>
<td style="font-weight: 400;" width="72">UTF-encoded keyword</td>
<td style="font-weight: 400;" width="72">&#8211;</td>
</tr>
<tr>
<td style="font-weight: 400;" width="72">start_page</td>
<td style="font-weight: 400;" width="72">Starting page number</td>
<td style="font-weight: 400;" width="72">1</td>
</tr>
<tr>
<td style="font-weight: 400;" width="72">pages</td>
<td style="font-weight: 400;" width="72">Number of pages to retrieve</td>
<td style="font-weight: 400;" width="72">1</td>
</tr>
<tr>
<td style="font-weight: 400;" width="72">limit</td>
<td style="font-weight: 400;" width="72">Number of results to retrieve in each page</td>
<td style="font-weight: 400;" width="72">10</td>
</tr>
<tr>
<td style="font-weight: 400;" width="72">user_agent_type</td>
<td style="font-weight: 400;" width="72">Device type and browser. The full list can be found<a href="#user-agent"> here.</a></td>
<td style="font-weight: 400;" width="72">desktop</td>
</tr>
<tr>
<td style="font-weight: 400;" width="72">callback_url</td>
<td style="font-weight: 400;" width="72">URL to your callback endpoint</td>
<td style="font-weight: 400;" width="72">&#8211;</td>
</tr>
<tr>
<td style="font-weight: 400;" width="72">storage_type</td>
<td style="font-weight: 400;" width="72">Storage service provider. We support Amazon S3 and Google Cloud Storage. The storage_type parameter values for these storage providers are, correspondingly, s3 and gcs. The full implementation can be found on the <a href="#upload-to-storage">Upload to Storage</a> page. This feature only works via Push-Pull (Callback) method.</td>
<td style="font-weight: 400;" width="72">&#8211;</td>
</tr>
<tr>
<td style="font-weight: 400;" width="72">storage_url</td>
<td style="font-weight: 400;" width="72">Your storage bucket name. Only works via Push-Pull (Callback) method.</td>
<td style="font-weight: 400;" width="72">&#8211;</td>
</tr>
<tr>
<td style="font-weight: 400;" colspan="3" width="216">   &#8211; required parameter</td>
</tr>
</tbody>
</table>
</div>
<p>Real-Time Crawler makes request to baidu.com to retrieve search results pages from number 11 to number 20 for keyword adidas. Real-Time Crawler will post the download URL to raw HTML page output to your.callback.url once the data retrieval task is successfully finished.</p>
<pre>curl --user user:pass1 'https://data.oxylabs.io/v1/queries' -H "Content-Type: application/json"
 -d '{"source": "baidu_search", "domain": "com", "query": "adidas", "start_page": 11, "pages": 10, "callback_url": "https://your.callback.url"}'
</pre>
<p>And here is the same example in Realtime:</p>
<pre>curl --user user:pass1 'https://realtime.oxylabs.io/v1/queries' -H "Content-Type: application/json"
 -d '{"source": "baidu_search", "domain": "com", "query": "adidas", "start_page": 11, "pages": 10, "callback_url": "https://your.callback.url"}'
</pre>
<hr />
<h2 id="parameter-values">Parameter Values</h2>
<h3 id="user-agent">User-Agent</h3>
<p>Download full list of <code>user_agent_type</code> values in JSON <a class="custom_link" href="https://docs.oxylabs.io/resources/user_agent_type.json" target="_blank" rel="noopener">here</a>.</p>
<pre>[
  {
    "user_agent_type": "desktop",
    "description": "Random desktop browser User-Agent"
  },
  {
    "user_agent_type": "desktop_firefox",
    "description": "Random User-Agent of one of the latest versions of desktop Firefox"
  },
  {
    "user_agent_type": "desktop_chrome",
    "description": "Random User-Agent of one of the latest versions of desktop Chrome"
  },
  {
    "user_agent_type": "desktop_opera",
    "description": "Random User-Agent of one of the latest versions of desktop Opera"
  },
  {
    "user_agent_type": "desktop_edge",
    "description": "Random User-Agent of one of the latest versions of desktop Edge"
  },
  {
    "user_agent_type": "desktop_safari",
    "description": "Random User-Agent of one of the latest versions of desktop Safari"
  },
  {
    "user_agent_type": "mobile",
    "description": "Random mobile browser User-Agent"
  },
  {
    "user_agent_type": "mobile_android",
    "description": "Random User-Agent of one of the latest versions of Android browser"
  },
  {
    "user_agent_type": "mobile_ios",
    "description": "Random User-Agent of one of the latest versions of iPhone browser"
  },
  {
    "user_agent_type": "tablet",
    "description": "Random tablet browser User-Agent"
  },
  {
    "user_agent_type": "tablet_android",
    "description": "Random User-Agent of one of the latest versions of Android tablet"
  },
  {
    "user_agent_type": "tablet_ios",
    "description": "Random User-Agent of one of the latest versions of iPad tablet"
  }
]
</pre>
<hr />
<h2 id="account-status">Account Status</h2>
<h3 id="usage-statistics">Usage Statistics</h3>
<p>You can find your usage statistics by querying the following endpoint:</p>
<pre>GET https://data.oxylabs.io/v1/stats
</pre>
<p>By default the API will return all time usage statistics. Adding <code>?group_by=month</code> will return monthly stats, while <code>?group_by=day</code> will return daily numbers.</p>
<p>This query will return all time statistics. You can find your daily and monthly usage by adding either <code>?group_by=day</code> or <code>?group_by=month</code></p>
<pre>curl --user user:pass1 'https://data.oxylabs.io/v1/stats'
</pre>
<p>Sample output:</p>
<pre>{
    "data": {
        "sources": [
            {
                "realtime_results_count": "90",
                "results_count": "10",
                "title": "baidu"
            },
            {
                "realtime_results_count": "19",
                "results_count": "87",
                "title": "baidu_search"
            }
        ]
    },
    "meta": {
        "group_by": null
    }
}
</pre>
<hr />
<h3 id="limits">Limits</h3>
<p>The following endpoint will give your monthly commitment information as well as how much has already been used:</p>
<pre>GET https://data.oxylabs.io/v1/stats/limits
</pre>
<pre>curl --user user:pass1 'https://data.oxylabs.io/v1/stats/limits'
</pre>
<p>Sample output:</p>
<pre>{
    "monthly_requests_commitment": 4500000,
    "used_requests": 985000
}
</pre>
<hr />
<h2 id="response-codes">Response Codes</h2>
<div class="su-table su-table-responsive su-table-alternate">
<table>
<thead>
<tr>
<th>Code</th>
<th>Status</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><code>204</code></td>
<td>No Content</td>
<td>You are trying to retrieve a job that has not been completed yet.</td>
</tr>
<tr>
<td><code>400</code></td>
<td>Multiple error messages</td>
<td>Bad request structure, could be a misspelled parameter or invalid value. Response body will have more specific error message.</td>
</tr>
<tr>
<td><code>401</code></td>
<td>&#8216;Authorization header not provided' / &#8216;Invalid authorization header' / &#8216;Client not found'</td>
<td>Missing authorization header or incorrect login credentials.</td>
</tr>
<tr>
<td><code>403</code></td>
<td>Forbidden</td>
<td>Your account does not have access to this resource.</td>
</tr>
<tr>
<td><code>404</code></td>
<td>Not Found</td>
<td>Job ID you are looking for is no longer available.</td>
</tr>
<tr>
<td><code>429</code></td>
<td>Too many requests</td>
<td>Exceeded rate limit. Please contact your account manager to increase limits.</td>
</tr>
<tr>
<td><code>500</code></td>
<td>Unknown Error</td>
<td>Service unavailable.</td>
</tr>
<tr>
<td><code>524</code></td>
<td>Timeout</td>
<td>Service unavailable.</td>
</tr>
<tr>
<td><code>612</code></td>
<td>Undefined Internal Error</td>
<td>Something went wrong and we failed the job you submitted. You can try again at no extra cost, as we don't charge you for <code>faulted</code> jobs. If that doesn't work, give us a shout.</td>
</tr>
<tr>
<td><code>613</code></td>
<td>Faulted After Too Many Retries</td>
<td>We tried scraping the job you submitted, but gave up after reaching our retry limit. You can try again at no extra cost, as we don't charge you for <code>faulted</code> jobs. If that doesn't work, give us a shout.</td>
</tr>
</tbody>
</table>
</div>
<p>Cloud storage upload response codes:</p>
<div class="su-table su-table-responsive su-table-alternate">
<table>
<thead>
<tr>
<th>Code</th>
<th>Status</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><code>10001</code></td>
<td>Unexpected Exception</td>
<td>Something terribly wrong happened. We probably know about this already and are fixing it. Let us know anyway.</td>
</tr>
<tr>
<td><code>13000</code></td>
<td>Upload Success</td>
<td>All good!</td>
</tr>
<tr>
<td><code>13001</code></td>
<td>Upload Failed</td>
<td>We couldn't upload job results your bucket.</td>
</tr>
<tr>
<td><code>13102</code></td>
<td>No Such Path</td>
<td>We couldn't find a bucket with such name. Please double check.</td>
</tr>
<tr>
<td><code>13103</code></td>
<td>Access Denied</td>
<td>Bucket doesn't have required permissions. To find out how to give us required access, see <a href="#upload-to-storage">here</a>.</td>
</tr>
</tbody>
</table>
</div>
<hr />
<h4>References</h4>
<ul>
<li><a href="https://docs.oxylabs.io/rtc/source/baidu/index.html" target="_blank" rel="nofollow noopener">https://docs.oxylabs.io/rtc/source/baidu/index.html</a></li>
<li><a href="https://docs.oxylabs.io/rtc/index.html" target="_blank" rel="nofollow noopener">https://docs.oxylabs.io/rtc/index.html</a></li>
</ul>
<p>&nbsp;</p>
<hr />
<blockquote><p><strong>Disclaimer:</strong> This part of the content is mainly from the merchant. If the merchant does not want it to be displayed on my website, please <a href="https://www.proxysp.com/contact-us/">contact us</a> to delete your content.</p></blockquote>
]]></content:encoded>
					
					<wfw:commentRss>https://proxysp.com/oxylabs-baidu-real-time-crawler/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">7635</post-id>	</item>
		<item>
		<title>How to Use HTML Crawler API [Part 5]: OxyLabs Real-Time Crawler for Other Sites</title>
		<link>https://proxysp.com/oxylabs-html-crawler-api/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=oxylabs-html-crawler-api</link>
					<comments>https://proxysp.com/oxylabs-html-crawler-api/#respond</comments>
		
		<dc:creator><![CDATA[admin]]></dc:creator>
		<pubDate>Thu, 01 Jan 1970 00:00:00 +0000</pubDate>
				<category><![CDATA[How to Use OxyLabs Proxy (OxyLabs User Manual Navigation)]]></category>
		<guid isPermaLink="false">https://www.proxysp.com/?p=7636</guid>

					<description><![CDATA[Do you know how to use OxyLabs Real-time Crawler for web pages? This is the most comprehensive introduction from OxyLabs official. Quick Start HTML Crawler API &#8230;<p class="read-more"> <a class="ast-button" href="https://proxysp.com/oxylabs-html-crawler-api/"> <span class="screen-reader-text">How to Use HTML Crawler API [Part 5]: OxyLabs Real-Time Crawler for Other Sites</span> Read More &#187;</a></p>]]></description>
										<content:encoded><![CDATA[<blockquote><p>Do you know how to use OxyLabs Real-time Crawler for web pages? This is the most comprehensive introduction from OxyLabs official.</p></blockquote>
<h2 id="quick-start">Quick Start</h2>
<p>HTML Crawler API is built to help you in your heavy-duty data retrieval operations. You can use HTML Crawler API to access various public pages. It enables effortless web data extraction without any delays or errors.</p>
<p>HTML Crawler API uses <a class="custom_link" href="https://en.wikipedia.org/wiki/Basic_access_authentication" target="_blank" rel="nofollow noopener">basic HTTP authentication</a> that requires sending username and password.</p>
<p>This is by far the fastest way to start using HTML Crawler API. You will make a request to <code>https://ip.oxylabs.io</code> using <a href="#realtime">Realtime</a> integration method. Don't forget to replace <code>USERNAME</code> and <code>PASSWORD</code> with your proxy user credentials.</p>
<pre>curl --user "USERNAME:PASSWORD" 'https://realtime.oxylabs.io/v1/queries' -H "Content-Type: application/json" -d '{"source": "universal", "url": "https://ip.oxylabs.io"}'
</pre>
<p>If you have any questions not covered by this documentation, please contact your account manager or our support staff at <a class="custom_link" href="mailto:support@oxylabs.io" target="_blank" rel="nofollow noopener">support@oxylabs.io</a>.</p>
<hr />
<div class="inside-code">
<h2 id="integration-methods">Integration Methods</h2>
<p>HTML Crawler API supports three integration methods which have their unique benefits:</p>
<ul>
<li><a href="#push-pull">Push-Pull</a>. Using this method it is now required to mainain an active connection with our endpoint to retrieve the data. Upon making a request, our system is able to automatically ping users server when the job is done (see <a href="#callback">Callback</a>). This method saves computing resources and can be scaled easily.</li>
<li><a href="#realtime">Realtime</a>. The method requires user to maintain an active connection with our endpoint in order to get the results successfully when the job is completed. This method can be implemented into one service while Push-Pull method is a two step process.</li>
<li><a href="#superapi">SuperAPI</a>. This method is very similar to Realtime but instead posting data to our endpoint, user can use HTML Cralwer as a proxy. To retrieve the data, user must set up a proxy endpoint and make GET request to a desired URL. Additional parameters must be added using headers.</li>
</ul>
<p>Our recommended data extraction method is <a href="#push-pull">Push-Pull</a>.</p>
<hr />
</div>
<h3 id="push-pull">Push-Pull</h3>
<p>This is the most simple yet the most reliable and recommended data delivery method. In Push-Pull scenario you send us a query, we return you job <code>id</code>, and once the job is done you can use that <code>id</code> to retrieve content from <code>/results</code> endpoint. You can check job completion status yourself, or you can set up a simple listener that is able to accept POST queries.</p>
<p>This way, we will send you a callback message once the job is ready to be retrieved. In this particular example the results will be automatically <a href="#upload-to-storage">uploaded to your S3 bucket</a> named <code>YOUR_BUCKET_NAME</code>.</p>
<hr />
<h4 id="single-query"><strong>Single Query</strong></h4>
<p>The following endpoint will handle single queries for one keyword or URL. The API will return a confirmation message containing job information, including job <code>id</code>. You can check job completion status using that <code>id</code>, or you can ask us to ping your callback endpoint once the scraping task is finished by adding <code>callback_url</code> in the query.</p>
<pre>POST https://data.oxylabs.io/v1/queries
</pre>
<p>You need to post query parameters as data in the JSON body.</p>
<pre>curl --user user:pass1\
'https://data.oxylabs.io/v1/queries' \
-H "Content-Type: application/json" \
-d '{"source": "universal", "url": "https://stackoverflow.com/questions/tagged/python", "callback_url": "https://your.callback.url", "storage_type": "s3", "storage_url": "YOUR_BUCKET_NAME"}'
</pre>
<p>The API will respond with query information in JSON format, by printing it in the response body, similar to this:</p>
<pre>{
  "callback_url": "https://your.callback.url",
  "client_id": 5,
  "created_at": "2019-10-01 00:00:01",
  "domain": "com",
  "geo_location": null,
  "id": "12345678900987654321",
  "limit": 10,
  "locale": null,
  "pages": 1,
  "parse": false,
  "render": null,
  "url": "https://stackoverflow.com/questions/tagged/python",
  "source": "universal",
  "start_page": 1,
  "status": "pending",
  "storage_type": "s3",
  "storage_url": "YOUR_BUCKET_NAME/12345678900987654321.json",
  "subdomain": "www",
  "updated_at": "2019-10-01 00:00:01",
  "user_agent_type": "desktop",
  "_links": [
    {
      "rel": "self",
      "href": "http://data.oxylabs.io/v1/queries/12345678900987654321",
      "method": "GET"
    },
    {
      "rel": "results",
      "href": "http://data.oxylabs.io/v1/queries/12345678900987654321/results",
      "method": "GET"
    }
  ]
}
</pre>
<hr />
<h4 id="check-job-status"><strong>Check Job Status</strong></h4>
<p>If your query had a <code>callback_url</code>, we will send you a message containing a link to the content once the scraping task is done. However, if there was no <code>callback_url</code> in the query, you will need to check the job status yourself. For that, you need to use the URL in <code>href</code> under <code>rel</code>:<code>self</code> in the response message you received after submitting your query to our API. It should look similar to this: <code>http://data.oxylabs.io/v1/queries/12345678900987654321</code>.</p>
<pre>GET https://data.oxylabs.io/v1/queries/{id}
</pre>
<p>Querying this link will return the job information, including its <code>status</code>. There are three possible <code>status</code> values:</p>
<div class="su-table su-table-responsive su-table-alternate">
<table>
<tbody>
<tr>
<td><code>pending</code></td>
<td>The job is still in the queue and has not been completed.</td>
</tr>
<tr>
<td><code>done</code></td>
<td>The job is completed, you may retrieve the result by querying the URL in <code>href</code> under <code>rel</code>:<code>results</code> : <code>http://data.oxylabs.io/v1/queries/12345678900987654321/results</code></td>
</tr>
<tr>
<td><code>faulted</code></td>
<td>There was an issue with the job, and we could not complete it, most likely due to a server error on the target site's side.</td>
</tr>
</tbody>
</table>
</div>
<pre>curl --user user:pass1 'http://data.oxylabs.io/v1/queries/12345678900987654321'
</pre>
<p>The API will respond with query information in JSON format, by printing it in the response body. Notice that job <code>status</code> has been changed to <code>done</code>. You can now retrieve content by querying <code>http://data.oxylabs.io/v1/queries/12345678900987654321/results</code>.</p>
<p>You can also see that the task has been <code>updated_at</code> <code>2019-10-01 00:00:15</code> &#8211; the query took 14 seconds to complete.</p>
<pre>{
  "client_id": 5,
  "created_at": "2019-10-01 00:00:01",
  "domain": "com",
  "geo_location": null,
  "id": "12345678900987654321",
  "limit": 10,
  "locale": null,
  "pages": 1,
  "parse": false,
  "render": null,
  "url": "sofa",
  "source": "universal",
  "start_page": 1,
  "status": "done",
  "subdomain": "www",
  "updated_at": "2019-10-01 00:00:15",
  "user_agent_type": "desktop",
  "_links": [
    {
      "rel": "self",
      "href": "http://data.oxylabs.io/v1/queries/12345678900987654321",
      "method": "GET"
    },
    {
      "rel": "results",
      "href": "http://data.oxylabs.io/v1/queries/12345678900987654321/results",
      "method": "GET"
    }
  ]
}
</pre>
<hr />
<h4 id="retrieve-job-content"><strong>Retrieve Job Content</strong></h4>
<p>Once you know the job is ready to be retrieved by checking its status, you can GET it using the URL in <code>href</code> under <code>rel</code>:<code>results</code> in our initial response. It should look similar to this: <code>http://data.oxylabs.io/v1/queries/12345678900987654321/results</code>.</p>
<pre>GET https://data.oxylabs.io/v1/queries/{id}/results
</pre>
<p>The results can be automatically retrieved without periodically checking job status by setting up <a href="#callback">Callback</a> service. User needs to specfy the IP or domain of the server where the Callback service is running. When our system completes a job, it will send a message to the provided IP or domain and the Callback service will download the results as described in the <a href="#callback">Callback implementation example</a>.</p>
<pre>curl --user user:pass1 'http://data.oxylabs.io/v1/queries/12345678900987654321/results'
</pre>
<p>The API will return job content:</p>
<pre>{
  "results": [
    {
      "content": "&lt;!doctype html&gt;
        CONTENT      
      ",
      "created_at": "2019-10-01 00:00:01",
      "updated_at": "2019-10-01 00:00:15",
      "page": 1,
      "url": "https://stackoverflow.com/questions/tagged/python",
      "job_id": "12345678900987654321",
      "status_code": 200
    }
  ]
}
</pre>
<hr />
<h4 id="callback"><strong>Callback</strong></h4>
<p>A callback is a <code>POST</code> request we send to your machine, informing that the data extraction task is completed and providing URL to download scraped content. This means that you no longer need to <a href="#check-job-status">check job status</a> manually. Once the data is here, we will let you know, and all you need to do now is <a href="#retrieve-job-content">retrieve it</a>.</p>
<pre># Please see the code samples in Python and PHP.
</pre>
<p>Sample callback output</p>
<pre>{  
   "created_at":"2019-10-01 00:00:01",
   "updated_at":"2019-10-01 00:00:15",
   "locale":null,
   "client_id":163,
   "user_agent_type":"desktop",
   "source":"universal",
   "pages":1,
   "subdomain":"www",
   "status":"done",
   "start_page":1,
   "parse":0,
   "render":null,
   "priority":0,
   "ttl":0,
   "origin":"api",
   "persist":true,
   "id":"12345678900987654321",
   "callback_url":"http://your.callback.url/",
   "url":"https://stackoverflow.com/questions/tagged/python",
   "domain":"de",
   "limit":10,
   "geo_location":null,
   {...}
   "_links":[
      {  
         "href":"https://data.oxylabs.io/v1/queries/12345678900987654321",
         "method":"GET",
         "rel":"self"
      },
      {  
         "href":"https://data.oxylabs.io/v1/queries/12345678900987654321/results",
         "method":"GET",
         "rel":"results"
      }
   ],
}
</pre>
<hr />
<h4 id="batch-query"><strong>Batch Query</strong></h4>
<p>HTML Crawler API also supports executing multiple keywords, up to 1,000 keywords with each batch. The following endpoint will submit multiple keywords to the extraction queue.</p>
<pre>POST https://data.oxylabs.io/v1/queries/batch
</pre>
<p>You need to post query parameters as data in the JSON body.</p>
<p>The system will handle every keyword as a separate request. If you provided a callback URL, you will get a separate call for each keyword. Otherwise, our initial response will contain job <code>id</code>s for all keywords. For example, if you sent 50 keywords, we will return 50 unique job <code>id</code>s.</p>
<p>Important! <code>query</code> is the only parameter that can have multiple values. All other parameters are the same for that batch query.</p>
<pre>curl --user user:pass1 'https://data.oxylabs.io/v1/queries/batch' -H 'Content-Type: application/json' \
 -d '@keywords.json'
</pre>
<p><code>keywords.json</code> content:</p>
<pre>{  
   "url":[  
      "https://stackoverflow.com/questions/tagged/python",
      "https://stackoverflow.com/questions/tagged/golang",
      "https://stackoverflow.com/questions/tagged/php"
   ],
   "source": "universal",
   "callback_url": "https://your.callback.url"
}
</pre>
<p>The API will respond with query information in JSON format, by printing it in the response body, similar to this:</p>
<pre>{
  "queries": [
    {
      "callback_url": "https://your.callback.url",
      {...}
      "created_at": "2019-10-01 00:00:01",
      "domain": "com",
      "id": "12345678900987654321",
      {...}
      "url": "https://stackoverflow.com/questions/tagged/python",
      "source": "universal",
      {...}
          "rel": "results",
          "href": "http://data.oxylabs.io/v1/queries/12345678900987654321/results",
          "method": "GET"
        }
      ]
    },
    {
      "callback_url": "https://your.callback.url",
      {...}
      "created_at": "2019-10-01 00:00:01",
      "domain": "com",
      "id": "12345678901234567890",
      {...}
      "url": "https://stackoverflow.com/questions/tagged/golang",
      "source": "universal",
      {...}
          "rel": "results",
          "href": "http://data.oxylabs.io/v1/queries/12345678901234567890/results",
          "method": "GET"
        }
      ]
    },
    {
      "callback_url": "https://your.callback.url",
      {...}
      "created_at": "2019-10-01 00:00:01",
      "domain": "com",
      "id": "01234567899876543210",
      {...}
      "url": "https://stackoverflow.com/questions/tagged/php",
      "source": "universal",
      {...}
          "rel": "results",
          "href": "http://data.oxylabs.io/v1/queries/01234567899876543210/results",
          "method": "GET"
        }
      ]
    }
  ]
}
</pre>
<hr />
<h4 id="get-notifier-ip-address-list"><strong>Get Notifier IP Address List</strong></h4>
<p>You may want to whitelist the IPs sending you callback messages or get the list of these IPs for other purposes. This can be done by <code>GET</code>ing this endpoint: <code>https://data.oxylabs.io/v1/info/callbacker_ips</code>.</p>
<pre>curl --user user:pass1 'https://data.oxylabs.io/v1/info/callbacker_ips'
</pre>
<p>The API will return the list of IPs making callback requests to your system:</p>
<pre>{
    "ips": [
        "x.x.x.x",
        "y.y.y.y"
    ]
}
</pre>
<hr />
<h4 id="upload-to-storage"><strong>Upload to Storage</strong></h4>
<p>By default RTC job results are stored in our databases. This means that you will need to query our results endpoint and retrieve content yourself. Custom storage feature allows you to store results in your own cloud storage. The advantage of this feature is that you don't have to make extra requests in order to fetch results &#8211; everything goes directly to your storage bucket.</p>
<p>We support Amazon S3 and Google Cloud Storage. If you would like to use a different type of storage, please contact your account manager to discuss the feature delivery timeline.</p>
<p id="amazon-s3"><strong>Amazon S3</strong></p>
<p>To get your job results uploaded to your Amazon S3 bucket, please set up access permissions for our service. To do that, go to <code>https://s3.console.aws.amazon.com/ &gt; S3 &gt; Storage &gt; Bucket Name (if don't have one, create new) &gt; Permissions &gt; Bucket Policy</code></p>
<p><img loading="lazy" decoding="async" class="aligncenter size-full wp-image-8280" src="https://www.proxysp.com/wp-content/uploads/2021/09/Oxylabs-HTML-Crawler-API-Upload-to-Storage1.png" alt="Oxylabs HTML Crawler API Upload to Storage1" width="482" height="323" srcset="https://proxysp.com/wp-content/uploads/2021/09/Oxylabs-HTML-Crawler-API-Upload-to-Storage1.png 482w, https://proxysp.com/wp-content/uploads/2021/09/Oxylabs-HTML-Crawler-API-Upload-to-Storage1-300x201.png 300w" sizes="(max-width: 482px) 100vw, 482px" /></p>
<p>You can find bucket policy in this <a class="custom_link" href="https://docs.oxylabs.io/resources/s3_bucket_policy.json" target="_blank" rel="noopener">JSON</a> or in code sample area on the right. Don't forget to change bucket name under <code>YOUR_BUCKET_NAME</code>. This policy allows us to write to your bucket, give access to uploaded files to you, and know bucket location.</p>
<p id="google-cloud-storage"><strong>Google Cloud Storage</strong></p>
<p>To get your job results uploaded to your Google Cloud Storage bucket, please set up special permissions for our service. To do that, please create a custom role with the <code>storage.objects.create</code> permission and assign it to the Oxylabs service account email <code>oxyserps-storage@oxyserps-storage.iam.gserviceaccount.com</code>.</p>
<p><img loading="lazy" decoding="async" class="aligncenter size-full wp-image-8281" src="https://www.proxysp.com/wp-content/uploads/2021/09/Oxylabs-HTML-Crawler-API-Upload-to-Storage2.png" alt="Oxylabs HTML Crawler API Upload to Storage2" width="483" height="306" srcset="https://proxysp.com/wp-content/uploads/2021/09/Oxylabs-HTML-Crawler-API-Upload-to-Storage2.png 483w, https://proxysp.com/wp-content/uploads/2021/09/Oxylabs-HTML-Crawler-API-Upload-to-Storage2-300x190.png 300w" sizes="(max-width: 483px) 100vw, 483px" /></p>
<p><img loading="lazy" decoding="async" class="aligncenter size-full wp-image-8282" src="https://www.proxysp.com/wp-content/uploads/2021/09/Oxylabs-HTML-Crawler-API-Upload-to-Storage3.png" alt="Oxylabs HTML Crawler API Upload to Storage3" width="486" height="668" srcset="https://proxysp.com/wp-content/uploads/2021/09/Oxylabs-HTML-Crawler-API-Upload-to-Storage3.png 486w, https://proxysp.com/wp-content/uploads/2021/09/Oxylabs-HTML-Crawler-API-Upload-to-Storage3-218x300.png 218w" sizes="(max-width: 486px) 100vw, 486px" /></p>
<p id="usage"><strong>Usage</strong></p>
<p>To use this feature, please specify two additional parameters in your requests. Learn more <a href="#direct">here</a>.</p>
<p>The upload path looks like this: <code>YOUR_BUCKET_NAME/job_ID.json</code>. You will find job ID in response body that you receive from us after submitting a request. In <a href="#single-query">this example</a> job ID is <code>12345678900987654321</code>.</p>
<pre>{
    "Version": "2012-10-17",
    "Id": "Policy1577442634787",
    "Statement": [
        {
            "Sid": "Stmt1577442633719",
            "Effect": "Allow",
            "Principal": {
                "AWS": "arn:aws:iam::324311890426:user/oxylabs.s3.uploader"
            },
            "Action": "s3:GetBucketLocation",
            "Resource": "arn:aws:s3:::YOUR_BUCKET_NAME"
        },
        {
            "Sid": "Stmt1577442633719",
            "Effect": "Allow",
            "Principal": {
                "AWS": "arn:aws:iam::324311890426:user/oxylabs.s3.uploader"
            },
            "Action": [
                "s3:PutObject",
                "s3:PutObjectAcl"
            ],
            "Resource": "arn:aws:s3:::YOUR_BUCKET_NAME/*"
        }
    ]
}
</pre>
<hr />
<h3 id="realtime">Realtime</h3>
<p>The data submission is the same as in Push-Pull method, but with Realtime, we will return the content on open connection. You send us a query, the connection remains open, we retrieve the content, and bring it to you. The endpoint that handles that is this:</p>
<pre>POST https://realtime.oxylabs.io/v1/queries
</pre>
<p>The timeout limit for open connections is 100 seconds. Therefore, in rare cases of heavy load, we may not be able to ensure the data gets to you.</p>
<p>You need to post query parameters as data in the JSON body. Please see an example for more details.</p>
<pre>curl --user user:pass1 'https://realtime.oxylabs.io/v1/queries' -H "Content-Type: application/json" \
 -d '{"source": "universal", "url": "https://stackoverflow.com/questions/tagged/python"}'
</pre>
<p>Example response body that will be returned on open connection:</p>
<pre>{
  "results": [
    {
      "content": "
      CONTENT
      "
      "created_at": "2019-10-01 00:00:01",
      "updated_at": "2019-10-01 00:00:15",
      "id": null,
      "page": 1,
      "url": "https://stackoverflow.com/questions/tagged/python",
      "job_id": "12345678900987654321",
      "status_code": 200
    }
  ]
}
</pre>
<hr />
<h3 id="superapi">SuperAPI</h3>
<p>If you have ever used regular proxies for data scraping, integrating SuperAPI delivery method will be a breeze. You simply need to use our entry node as proxy, authorize with HTML Crawler API credentials, and ignore certificates. In <code>cURL</code> it's <code>-k</code> or <code>--insecure</code>. Your data will reach you on open connection.</p>
<pre>GET realtime.oxylabs.io:60000
</pre>
<p>SuperAPI only supports a handful of parameters since it <strong>only works with <a href="#direct">Direct</a> data source</strong> where a full URL is provided. These parameters should be sent as headers. This is a list of accepted parameters:</p>
<div class="su-table su-table-responsive su-table-alternate">
<table>
<tbody>
<tr>
<td><code>X-OxySERPs-User-Agent-Type</code></td>
<td>There is no way to indicate a specific User-Agent, but you can let us know which browser and platform to use. A list of supported User-Agents can be found <a href="#user_agent_type">here</a>.</td>
</tr>
</tbody>
</table>
</div>
<p>If you need help setting up SuperAPI, get in touch with us at <a class="custom_link" href="mailto:support@oxylabs.io" target="_blank" rel="nofollow noopener">support@oxylabs.io</a>.</p>
<pre>curl -k \
-x realtime.oxylabs.io:60000 \
-U user:pass1 \
-H "X-OxySERPs-User-Agent-Type: desktop_chrome" \
"https://stackoverflow.com/questions/tagged/python"
</pre>
<hr />
<h2 id="content-type">Content Type</h2>
<p>HTML Crawler API returns <strong>raw HTML</strong>.</p>
<hr />
<h3 id="download-images">Download Images</h3>
<p>It is possible to download images via HTML Crawler API. If you are doing that through SuperAPI, you can simply save the output to image extension. For example:</p>
<p><code>curl -k -x realtime.oxylabs.io:60000 -U user:pass1 "https://example.com/image.jpg" &gt;&gt; image.jpg</code></p>
<p>If you are using <a href="#push-pull">Push-Pull</a> or <a href="#realtime">Realtime</a> methods, you will need to add <code>content_encoding</code> parameter with a value of <code>base64</code>. Once you receive the results, you then need to decode encoded data from <code>content</code> into bytes and save it as an image file. Please find an example in Python on the right.</p>
<hr />
<h2 id="data-sources">Data Sources</h2>
<p>HTML Crawler API accepts URLs, along with additional parameters, such as User-Agent type, proxy location, and others. See this method, which we call <a href="#direct">Direct</a>, described below.</p>
<p>HTML Crawler API is able to render JavaScript when scraping. This enables you to get more data from the web page and get screenshots.</p>
<p>If you are unsure about any part of the documentation, drop us a line at <a class="custom_link" href="mailto:support@oxylabs.io" target="_blank" rel="nofollow noopener">support@oxylabs.io</a> or contact your account manager.</p>
<hr />
<h3 id="direct">Direct</h3>
<p><img loading="lazy" decoding="async" class="size-full wp-image-8283 alignnone" src="https://www.proxysp.com/wp-content/uploads/2021/09/Oxylabs-HTML-Crawler-API-Direct.png" alt="Oxylabs HTML Crawler API Direct" width="429" height="25" srcset="https://proxysp.com/wp-content/uploads/2021/09/Oxylabs-HTML-Crawler-API-Direct.png 429w, https://proxysp.com/wp-content/uploads/2021/09/Oxylabs-HTML-Crawler-API-Direct-300x17.png 300w" sizes="(max-width: 429px) 100vw, 429px" /></p>
<p><code>universal</code> source is designed to retrieve the contents of any URL on the internet. <code>POST</code>-ing the parameters in JSON format to the following endpoint will submit the specified URL to the extraction queue.</p>
<p><span class="test">Query parameters</span></p>
<div class="su-table su-table-responsive su-table-alternate">
<table width="216">
<tbody>
<tr>
<td style="font-weight: 400;" width="72">Parameter</td>
<td style="font-weight: 400;" width="72">Description</td>
<td style="font-weight: 400;" width="72">Default Value</td>
</tr>
<tr>
<td style="font-weight: 400;" width="72">source</td>
<td style="font-weight: 400;" width="72">Data source</td>
<td style="font-weight: 400;" width="72">universal</td>
</tr>
<tr>
<td style="font-weight: 400;" width="72">url</td>
<td style="font-weight: 400;" width="72">Direct URL (link) to Universal page</td>
<td style="font-weight: 400;" width="72">&#8211;</td>
</tr>
<tr>
<td style="font-weight: 400;" width="72">user_agent_type</td>
<td style="font-weight: 400;" width="72">Device type and browser. The full list can be found <a href="#user_agent_type">here.</a></td>
<td style="font-weight: 400;" width="72">desktop</td>
</tr>
<tr>
<td style="font-weight: 400;" width="72">geo_location</td>
<td style="font-weight: 400;" width="72">Geo location of proxy used to retrieve the data. The full list of supported locations can be found <a href="#geo_location">here.</a></td>
<td style="font-weight: 400;" width="72"></td>
</tr>
<tr>
<td style="font-weight: 400;" width="72">locale</td>
<td style="font-weight: 400;" width="72">Locale, as expected in Accept-Language header.</td>
<td style="font-weight: 400;" width="72"></td>
</tr>
<tr>
<td style="font-weight: 400;" width="72">render</td>
<td style="font-weight: 400;" width="72">Enables JavaScript rendering. Use it when the target requires JavaScript to load content. Only works via Push-Pull (a.k.a. Callback) method. There are two available values for this parameter: html(get raw output) and png (get a Base64-encoded screenshot).</td>
<td style="font-weight: 400;" width="72"></td>
</tr>
<tr>
<td style="font-weight: 400;" width="72">content_encoding</td>
<td style="font-weight: 400;" width="72">Add this parameter if you are downloading images. Learn more <a href="#download-images">here.</a></td>
<td style="font-weight: 400;" width="72">base64</td>
</tr>
<tr>
<td style="font-weight: 400;" width="72">context:</td>
<td style="font-weight: 400;" rowspan="2" width="72">Base64-encoded POST request body. It is only useful if http_method is set to post.</td>
<td style="font-weight: 400;" rowspan="2" width="72">&#8211;</td>
</tr>
<tr>
<td style="font-weight: 400;" width="72">content</td>
</tr>
<tr>
<td style="font-weight: 400;" width="72">context:</td>
<td style="font-weight: 400;" rowspan="2" width="72">Pass your own cookies.</td>
<td style="font-weight: 400;" rowspan="2" width="72">&#8211;</td>
</tr>
<tr>
<td style="font-weight: 400;" width="72">cookies</td>
</tr>
<tr>
<td style="font-weight: 400;" width="72">context:</td>
<td style="font-weight: 400;" rowspan="2" width="72">Indicate whether you would like the scraper to follow redirects (3xx responses with a destination URL) to get the contents of the URL at the end of the redirect chain.</td>
<td style="font-weight: 400;" rowspan="2" width="72">&#8211;</td>
</tr>
<tr>
<td style="font-weight: 400;" width="72">follow_redirects</td>
</tr>
<tr>
<td style="font-weight: 400;" width="72">context:</td>
<td style="font-weight: 400;" rowspan="2" width="72">Pass your own headers.</td>
<td style="font-weight: 400;" rowspan="2" width="72">&#8211;</td>
</tr>
<tr>
<td style="font-weight: 400;" width="72">headers</td>
</tr>
<tr>
<td style="font-weight: 400;" width="72">context:</td>
<td style="font-weight: 400;" rowspan="2" width="72">Set it to post if you would like to make a POST request to your target URL via Universal scraper.</td>
<td style="font-weight: 400;" rowspan="2" width="72">get</td>
</tr>
<tr>
<td style="font-weight: 400;" width="72">http_method</td>
</tr>
<tr>
<td style="font-weight: 400;" width="72">context:</td>
<td style="font-weight: 400;" rowspan="2" width="72">If you want to use the same proxy with multiple requests, you can do so by using this parameter. Just set your session to any string you like, and we will assign a proxy to this ID and keep it for up to 10 minutes. After that, if you make another request with the same session ID, a new proxy will be assigned to that particular session ID.</td>
<td style="font-weight: 400;" rowspan="2" width="72">&#8211;</td>
</tr>
<tr>
<td style="font-weight: 400;" width="72">session_id</td>
</tr>
<tr>
<td style="font-weight: 400;" width="72">context:</td>
<td style="font-weight: 400;" rowspan="2" width="72">Define a custom HTTP response code (or a few of them), upon which we should consider the scrape successful and return the content to you. May be useful if you want us to return the 503 error page or in some other non-standard cases.</td>
<td style="font-weight: 400;" rowspan="2" width="72">&#8211;</td>
</tr>
<tr>
<td style="font-weight: 400;" width="72">successful_status_codes</td>
</tr>
<tr>
<td style="font-weight: 400;" width="72">callback_url</td>
<td style="font-weight: 400;" width="72">URL to your callback endpoint.</td>
<td style="font-weight: 400;" width="72">&#8211;</td>
</tr>
<tr>
<td style="font-weight: 400;" width="72">storage_type</td>
<td style="font-weight: 400;" width="72">Storage service provider. We support Amazon S3 and Google Cloud Storage. The storage_type parameter values for these storage providers are, correspondingly, s3 and gcs. The full implementation can be found on the <a href="#upload-to-storage">Upload to Storage</a> page. This feature only works via Push-Pull (Callback) method.</td>
<td style="font-weight: 400;" width="72">&#8211;</td>
</tr>
<tr>
<td style="font-weight: 400;" width="72">storage_url</td>
<td style="font-weight: 400;" width="72">Your storage bucket name. Only works via Push-Pull (Callback) method.</td>
<td style="font-weight: 400;" width="72">&#8211;</td>
</tr>
<tr>
<td style="font-weight: 400;" colspan="3" width="216">   &#8211; required parameter</td>
</tr>
</tbody>
</table>
</div>
<p>In this example, the API will retrieve a universal product page in Push-Pull method. All available parameters are included (though not always necessary or compatible within the same request), to give you an idea on how to format your requests:</p>
<pre>curl --user user:pass1 \
'https://data.oxylabs.io/v1/queries' \
-H "Content-Type: application/json" \
 -d '{"source":"universal","url":"https://stackoverflow.com/questions/tagged/python","user_agent_type":"mobile","context":[{"key":"headers","value":{"Accept-Language":"en-US","Content-Type":"application/octet-stream","Custom-Header":"custom header content"}},{"key":"cookies","value":[{"key":"NID","value":"1234567890"},{"key":"1P JAR","value":"0987654321"}]},{"key":"follow_redirects","value":true},{"key":"http_method","value":"post"},{"key":"content","value":"YmFzZTY0RW5jb2RlZFBPU1RCb2R5"},{"key":"successful_status_codes","value":[808,909]}]}
</pre>
<p>Here is the same example in Realtime:</p>
<pre>curl --user user:pass1 \
'https://data.oxylabs.io/v1/queries' \
-H "Content-Type: application/json" \
-d '{"source": "universal", "url": "https://stackoverflow.com/questions/tagged/python", "user_agent_type": "mobile", "context": [{"key": "headers", "value": ["Accept-Language": "en-US", "Content-Type": "application/octet-stream", "Custom-Header": "custom header content"]}, {"key": "cookies", "value": [{"key": "NID", "value": "1234567890"}, {"key": "1P JAR", "value": "0987654321"}, {"key": "follow_redirects", "value": true}, {"key": "http_method", "value": "post"}, {"key": "content", "value": "base64EncodedPOSTBody"}, {"key": "successful_status_codes", "value": [303, 808, 909]}]}]}'
</pre>
<p>And via SuperAPI:</p>
<pre># A GET request could look something like this:
curl -k \
-x http://realtime.oxylabs.io:60000 \
-U user:pass1 \
"https://stackoverflow.com/questions/tagged/python" \
-H "X-OxySERPs-Session-Id: 1234567890abcdef" \
-H "X-OxySERPs-Geo-Location: India" \
-H "Accept-Language: en-US" \
-H "Content-Type: application/octet-stream" \
-H "Custom-Header: custom header content" \
-H "Cookie: NID=1234567890; 1P_JAR=0987654321" \
-H "X-Status-Code: 303, 808, 909"

# A POST request would have the same structure but contain a parameter specifying that it is a POST request:
curl -X POST \
-k \
-x http://realtime.oxylabs.io:60000 \
-U user:pass1 "https://stackoverflow.com/questions/tagged/python" \
-H "X-OxySERPs-Session-Id: 1234567890abcdef" \
-H "X-OxySERPs-Geo-Location: India" \
-H "Custom-Header: custom header content" \
-H "Cookie: NID=1234567890; 1P_JAR=0987654321" \
-H "X-Status-Code: 303, 808, 909"
</pre>
<hr />
<h2 id="parameter-values">Parameter Values</h2>
<h3 id="geo_location">Geo_Location</h3>
<p>Full list of supported geo locations can be found in CSV format <a class="custom_link" href="https://docs.oxylabs.io/resources/universal-supported-geo_location-values.csv" target="_blank" rel="noopener">here</a>.</p>
<pre>"United Arab Emirates",
"Albania",
"Armenia",
"Angola",
"Argentina",
"Australia",
...
"Uruguay",
"Uzbekistan",
"Venezuela Bolivarian Republic of",
"Viet Nam",
"South Africa",
"Zimbabwe"
</pre>
<hr />
<h3 id="http_method">HTTP_Method</h3>
<p>Universal Crawler supports two HTTP(S) methods: <code>GET</code> (default) and <code>POST</code>.</p>
<pre>"GET",
"POST"
</pre>
<hr />
<h3 id="render">Render</h3>
<p>Universal Crawler can render Javascript and return either a rendered HTML document or a PNG screenshot of the web page.</p>
<pre>"html",
"png"
</pre>
<hr />
<h3 id="user_agent_type">User_Agent_Type</h3>
<p>Download full list of <code>user_agent_type</code> values in JSON <a class="custom_link" href="https://docs.oxylabs.io/resources/user_agent_type.json" target="_blank" rel="noopener">here</a>.</p>
<pre>[
  {
    "user_agent_type": "desktop",
    "description": "Random desktop browser User-Agent"
  },
  {
    "user_agent_type": "desktop_firefox",
    "description": "Random User-Agent of one of the latest versions of desktop Firefox"
  },
  {
    "user_agent_type": "desktop_chrome",
    "description": "Random User-Agent of one of the latest versions of desktop Chrome"
  },
  {
    "user_agent_type": "desktop_opera",
    "description": "Random User-Agent of one of the latest versions of desktop Opera"
  },
  {
    "user_agent_type": "desktop_edge",
    "description": "Random User-Agent of one of the latest versions of desktop Edge"
  },
  {
    "user_agent_type": "desktop_safari",
    "description": "Random User-Agent of one of the latest versions of desktop Safari"
  },
  {
    "user_agent_type": "mobile",
    "description": "Random mobile browser User-Agent"
  },
  {
    "user_agent_type": "mobile_android",
    "description": "Random User-Agent of one of the latest versions of Android browser"
  },
  {
    "user_agent_type": "mobile_ios",
    "description": "Random User-Agent of one of the latest versions of iPhone browser"
  },
  {
    "user_agent_type": "tablet",
    "description": "Random tablet browser User-Agent"
  },
  {
    "user_agent_type": "tablet_android",
    "description": "Random User-Agent of one of the latest versions of Android tablet"
  },
  {
    "user_agent_type": "tablet_ios",
    "description": "Random User-Agent of one of the latest versions of iPad tablet"
  }
]
</pre>
<hr />
<h2 id="account-status">Account Status</h2>
<h3 id="usage-statistics">Usage Statistics</h3>
<p>You can find your usage statistics by querying the following endpoint:</p>
<pre>GET https://data.oxylabs.io/v1/stats
</pre>
<p>By default, the API will return all-time usage statistics. Adding <code>?group_by=month</code> will return monthly stats, while <code>?group_by=day</code> will return daily numbers.</p>
<p>This query will return all-time statistics. You can find your daily and monthly usage by adding either <code>?group_by=day</code> or <code>?group_by=month</code></p>
<pre>curl --user user:pass1 'https://data.oxylabs.io/v1/stats'
</pre>
<p>Sample output:</p>
<pre>{
    "data": {
        "sources": [
            {
                "realtime_results_count": "90",
                "results_count": "10",
                "title": "universal"
            }
        ]
    },
    "meta": {
        "group_by": null
    }
}
</pre>
<hr />
<h3 id="limits">Limits</h3>
<p>The following endpoint will give your monthly commitment information as well as how much of it has already been used:</p>
<pre>GET https://data.oxylabs.io/v1/stats/limits
</pre>
<pre>curl --user user:pass1 'https://data.oxylabs.io/v1/stats/limits'
</pre>
<p>Sample output:</p>
<pre>{
    "monthly_requests_commitment": 4500000,
    "used_requests": 985000
}
</pre>
<hr />
<h2 id="response-codes">Response Codes</h2>
<div class="su-table su-table-responsive su-table-alternate">
<table>
<thead>
<tr>
<th>Code</th>
<th>Status</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><code>204</code></td>
<td>No Content</td>
<td>You are trying to retrieve a job that has not been completed yet.</td>
</tr>
<tr>
<td><code>400</code></td>
<td>Multiple error messages</td>
<td>Bad request structure, could be a misspelled parameter or invalid value. The response body will have a more specific error message.</td>
</tr>
<tr>
<td><code>401</code></td>
<td>&#8216;Authorization header not provided' / &#8216;Invalid authorization header' / &#8216;Client not found'</td>
<td>Missing authorization header or incorrect login credentials.</td>
</tr>
<tr>
<td><code>403</code></td>
<td>Forbidden</td>
<td>Your account does not have access to this resource.</td>
</tr>
<tr>
<td><code>404</code></td>
<td>Not Found</td>
<td>Job ID you are looking for is no longer available.</td>
</tr>
<tr>
<td><code>429</code></td>
<td>Too many requests</td>
<td>Exceeded rate limit. Please contact your account manager to increase limits.</td>
</tr>
<tr>
<td><code>500</code></td>
<td>Unknown Error</td>
<td>Service unavailable.</td>
</tr>
<tr>
<td><code>524</code></td>
<td>Timeout</td>
<td>Service unavailable.</td>
</tr>
<tr>
<td><code>612</code></td>
<td>Undefined Internal Error</td>
<td>Something went wrong and we failed the job you submitted. You can try again at no extra cost, as we do not charge you for <code>faulted</code> jobs. If that does not work, please get in touch with us.</td>
</tr>
<tr>
<td><code>613</code></td>
<td>Faulted After Too Many Retries</td>
<td>We tried scraping the job you submitted, but gave up after reaching our retry limit. You can try again at no extra cost, as we do not charge you for <code>faulted</code> jobs. If that does not work, please get in touch with us.</td>
</tr>
</tbody>
</table>
</div>
<hr />
<h4>References</h4>
<ul>
<li><a href="https://docs.oxylabs.io/rtc/source/html-crawler-api/index.html" target="_blank" rel="nofollow noopener">https://docs.oxylabs.io/rtc/source/html-crawler-api/index.html</a></li>
<li><a href="https://docs.oxylabs.io/rtc/index.html" target="_blank" rel="nofollow noopener">https://docs.oxylabs.io/rtc/index.html</a></li>
</ul>
<p>&nbsp;</p>
<hr />
<blockquote><p><strong>Disclaimer:</strong> This part of the content is mainly from the merchant. If the merchant does not want it to be displayed on my website, please <a href="https://www.proxysp.com/contact-us/">contact us</a> to delete your content.</p></blockquote>
]]></content:encoded>
					
					<wfw:commentRss>https://proxysp.com/oxylabs-html-crawler-api/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">7636</post-id>	</item>
		<item>
		<title>How to Use ProxyScrape Premium API</title>
		<link>https://proxysp.com/proxyscrape-premium-api/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=proxyscrape-premium-api</link>
					<comments>https://proxysp.com/proxyscrape-premium-api/#respond</comments>
		
		<dc:creator><![CDATA[proxysp]]></dc:creator>
		<pubDate>Thu, 01 Jan 1970 00:00:00 +0000</pubDate>
				<category><![CDATA[APIs]]></category>
		<category><![CDATA[Manuals]]></category>
		<guid isPermaLink="false">https://www.proxysp.com/?p=8489</guid>

					<description><![CDATA[This article will explain how to use ProxyScrape Premium API services programmatically. Let's begin now! Get proxy list https://api.proxyscrape.com/v2/account/datacenter_shared/proxy-list?auth=nhuyjukilompnbvfrtyuui&#038;type=getproxies&#038;country[]=all&#038;protocol=http&#038;format=normal &#160; Example Request var request = http.Request('GET', &#8230;<p class="read-more"> <a class="ast-button" href="https://proxysp.com/proxyscrape-premium-api/"> <span class="screen-reader-text">How to Use ProxyScrape Premium API</span> Read More &#187;</a></p>]]></description>
										<content:encoded><![CDATA[<blockquote><p>This article will explain how to use ProxyScrape Premium API services programmatically. Let's begin now!</p></blockquote>
<h2>Get proxy list</h2>
<pre>https://api.proxyscrape.com/v2/account/datacenter_shared/proxy-list?auth=nhuyjukilompnbvfrtyuui&type=getproxies&country[]=all&protocol=http&format=normal</pre>
<p>&nbsp;</p>
<div class="su-table su-table-responsive su-table-alternate su-table-fixed">
<table width="407">
<tbody>
<tr>
<td style="font-weight: 400;" width="72">auth</td>
<td style="font-weight: 400;" width="335">nhuyjukilompnbvfrtyuui<br />
Provide your API auth key</td>
</tr>
<tr>
<td style="font-weight: 400;" width="72">type</td>
<td style="font-weight: 400;" width="335">getproxies<br />
Download the proxies, or display them in your browser:</p>
<ul>
<li>getproxies</li>
<li>displayproxies</li>
</ul>
</td>
</tr>
<tr>
<td style="font-weight: 400;" width="72">country[]</td>
<td style="font-weight: 400;" width="335">all<br />
Provide any Alpha 2 ISO country code of countries that are available in your account. Incase you want to download multiple countries at once, please repeat the parameter: &country[]=us&country[]=deWhen this parameter is not provided it will default to all countries.</td>
</tr>
<tr>
<td style="font-weight: 400;" width="72">protocol</td>
<td style="font-weight: 400;" width="335">http<br />
Define which proxy protocol you want to download:</p>
<ul>
<li>http</li>
<li>socks</li>
</ul>
<p>The HTTP proxies support SSL (https). The Socks proxies are both Socks4 and Socks5.</td>
</tr>
<tr>
<td style="font-weight: 400;" width="72">format</td>
<td style="font-weight: 400;" width="335">normal<br />
The format you want to receive the proxies in:</p>
<ul>
<li>normal: a simple proxy list</li>
<li>json: returns all proxies, along with their associated countries and status.</li>
</ul>
</td>
</tr>
</tbody>
</table>
</div>
<div class="styles__ExampleTitle-sc-1gk0rxh-1 coCuLw">Example Request</div>
<div>
<pre class="language-javascript"><code class="language-javascript"><span class="token keyword">var</span> request <span class="token operator">=</span> http<span class="token punctuation">.</span><span class="token function">Request</span><span class="token punctuation">(</span><span class="token string">'GET'</span><span class="token punctuation">,</span> Uri<span class="token punctuation">.</span><span class="token function">parse</span><span class="token punctuation">(</span><span class="token string">'https://api.proxyscrape.com/v2/account/datacenter_shared/proxy-list?auth=nhuyjukilompnbvfrtyuui&type=getproxies&country[]=all&protocol=http&format=normal'</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">;</span>


http<span class="token punctuation">.</span>StreamedResponse response <span class="token operator">=</span> <span class="token keyword">await</span> request<span class="token punctuation">.</span><span class="token function">send</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span>

<span class="token keyword">if</span> <span class="token punctuation">(</span>response<span class="token punctuation">.</span>statusCode <span class="token operator">==</span> <span class="token number">200</span><span class="token punctuation">)</span> <span class="token punctuation">{</span>
  <span class="token function">print</span><span class="token punctuation">(</span><span class="token keyword">await</span> response<span class="token punctuation">.</span>stream<span class="token punctuation">.</span><span class="token function">bytesToString</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
<span class="token punctuation">}</span>
<span class="token keyword">else</span> <span class="token punctuation">{</span>
  <span class="token function">print</span><span class="token punctuation">(</span>response<span class="token punctuation">.</span>reasonPhrase<span class="token punctuation">)</span><span class="token punctuation">;</span>
<span class="token punctuation">}</span></code></pre>
</div>
<hr />
<h2>Get authenticated IPs</h2>
<pre>https://api.proxyscrape.com/v2/account/datacenter_shared/whitelist?auth=nhuyjukilompnbvfrtyuui&type=get</pre>
<p>Display the IPs that are already authenticated on your account.</p>
<p>PARAMS</p>
<div class="su-table su-table-responsive su-table-alternate su-table-fixed">
<table width="298">
<tbody>
<tr>
<td style="font-weight: 400;" width="72">auth</td>
<td style="font-weight: 400;" width="226">nhuyjukilompnbvfrtyuui<br />
Provide your API auth key</td>
</tr>
<tr>
<td style="font-weight: 400;" width="72">type</td>
<td style="font-weight: 400;" width="226">get<br />
Get authenticated IPs on your account</td>
</tr>
</tbody>
</table>
</div>
<div class="styles__ExampleTitle-sc-1gk0rxh-1 coCuLw">Example Request</div>
<div>
<pre class="language-javascript"><code class="language-javascript"><span class="token keyword">var</span> request <span class="token operator">=</span> http<span class="token punctuation">.</span><span class="token function">Request</span><span class="token punctuation">(</span><span class="token string">'GET'</span><span class="token punctuation">,</span> Uri<span class="token punctuation">.</span><span class="token function">parse</span><span class="token punctuation">(</span><span class="token string">'https://api.proxyscrape.com/v2/account/datacenter_shared/whitelist?auth=nhuyjukilompnbvfrtyuui&type=get'</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">;</span>


http<span class="token punctuation">.</span>StreamedResponse response <span class="token operator">=</span> <span class="token keyword">await</span> request<span class="token punctuation">.</span><span class="token function">send</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span>

<span class="token keyword">if</span> <span class="token punctuation">(</span>response<span class="token punctuation">.</span>statusCode <span class="token operator">==</span> <span class="token number">200</span><span class="token punctuation">)</span> <span class="token punctuation">{</span>
  <span class="token function">print</span><span class="token punctuation">(</span><span class="token keyword">await</span> response<span class="token punctuation">.</span>stream<span class="token punctuation">.</span><span class="token function">bytesToString</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
<span class="token punctuation">}</span>
<span class="token keyword">else</span> <span class="token punctuation">{</span>
  <span class="token function">print</span><span class="token punctuation">(</span>response<span class="token punctuation">.</span>reasonPhrase<span class="token punctuation">)</span><span class="token punctuation">;</span>
<span class="token punctuation">}</span></code></pre>
</div>
<div>
<hr />
</div>
<h2>GET Authenticate one IP</h2>
<pre>https://api.proxyscrape.com/v2/account/datacenter_shared/whitelist?auth=nhuyjukilompnbvfrtyuui&type=set&ip[]=1.1.1.1</pre>
<p>Please note that every new authenticate request has to contain all IPs that need to remain authenticated. To unauthenticate IPs, you can resend the authenticate request, excluding the IPs that have to be unauthenticated.</p>
<p>PARAMS</p>
<div class="su-table su-table-responsive su-table-alternate su-table-fixed">
<p>&nbsp;</p>
</div>
<div class="styles__ExampleTitle-sc-1gk0rxh-1 coCuLw">Example Request</div>
<div class="styles__ExampleTitle-sc-1gk0rxh-1 coCuLw">
<pre class="language-javascript"><code class="language-javascript"><span class="token keyword">var</span> request <span class="token operator">=</span> http<span class="token punctuation">.</span><span class="token function">Request</span><span class="token punctuation">(</span><span class="token string">'GET'</span><span class="token punctuation">,</span> Uri<span class="token punctuation">.</span><span class="token function">parse</span><span class="token punctuation">(</span><span class="token string">'https://api.proxyscrape.com/v2/account/datacenter_shared/whitelist?auth=nhuyjukilompnbvfrtyuui&type=set&ip[]=1.1.1.1'</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">;</span>


http<span class="token punctuation">.</span>StreamedResponse response <span class="token operator">=</span> <span class="token keyword">await</span> request<span class="token punctuation">.</span><span class="token function">send</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span>

<span class="token keyword">if</span> <span class="token punctuation">(</span>response<span class="token punctuation">.</span>statusCode <span class="token operator">==</span> <span class="token number">200</span><span class="token punctuation">)</span> <span class="token punctuation">{</span>
  <span class="token function">print</span><span class="token punctuation">(</span><span class="token keyword">await</span> response<span class="token punctuation">.</span>stream<span class="token punctuation">.</span><span class="token function">bytesToString</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
<span class="token punctuation">}</span>
<span class="token keyword">else</span> <span class="token punctuation">{</span>
  <span class="token function">print</span><span class="token punctuation">(</span>response<span class="token punctuation">.</span>reasonPhrase<span class="token punctuation">)</span><span class="token punctuation">;</span>
<span class="token punctuation">}</span></code></pre>
</div>
<hr />
<h2>GET Authenticate multiple IPs</h2>
<pre>https://api.proxyscrape.com/v2/account/datacenter_shared/whitelist?auth=nhuyjukilompnbvfrtyuui&type=set&ip[]=1.1.1.1&ip[]=1.1.1.2&ip[]=1.1.1.3</pre>
<p>To authenticate multiple IPs just simply repeat the ip[] parameter.</p>
<p>PARAMS</p>
<div class="su-table su-table-responsive su-table-alternate su-table-fixed">
<table width="298">
<tbody>
<tr>
<td style="font-weight: 400;" width="72">auth</td>
<td style="font-weight: 400;" width="226">nhuyjukilompnbvfrtyuui<br />
Provide your API auth key</td>
</tr>
<tr>
<td style="font-weight: 400;" width="72">type</td>
<td style="font-weight: 400;" width="226">set<br />
Set IP request</td>
</tr>
<tr>
<td style="font-weight: 400;" width="72">ip[]</td>
<td style="font-weight: 400;" width="226">1.1.1.1<br />
Provide one of the IPs that have to be authenticated</td>
</tr>
<tr>
<td style="font-weight: 400;" width="72">ip[]</td>
<td style="font-weight: 400;" width="226">1.1.1.2<br />
Provide one of the IPs that have to be authenticated</td>
</tr>
<tr>
<td style="font-weight: 400;" width="72">ip[]</td>
<td style="font-weight: 400;" width="226">1.1.1.3<br />
Provide one of the IPs that have to be authenticated</td>
</tr>
</tbody>
</table>
</div>
<div>
<div class="styles__ExampleTitle-sc-1gk0rxh-1 coCuLw">Example Request</div>
<div>
<pre class="language-javascript"><code class="language-javascript"><span class="token keyword">var</span> request <span class="token operator">=</span> http<span class="token punctuation">.</span><span class="token function">Request</span><span class="token punctuation">(</span><span class="token string">'GET'</span><span class="token punctuation">,</span> Uri<span class="token punctuation">.</span><span class="token function">parse</span><span class="token punctuation">(</span><span class="token string">'https://api.proxyscrape.com/v2/account/datacenter_shared/whitelist?auth=nhuyjukilompnbvfrtyuui&type=set&ip[]=1.1.1.1&ip[]=1.1.1.2&ip[]=1.1.1.3'</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">;</span>


http<span class="token punctuation">.</span>StreamedResponse response <span class="token operator">=</span> <span class="token keyword">await</span> request<span class="token punctuation">.</span><span class="token function">send</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span>

<span class="token keyword">if</span> <span class="token punctuation">(</span>response<span class="token punctuation">.</span>statusCode <span class="token operator">==</span> <span class="token number">200</span><span class="token punctuation">)</span> <span class="token punctuation">{</span>
  <span class="token function">print</span><span class="token punctuation">(</span><span class="token keyword">await</span> response<span class="token punctuation">.</span>stream<span class="token punctuation">.</span><span class="token function">bytesToString</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
<span class="token punctuation">}</span>
<span class="token keyword">else</span> <span class="token punctuation">{</span>
  <span class="token function">print</span><span class="token punctuation">(</span>response<span class="token punctuation">.</span>reasonPhrase<span class="token punctuation">)</span><span class="token punctuation">;</span>
<span class="token punctuation">}</span></code></pre>
</div>
</div>
<div>
<hr />
<h4 id="references" class="ftwp-heading">References,</h4>
</div>
<ul>
<li><a href="https://docs.proxyscrape.com/#b91b6c21-172c-48b3-ab99-6f297d5d9a7b" target="_blank" rel="nofollow noopener">https://docs.proxyscrape.com/#b91b6c21-172c-48b3-ab99-6f297d5d9a7b</a></li>
</ul>
<hr />
<blockquote>
<div><strong>Disclaimer</strong>: This part of the content is mainly from the merchant. If the merchant does not want it to be displayed on my website, please <a href="https://www.proxysp.com/contact-us/">contact us</a> to delete your content.</div>
</blockquote>
]]></content:encoded>
					
					<wfw:commentRss>https://proxysp.com/proxyscrape-premium-api/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">8489</post-id>	</item>
		<item>
		<title>Proxy Knowledge Base (By BlazingSEO) : Learn Manuals Before You Buy</title>
		<link>https://proxysp.com/proxy-knowledge-base-blazingseo/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=proxy-knowledge-base-blazingseo</link>
					<comments>https://proxysp.com/proxy-knowledge-base-blazingseo/#respond</comments>
		
		<dc:creator><![CDATA[admin]]></dc:creator>
		<pubDate>Thu, 01 Jan 1970 00:00:00 +0000</pubDate>
				<category><![CDATA[BlazingSEO Proxies]]></category>
		<guid isPermaLink="false">https://www.proxysp.com/?p=7646</guid>

					<description><![CDATA[Do you want to learn what's the blazing proxies and type of proxies that offered? We take time research on Their customer support manuals, learn form &#8230;<p class="read-more"> <a class="ast-button" href="https://proxysp.com/proxy-knowledge-base-blazingseo/"> <span class="screen-reader-text">Proxy Knowledge Base (By BlazingSEO) : Learn Manuals Before You Buy</span> Read More &#187;</a></p>]]></description>
										<content:encoded><![CDATA[<blockquote><p>Do you want to learn what's the blazing proxies and type of proxies that offered? We take time research on Their customer support manuals, learn form it here,</p></blockquote>
<hr />
<h2 class="heading">What are Proxies?</h2>
<p><span style="font-size: 16px;">A proxy is an IP that forwards your internet request/data, without the websites that you are connected to, finding out your actual IP address. Proxies can be used for a wide variety of use cases which include anonymous browsing, social media, scraping, etc.</span></p>
<hr />
<h2 class="heading">What is Your Proxy Anonymity?</h2>
<p>A proxy is an IP that forwards your internet request/data, without the websites that you are connected to, finding out your actual IP address. Proxies can be used for a wide variety of use cases which include anonymous browsing, social media, scraping, etc.</p>
<p><img loading="lazy" decoding="async" class="aligncenter wp-image-7683 size-full" src="https://www.proxysp.com/wp-content/uploads/2021/09/check-proxy-anonymity.png" alt="check proxy anonymity" width="775" height="373" srcset="https://proxysp.com/wp-content/uploads/2021/09/check-proxy-anonymity.png 775w, https://proxysp.com/wp-content/uploads/2021/09/check-proxy-anonymity-300x144.png 300w, https://proxysp.com/wp-content/uploads/2021/09/check-proxy-anonymity-768x370.png 768w" sizes="(max-width: 775px) 100vw, 775px" /></p>
<p>&nbsp;</p>
<hr />
<h2 class="heading">How do Proxies Work and How is Ping Measured in MS?</h2>
<h3><strong>Understanding the Proxy's Network Path</strong></h3>
<p>A proxy's network path is deﬁned as your data that you send when you visit a website.</p>
<p>In order for you to &#8216;download' the website content to view on your computer, your request is sent to the website's server and then back to your home computer.</p>
<p>Unfortunately, your computer does not have a direct ethernet cable from your home computer to the website’s server, thus, network hops are required between many ISPs (POPs) to reach the end target.</p>
<p>With that in mind, your proxy's network path looks something like this:</p>
<p><img loading="lazy" decoding="async" class="aligncenter wp-image-7685 size-full" src="https://www.proxysp.com/wp-content/uploads/2021/09/proxy-network-path.png" alt="proxy network path" width="867" height="725" srcset="https://proxysp.com/wp-content/uploads/2021/09/proxy-network-path.png 867w, https://proxysp.com/wp-content/uploads/2021/09/proxy-network-path-300x251.png 300w, https://proxysp.com/wp-content/uploads/2021/09/proxy-network-path-768x642.png 768w" sizes="(max-width: 867px) 100vw, 867px" /></p>
<p>Based on the image above, the total time taken from sending a request to download data back to your computer when using a proxy = <strong>620 ms</strong>.</p>
<p>Now, if you remove the proxy from the equation, or move your computer closer to the proxy server, you reduce Blue's network latency (in theory).</p>
<p>Thus, customers who are experiencing slow speeds can many times be attested to the fact that they are connecting to one of our nationwide proxy servers (LA, Buﬀalo, etc), from a computer/server that is very far away (thousands of miles), which is connecting to a website that is additionally thousands of miles away &#8212; and THUS, create a latency that is noticeable.</p>
<hr />
<h2>Can My ISP See that I'm Using a Proxy or Block It?</h2>
<p>We enforce high level proxy anonymity protocol to ensure that your IP does not leak out. Your ISP will not recognize our proxy IP usage.</p>
<hr />
<h2 class="heading">What Port do Blazing SEO Proxies Use?</h2>
<p>For IP authorization, <a href="https://www.proxysp.com/blazing-seo/" target="_blank" rel="noopener">Blazing SEO proxies</a> utilize port 3128. For username/password authorization, their proxies utilize port 4444. And for <a href="https://www.proxysp.com/socks-protocol-blazingseo/">SOCKS connectivity</a>, our proxies utilize port 1080.</p>
<hr />
<h2>What Type of Proxies do BlazingSEO Provider?</h2>
<p>Now BlazingSEO offer,</p>
<ul>
<li><a href="https://www.proxysp.com/residential-proxies-blazingseo/"><strong>Residential Proxies</strong></a></li>
<li><strong><a href="https://www.proxysp.com/dedicated-proxies-blazingseo/">Dedicated IP Proxies (DC Proxies)</a></strong></li>
<li><a href="https://www.proxysp.com/dedicated-proxies-blazingseo/#what-are-rotating-proxies">Rotating Proxies</a></li>
<li><a href="https://www.proxysp.com/ipv6-proxies-blazingseo/"><strong>IPv6 Proxies</strong></a></li>
<li><a href="https://www.proxysp.com/proxy-pilot/"><strong>Proxy Pilot</strong></a></li>
<li>Mobile Proxies (developing)</li>
</ul>
<div class="icon">
<div class="icon">
<hr />
</div>
</div>
<div>
<h4 id="references" class="ftwp-heading">References,</h4>
</div>
<ul>
<li><a href="https://portal.blazingseollc.com/en/support/solutions/articles/64000262799-what-are-proxies-" target="_blank" rel="nofollow noopener">https://portal.blazingseollc.com/en/support/solutions/articles/64000262799-what-are-proxies-</a></li>
<li><a href="https://portal.blazingseollc.com/en/support/solutions/articles/64000256610-what-is-your-proxy-anonymity-" target="_blank" rel="nofollow noopener">https://portal.blazingseollc.com/en/support/solutions/articles/64000256610-what-is-your-proxy-anonymity-</a></li>
<li><a href="https://portal.blazingseollc.com/en/support/solutions/articles/64000256636-how-do-proxies-work-and-how-is-ping-measured-in-ms-" target="_blank" rel="nofollow noopener">https://portal.blazingseollc.com/en/support/solutions/articles/64000256636-how-do-proxies-work-and-how-is-ping-measured-in-ms-</a></li>
<li><a href="https://portal.blazingseollc.com/en/support/solutions/articles/64000262802-can-my-isp-see-that-i-m-using-a-proxy-or-block-it-" target="_blank" rel="nofollow noopener">https://portal.blazingseollc.com/en/support/solutions/articles/64000262802-can-my-isp-see-that-i-m-using-a-proxy-or-block-it-</a></li>
<li><a href="https://portal.blazingseollc.com/en/support/solutions/articles/64000263273-what-port-do-your-proxies-use-" target="_blank" rel="nofollow noopener">https://portal.blazingseollc.com/en/support/solutions/articles/64000263273-what-port-do-your-proxies-use-</a></li>
</ul>
<hr />
<blockquote><p><strong>Disclaimer</strong>: This part of the content is mainly from the merchant. If the merchant does not want it to be displayed on my website, please <a href="https://www.proxysp.com/contact-us/">contact us</a> to delete your content.</p></blockquote>
]]></content:encoded>
					
					<wfw:commentRss>https://proxysp.com/proxy-knowledge-base-blazingseo/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">7646</post-id>	</item>
		<item>
		<title>How to Use Oxylabs Scraper API [Part 1]: Oxylabs E-Commerce Scraper API</title>
		<link>https://proxysp.com/oxylabs-ecommerce-scraper-api/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=oxylabs-ecommerce-scraper-api</link>
					<comments>https://proxysp.com/oxylabs-ecommerce-scraper-api/#respond</comments>
		
		<dc:creator><![CDATA[proxysp]]></dc:creator>
		<pubDate>Thu, 01 Jan 1970 00:00:00 +0000</pubDate>
				<category><![CDATA[How to Use OxyLabs Proxy (OxyLabs User Manual Navigation)]]></category>
		<guid isPermaLink="false">https://www.proxysp.com/?p=9117</guid>

					<description><![CDATA[Do you know how to use Oxylabs E-Commerce Scraper API? This is the most comprehensive introduction from OxyLabs official. Quick Start Scraper API is built to &#8230;<p class="read-more"> <a class="ast-button" href="https://proxysp.com/oxylabs-ecommerce-scraper-api/"> <span class="screen-reader-text">How to Use Oxylabs Scraper API [Part 1]: Oxylabs E-Commerce Scraper API</span> Read More &#187;</a></p>]]></description>
										<content:encoded><![CDATA[<blockquote><p>Do you know how to use Oxylabs E-Commerce Scraper API? This is the most comprehensive introduction from OxyLabs official.</p></blockquote>
<p><a href="https://www.proxysp.com/redirect/oxylabs" target="_blank" rel="nofollow noopener"><img loading="lazy" decoding="async" class="aligncenter size-full wp-image-9221" src="https://www.proxysp.com/wp-content/uploads/2021/11/Oxylabs-E-Commerce-Scraper-API-pricing.jpg" alt="Oxylabs E-Commerce Scraper API pricing" width="921" height="500" srcset="https://proxysp.com/wp-content/uploads/2021/11/Oxylabs-E-Commerce-Scraper-API-pricing.jpg 921w, https://proxysp.com/wp-content/uploads/2021/11/Oxylabs-E-Commerce-Scraper-API-pricing-300x163.jpg 300w, https://proxysp.com/wp-content/uploads/2021/11/Oxylabs-E-Commerce-Scraper-API-pricing-768x417.jpg 768w" sizes="(max-width: 921px) 100vw, 921px" /></a></p>
<h2 id="quick-start">Quick Start</h2>
<p>Scraper API is built to help you in your heavy-duty data retrieval operations. You can use Scraper API to access various public pages. It enables effortless web data extraction without any delays or errors.</p>
<p>Scraper API uses <a class="custom_link" href="https://en.wikipedia.org/wiki/Basic_access_authentication" target="_blank" rel="nofollow noopener">basic HTTP authentication</a> that requires sending username and password.</p>
<p>This is by far the fastest way to start using Scraper API. You will make a request to <code>https://books.toscrape.com/catalogue/a-light-in-the-attic_1000/index.html</code> using <a class="custom_link" href="#realtime">Realtime</a> integration method from United States <code>geo-location</code> and retrieve already <code>parsed</code> data in JSON. If you wish to get page HTML instead of parsed data, simply remove <code>parse</code> and <code>parser_type</code> parameters. Don't forget to replace <code>USERNAME</code> and <code>PASSWORD</code> with your proxy user credentials.</p>
<div class="inside-code">
<div class="highlight inside-code-body"><code>curl <span class="nt">--user</span> <span class="s2">"USERNAME:PASSWORD"</span> 'https://realtime.oxylabs.io/v1/queries' <span class="nt">-H</span> "Content-Type: application/json" <span class="nt">-d</span> '{"source": "universal_ecommerce", "url": "https://books.toscrape.com/catalogue/a-light-in-the-attic_1000/index.html", "geo-location": "United States", "parser_type": "ecommerce_product", "parse": true}'</code></div>
<p><span style="font-size: 16px;">If you have any questions not covered by this documentation, please contact your account manager or our support staff at </span><a class="custom_link" style="font-size: 16px; background-color: #ffffff;" href="mailto:support@oxylabs.io" target="_blank" rel="nofollow noopener">support@oxylabs.io</a><span style="font-size: 16px;">.</span></p>
<hr />
</div>
<h2 id="integration-methods">Integration Methods</h2>
<p>Scraper API supports three integration methods which have their unique benefits:</p>
<ul>
<li><a class="custom_link" href="#push-pull">Push-Pull</a>. Using this method it is now required to mainain an active connection with our endpoint to retrieve the data. Upon making a request, our system is able to automatically ping users server when the job is done (see Callback). This method saves computing resources and can be scaled easily.</li>
<li><a class="custom_link" href="#realtime">Realtime</a>. The method requires user to maintain an active connection with our endpoint in order to get the results successfully when the job is completed. This method can be implemented into one service while Push-Pull method is a two step process.</li>
<li><a href="#superapi">SuperAPI</a>. This method is very similar to Realtime but instead posting data to our endpoint, user can use HTML Cralwer as a proxy. To retrieve the data, user must set up a proxy endpoint and make GET request to a desired URL. Additional parameters must be added using headers.</li>
</ul>
<p>Our recommended data extraction method is <a class="custom_link" href="#push-pull">Push-Pull</a>.</p>
<hr />
<h3 id="push-pull">Push-Pull</h3>
<p>This is the most simple yet the most reliable and recommended data delivery method. In Push-Pull scenario you send us a query, we return you job <code>id</code>, and once the job is done you can use that <code>id</code> to retrieve content from <code>/results</code> endpoint. You can check job completion status yourself, or you can set up a simple listener that is able to accept POST queries. This way, we will send you a callback message once the job is ready to be retrieved. In this particular example the results will be automatically <a class="custom_link" href="#upload-to-storage">uploaded to your S3 bucket</a> named <code>YOUR_BUCKET_NAME</code>.</p>
<hr />
<h4 id="single-query">Single Query</h4>
<p>The following endpoint will handle single queries for one keyword or URL. The API will return a confirmation message containing job information, including job <code>id</code>. You can check job completion status using that <code>id</code>, or you can ask us to ping your callback endpoint once the scraping task is finished by adding <code>callback_url</code> in the query.</p>
<div class="endpoint">
<pre><strong>POST https://data.oxylabs.io/v1/queries</strong></pre>
</div>
<p>You need to post query parameters as data in the JSON body.</p>
<div class="su-tabs su-tabs-style-default su-tabs-mobile-stack" data-active="4" data-scroll-offset="0" data-anchor-in-url="no"><div class="su-tabs-nav"><span class="" data-url="" data-target="blank" tabindex="0" role="button"><strong>cURL</strong></span><span class="" data-url="" data-target="blank" tabindex="0" role="button"><strong>Python</strong></span><span class="" data-url="" data-target="blank" tabindex="0" role="button"><strong>PHP</strong></span><span class="" data-url="" data-target="blank" tabindex="0" role="button"><strong>HTTP</strong></span></div><div class="su-tabs-panes"><div class="su-tabs-pane su-u-clearfix su-u-trim" data-title="&lt;strong&gt;cURL&lt;/strong&gt;">
<pre class="highlight shell tab-shell"><code>curl --user user:pass1<span class="se">\</span>
<span class="s1">'https://data.oxylabs.io/v1/queries'</span> <span class="se">\</span>
-H <span class="s2">"Content-Type: application/json"</span> <span class="se">\</span>
-d <span class="s1">'{"source": "universal_ecommerce", "url": "https://books.toscrape.com/catalogue/a-light-in-the-attic_1000/index.html", "callback_url": "https://your.callback.url", "storage_type": "s3", "storage_url": "YOUR_BUCKET_NAME"}'</span></code></pre>
</div>
<div class="su-tabs-pane su-u-clearfix su-u-trim" data-title="&lt;strong&gt;Python&lt;/strong&gt;">
<pre class="highlight python tab-python"><code><span class="kn">import</span> <span class="nn">requests</span>
<span class="kn">from</span> <span class="nn">pprint</span> <span class="kn">import</span> <span class="n">pprint</span>


<span class="c"># Structure payload.</span>
<span class="n">payload</span> <span class="o">=</span> <span class="p">{</span>
    <span class="s">'source'</span><span class="p">:</span> <span class="s">'universal_ecommerce'</span><span class="p">,</span>
    <span class="s">'url'</span><span class="p">:</span> <span class="s">'https://books.toscrape.com/catalogue/a-light-in-the-attic_1000/index.html'</span><span class="p">,</span>
    <span class="s">'callback_url'</span><span class="p">:</span> <span class="s">'https://your.callback.url'</span><span class="p">,</span>
    <span class="s">'storage_type'</span><span class="p">:</span> <span class="s">'s3'</span><span class="p">,</span>
    <span class="s">'storage_url'</span><span class="p">:</span> <span class="s">'YOUR_BUCKET_NAME'</span>
<span class="p">}</span>

<span class="c"># Get response.</span>
<span class="n">response</span> <span class="o">=</span> <span class="n">requests</span><span class="o">.</span><span class="n">request</span><span class="p">(</span>
    <span class="s">'POST'</span><span class="p">,</span>
    <span class="s">'https://data.oxylabs.io/v1/queries'</span><span class="p">,</span>
    <span class="n">auth</span><span class="o">=</span><span class="p">(</span><span class="s">'user'</span><span class="p">,</span> <span class="s">'pass1'</span><span class="p">),</span>
    <span class="n">json</span><span class="o">=</span><span class="n">payload</span><span class="p">,</span>
<span class="p">)</span>

<span class="c"># Print prettified response to stdout.</span>
<span class="n">pprint</span><span class="p">(</span><span class="n">response</span><span class="o">.</span><span class="n">json</span><span class="p">())</span></code></pre>
</div>
<div class="su-tabs-pane su-u-clearfix su-u-trim" data-title="&lt;strong&gt;PHP&lt;/strong&gt;">
<pre class="highlight php tab-php"><code><span class="cp">&lt;?php</span>

<span class="nv">$params</span> <span class="o">=</span> <span class="k">array</span><span class="p">(</span>
    <span class="s1">'source'</span> <span class="o">=&gt;</span> <span class="s1">'universal_ecommerce'</span><span class="p">,</span>
    <span class="s1">'url'</span> <span class="o">=&gt;</span> <span class="s1">'https://books.toscrape.com/catalogue/a-light-in-the-attic_1000/index.html'</span><span class="p">,</span>
    <span class="s1">'callback_url'</span> <span class="o">=&gt;</span> <span class="s1">'https://your.callback.url'</span><span class="p">,</span>
    <span class="s1">'storage_type'</span> <span class="o">=&gt;</span> <span class="s1">'s3'</span><span class="p">,</span>
    <span class="s1">'storage_url'</span> <span class="o">=&gt;</span> <span class="s1">'YOUR_BUCKET_NAME'</span>
<span class="p">);</span>

<span class="nv">$ch</span> <span class="o">=</span> <span class="nb">curl_init</span><span class="p">();</span>

<span class="nb">curl_setopt</span><span class="p">(</span><span class="nv">$ch</span><span class="p">,</span> <span class="nx">CURLOPT_URL</span><span class="p">,</span> <span class="s2">"https://data.oxylabs.io/v1/queries"</span><span class="p">);</span>
<span class="nb">curl_setopt</span><span class="p">(</span><span class="nv">$ch</span><span class="p">,</span> <span class="nx">CURLOPT_RETURNTRANSFER</span><span class="p">,</span> <span class="mi">1</span><span class="p">);</span>
<span class="nb">curl_setopt</span><span class="p">(</span><span class="nv">$ch</span><span class="p">,</span> <span class="nx">CURLOPT_POSTFIELDS</span><span class="p">,</span> <span class="nb">json_encode</span><span class="p">(</span><span class="nv">$params</span><span class="p">));</span>
<span class="nb">curl_setopt</span><span class="p">(</span><span class="nv">$ch</span><span class="p">,</span> <span class="nx">CURLOPT_POST</span><span class="p">,</span> <span class="mi">1</span><span class="p">);</span>
<span class="nb">curl_setopt</span><span class="p">(</span><span class="nv">$ch</span><span class="p">,</span> <span class="nx">CURLOPT_USERPWD</span><span class="p">,</span> <span class="s2">"user"</span> <span class="o">.</span> <span class="s2">":"</span> <span class="o">.</span> <span class="s2">"pass1"</span><span class="p">);</span>

<span class="nv">$headers</span> <span class="o">=</span> <span class="k">array</span><span class="p">();</span>
<span class="nv">$headers</span><span class="p">[]</span> <span class="o">=</span> <span class="s2">"Content-Type: application/json"</span><span class="p">;</span>
<span class="nb">curl_setopt</span><span class="p">(</span><span class="nv">$ch</span><span class="p">,</span> <span class="nx">CURLOPT_HTTPHEADER</span><span class="p">,</span> <span class="nv">$headers</span><span class="p">);</span>

<span class="nv">$result</span> <span class="o">=</span> <span class="nb">curl_exec</span><span class="p">(</span><span class="nv">$ch</span><span class="p">);</span>
<span class="k">echo</span> <span class="nv">$result</span><span class="p">;</span>

<span class="k">if</span> <span class="p">(</span><span class="nb">curl_errno</span><span class="p">(</span><span class="nv">$ch</span><span class="p">))</span> <span class="p">{</span>
    <span class="k">echo</span> <span class="s1">'Error:'</span> <span class="o">.</span> <span class="nb">curl_error</span><span class="p">(</span><span class="nv">$ch</span><span class="p">);</span>
<span class="p">}</span>
<span class="nb">curl_close</span> <span class="p">(</span><span class="nv">$ch</span><span class="p">);</span>
<span class="cp">?&gt;</span></code></pre>
</div>
<div class="su-tabs-pane su-u-clearfix su-u-trim" data-title="&lt;strong&gt;HTTP&lt;/strong&gt;">
<pre class="highlight http tab-http"><code><span class="err">HTTP method is currently not supported</span></code></pre>
</div></div></div>
<p>The API will respond with query information in JSON format, by printing it in the response body, similar to this:</p>
<pre class="highlight json tab-json"><code><span class="p">{</span>
  <span class="s2">"callback_url"</span><span class="p">:</span> <span class="s2">"https://your.callback.url"</span><span class="p">,</span>
  <span class="s2">"client_id"</span><span class="p">:</span> <span class="mi">5</span><span class="p">,</span>
  <span class="s2">"created_at"</span><span class="p">:</span> <span class="s2">"2019-10-01 00:00:01"</span><span class="p">,</span>
  <span class="s2">"domain"</span><span class="p">:</span> <span class="s2">"com"</span><span class="p">,</span>
  <span class="s2">"geo_location"</span><span class="p">:</span> <span class="kc">null</span><span class="p">,</span>
  <span class="s2">"id"</span><span class="p">:</span> <span class="s2">"12345678900987654321"</span><span class="p">,</span>
  <span class="s2">"limit"</span><span class="p">:</span> <span class="mi">10</span><span class="p">,</span>
  <span class="s2">"locale"</span><span class="p">:</span> <span class="kc">null</span><span class="p">,</span>
  <span class="s2">"pages"</span><span class="p">:</span> <span class="mi">1</span><span class="p">,</span>
  <span class="s2">"parse"</span><span class="p">:</span> <span class="kc">false</span><span class="p">,</span>
  <span class="s2">"render"</span><span class="p">:</span> <span class="kc">null</span><span class="p">,</span>
  <span class="s2">"url"</span><span class="p">:</span> <span class="s2">"https://books.toscrape.com/catalogue/a-light-in-the-attic_1000/index.html"</span><span class="p">,</span>
  <span class="s2">"source"</span><span class="p">:</span> <span class="s2">"universal_ecommerce"</span><span class="p">,</span>
  <span class="s2">"start_page"</span><span class="p">:</span> <span class="mi">1</span><span class="p">,</span>
  <span class="s2">"status"</span><span class="p">:</span> <span class="s2">"pending"</span><span class="p">,</span>
  <span class="s2">"storage_type"</span><span class="p">:</span> <span class="s2">"s3"</span><span class="p">,</span>
  <span class="s2">"storage_url"</span><span class="p">:</span> <span class="s2">"YOUR_BUCKET_NAME/12345678900987654321.json"</span><span class="p">,</span>
  <span class="s2">"subdomain"</span><span class="p">:</span> <span class="s2">"www"</span><span class="p">,</span>
  <span class="s2">"updated_at"</span><span class="p">:</span> <span class="s2">"2019-10-01 00:00:01"</span><span class="p">,</span>
  <span class="s2">"user_agent_type"</span><span class="p">:</span> <span class="s2">"desktop"</span><span class="p">,</span>
  <span class="s2">"_links"</span><span class="p">:</span> <span class="p">[</span>
    <span class="p">{</span>
      <span class="s2">"rel"</span><span class="p">:</span> <span class="s2">"self"</span><span class="p">,</span>
      <span class="s2">"href"</span><span class="p">:</span> <span class="s2">"http://data.oxylabs.io/v1/queries/12345678900987654321"</span><span class="p">,</span>
      <span class="s2">"method"</span><span class="p">:</span> <span class="s2">"GET"</span>
    <span class="p">},</span>
    <span class="p">{</span>
      <span class="s2">"rel"</span><span class="p">:</span> <span class="s2">"results"</span><span class="p">,</span>
      <span class="s2">"href"</span><span class="p">:</span> <span class="s2">"http://data.oxylabs.io/v1/queries/12345678900987654321/results"</span><span class="p">,</span>
      <span class="s2">"method"</span><span class="p">:</span> <span class="s2">"GET"</span>
    <span class="p">}</span>
  <span class="p">]</span>
<span class="p">}</span></code></pre>
<hr />
<h4 id="check-job-status">Check Job Status</h4>
<p>If your query had a <code>callback_url</code>, we will send you a message containing a link to the content once the scraping task is done. However, if there was no <code>callback_url</code> in the query, you will need to check the job status yourself. For that, you need to use the URL in <code>href</code> under <code>rel</code>:<code>self</code> in the response message you received after submitting your query to our API. It should look similar to this: <code>http://data.oxylabs.io/v1/queries/12345678900987654321</code>.</p>
<div class="endpoint">
<pre><strong>GET https://data.oxylabs.io/v1/queries/{id}</strong></pre>
</div>
<p>Querying this link will return the job information, including its <code>status</code>. There are three possible <code>status</code> values:</p>
<div class="su-table su-table-responsive su-table-alternate">
<table>
<tbody>
<tr>
<td><code>pending</code></td>
<td>The job is still in the queue and has not been completed.</td>
</tr>
<tr>
<td><code>done</code></td>
<td>The job is completed, you may retrieve the result by querying the URL in <code>href</code> under <code>rel</code>:<code>results</code> : <code>http://data.oxylabs.io/v1/queries/12345678900987654321/results</code></td>
</tr>
<tr>
<td><code>faulted</code></td>
<td>There was an issue with the job, and we could not complete it, most likely due to a server error on the target site's side.</td>
</tr>
</tbody>
</table>
</div>
<div class="su-tabs su-tabs-style-default su-tabs-mobile-stack" data-active="4" data-scroll-offset="0" data-anchor-in-url="no"><div class="su-tabs-nav"><span class="" data-url="" data-target="blank" tabindex="0" role="button"><strong>cURL</strong></span><span class="" data-url="" data-target="blank" tabindex="0" role="button"><strong>Python</strong></span><span class="" data-url="" data-target="blank" tabindex="0" role="button"><strong>PHP</strong></span><span class="" data-url="" data-target="blank" tabindex="0" role="button"><strong>HTTP</strong></span></div><div class="su-tabs-panes"><div class="su-tabs-pane su-u-clearfix su-u-trim" data-title="&lt;strong&gt;cURL&lt;/strong&gt;">
<pre class="highlight shell tab-shell"><code>curl --user user:pass1 <span class="s1">'http://data.oxylabs.io/v1/queries/12345678900987654321'</span></code></pre>
</div>
<div class="su-tabs-pane su-u-clearfix su-u-trim" data-title="&lt;strong&gt;Python&lt;/strong&gt;">
<pre class="highlight python tab-python"><code><span class="kn">import</span> <span class="nn">requests</span>
<span class="kn">from</span> <span class="nn">pprint</span> <span class="kn">import</span> <span class="n">pprint</span>

<span class="c"># Get a response from the stats endpoint.</span>
<span class="n">response</span> <span class="o">=</span> <span class="n">requests</span><span class="o">.</span><span class="n">request</span><span class="p">(</span>
    <span class="n">method</span><span class="o">=</span><span class="s">'GET'</span><span class="p">,</span>
    <span class="n">url</span><span class="o">=</span><span class="s">'http://data.oxylabs.io/v1/queries/12345678900987654321'</span><span class="p">,</span>
    <span class="n">auth</span><span class="o">=</span><span class="p">(</span><span class="s">'user'</span><span class="p">,</span> <span class="s">'pass1'</span><span class="p">),</span>
<span class="p">)</span>

<span class="c"># Print prettified JSON response to stdout.</span>
<span class="n">pprint</span><span class="p">(</span><span class="n">response</span><span class="o">.</span><span class="n">json</span><span class="p">())</span></code></pre>
</div>
<div class="su-tabs-pane su-u-clearfix su-u-trim" data-title="&lt;strong&gt;PHP&lt;/strong&gt;">
<pre class="highlight php tab-php"><code><span class="cp">&lt;?php</span>

<span class="nv">$ch</span> <span class="o">=</span> <span class="nb">curl_init</span><span class="p">();</span>

<span class="nb">curl_setopt</span><span class="p">(</span><span class="nv">$ch</span><span class="p">,</span> <span class="nx">CURLOPT_URL</span><span class="p">,</span> <span class="s2">"http://data.oxylabs.io/v1/queries/12345678900987654321"</span><span class="p">);</span>
<span class="nb">curl_setopt</span><span class="p">(</span><span class="nv">$ch</span><span class="p">,</span> <span class="nx">CURLOPT_RETURNTRANSFER</span><span class="p">,</span> <span class="mi">1</span><span class="p">);</span>
<span class="nb">curl_setopt</span><span class="p">(</span><span class="nv">$ch</span><span class="p">,</span> <span class="nx">CURLOPT_CUSTOMREQUEST</span><span class="p">,</span> <span class="s2">"GET"</span><span class="p">);</span>
<span class="nb">curl_setopt</span><span class="p">(</span><span class="nv">$ch</span><span class="p">,</span> <span class="nx">CURLOPT_USERPWD</span><span class="p">,</span> <span class="s2">"user"</span> <span class="o">.</span> <span class="s2">":"</span> <span class="o">.</span> <span class="s2">"pass1"</span><span class="p">);</span>

<span class="nv">$result</span> <span class="o">=</span> <span class="nb">curl_exec</span><span class="p">(</span><span class="nv">$ch</span><span class="p">);</span>
<span class="k">echo</span> <span class="nv">$result</span><span class="p">;</span>

<span class="k">if</span> <span class="p">(</span><span class="nb">curl_errno</span><span class="p">(</span><span class="nv">$ch</span><span class="p">))</span> <span class="p">{</span>
    <span class="k">echo</span> <span class="s1">'Error:'</span> <span class="o">.</span> <span class="nb">curl_error</span><span class="p">(</span><span class="nv">$ch</span><span class="p">);</span>
<span class="p">}</span>
<span class="nb">curl_close</span> <span class="p">(</span><span class="nv">$ch</span><span class="p">);</span>
<span class="cp">?&gt;</span></code></pre>
</div>
<div class="su-tabs-pane su-u-clearfix su-u-trim" data-title="&lt;strong&gt;HTTP&lt;/strong&gt;">
<pre class="highlight http tab-http"><code><span class="err">HTTP method is currently not supported</span></code></pre>
</div></div></div>
<p>The API will respond with query information in JSON format, by printing it in the response body. Notice that job <code>status</code> has been changed to <code>done</code>. You can now retrieve content by querying <code>http://data.oxylabs.io/v1/queries/12345678900987654321/results</code>.</p>
<p>You can also see that the task has been <code>updated_at</code> <code>2019-10-01 00:00:15</code> &#8211; the query took 14 seconds to complete.</p>
<pre class="highlight json tab-json"><code><span class="p">{</span>
  <span class="s2">"client_id"</span><span class="p">:</span> <span class="mi">5</span><span class="p">,</span>
  <span class="s2">"created_at"</span><span class="p">:</span> <span class="s2">"2019-10-01 00:00:01"</span><span class="p">,</span>
  <span class="s2">"domain"</span><span class="p">:</span> <span class="s2">"com"</span><span class="p">,</span>
  <span class="s2">"geo_location"</span><span class="p">:</span> <span class="kc">null</span><span class="p">,</span>
  <span class="s2">"id"</span><span class="p">:</span> <span class="s2">"12345678900987654321"</span><span class="p">,</span>
  <span class="s2">"limit"</span><span class="p">:</span> <span class="mi">10</span><span class="p">,</span>
  <span class="s2">"locale"</span><span class="p">:</span> <span class="kc">null</span><span class="p">,</span>
  <span class="s2">"pages"</span><span class="p">:</span> <span class="mi">1</span><span class="p">,</span>
  <span class="s2">"parse"</span><span class="p">:</span> <span class="kc">false</span><span class="p">,</span>
  <span class="s2">"render"</span><span class="p">:</span> <span class="kc">null</span><span class="p">,</span>
  <span class="s2">"url"</span><span class="p">:</span> <span class="s2">"sofa"</span><span class="p">,</span>
  <span class="s2">"source"</span><span class="p">:</span> <span class="s2">"universal_ecommerce"</span><span class="p">,</span>
  <span class="s2">"start_page"</span><span class="p">:</span> <span class="mi">1</span><span class="p">,</span>
  <span class="s2">"status"</span><span class="p">:</span> <span class="s2">"done"</span><span class="p">,</span>
  <span class="s2">"subdomain"</span><span class="p">:</span> <span class="s2">"www"</span><span class="p">,</span>
  <span class="s2">"updated_at"</span><span class="p">:</span> <span class="s2">"2019-10-01 00:00:15"</span><span class="p">,</span>
  <span class="s2">"user_agent_type"</span><span class="p">:</span> <span class="s2">"desktop"</span><span class="p">,</span>
  <span class="s2">"_links"</span><span class="p">:</span> <span class="p">[</span>
    <span class="p">{</span>
      <span class="s2">"rel"</span><span class="p">:</span> <span class="s2">"self"</span><span class="p">,</span>
      <span class="s2">"href"</span><span class="p">:</span> <span class="s2">"http://data.oxylabs.io/v1/queries/12345678900987654321"</span><span class="p">,</span>
      <span class="s2">"method"</span><span class="p">:</span> <span class="s2">"GET"</span>
    <span class="p">},</span>
    <span class="p">{</span>
      <span class="s2">"rel"</span><span class="p">:</span> <span class="s2">"results"</span><span class="p">,</span>
      <span class="s2">"href"</span><span class="p">:</span> <span class="s2">"http://data.oxylabs.io/v1/queries/12345678900987654321/results"</span><span class="p">,</span>
      <span class="s2">"method"</span><span class="p">:</span> <span class="s2">"GET"</span>
    <span class="p">}</span>
  <span class="p">]</span>
<span class="p">}</span></code></pre>
<hr />
<h4 id="retrieve-job-content">Retrieve Job Content</h4>
<p>Once you know the job is ready to be retrieved by checking its status, you can GET it using the URL in <code>href</code> under <code>rel</code>:<code>results</code> in our initial response. It should look similar to this: <code>http://data.oxylabs.io/v1/queries/12345678900987654321/results</code>.</p>
<div class="endpoint">
<pre><strong>GET https://data.oxylabs.io/v1/queries/{id}/results</strong></pre>
</div>
<p>The results can be automatically retrieved without periodically checking job status by setting up Callback service. User needs to specfy the IP or domain of the server where the Callback service is running. When our system completes a job, it will send a message to the provided IP or domain and the Callback service will download the results as described in the Callback implementation example.</p>
<div class="su-tabs su-tabs-style-default su-tabs-mobile-stack" data-active="4" data-scroll-offset="0" data-anchor-in-url="no"><div class="su-tabs-nav"><span class="" data-url="" data-target="blank" tabindex="0" role="button"><strong>cURL</strong></span><span class="" data-url="" data-target="blank" tabindex="0" role="button"><strong>Python</strong></span><span class="" data-url="" data-target="blank" tabindex="0" role="button"><strong>PHP</strong></span><span class="" data-url="" data-target="blank" tabindex="0" role="button"><strong>HTTP</strong></span></div><div class="su-tabs-panes"><div class="su-tabs-pane su-u-clearfix su-u-trim" data-title="&lt;strong&gt;cURL&lt;/strong&gt;">
<pre class="highlight shell tab-shell"><code>curl --user user:pass1 <span class="s1">'http://data.oxylabs.io/v1/queries/12345678900987654321/results'</span></code></pre>
</div>
<div class="su-tabs-pane su-u-clearfix su-u-trim" data-title="&lt;strong&gt;Python&lt;/strong&gt;">
<pre class="highlight python tab-python"><code><span class="kn">import</span> <span class="nn">requests</span>
<span class="kn">from</span> <span class="nn">pprint</span> <span class="kn">import</span> <span class="n">pprint</span>

<span class="c"># Get response from the stats endpoint.</span>
<span class="n">response</span> <span class="o">=</span> <span class="n">requests</span><span class="o">.</span><span class="n">request</span><span class="p">(</span>
    <span class="n">method</span><span class="o">=</span><span class="s">'GET'</span><span class="p">,</span>
    <span class="n">url</span><span class="o">=</span><span class="s">'http://data.oxylabs.io/v1/queries/12345678900987654321/results'</span><span class="p">,</span>
    <span class="n">auth</span><span class="o">=</span><span class="p">(</span><span class="s">'user'</span><span class="p">,</span> <span class="s">'pass1'</span><span class="p">),</span>
<span class="p">)</span>

<span class="c"># Print the prettified JSON response to stdout.</span>
<span class="n">pprint</span><span class="p">(</span><span class="n">response</span><span class="o">.</span><span class="n">json</span><span class="p">())</span></code></pre>
</div>
<div class="su-tabs-pane su-u-clearfix su-u-trim" data-title="&lt;strong&gt;PHP&lt;/strong&gt;">
<pre class="highlight php tab-php"><code><span class="cp">&lt;?php</span>

<span class="nv">$ch</span> <span class="o">=</span> <span class="nb">curl_init</span><span class="p">();</span>

<span class="nb">curl_setopt</span><span class="p">(</span><span class="nv">$ch</span><span class="p">,</span> <span class="nx">CURLOPT_URL</span><span class="p">,</span> <span class="s2">"http://data.oxylabs.io/v1/queries/12345678900987654321/results"</span><span class="p">);</span>
<span class="nb">curl_setopt</span><span class="p">(</span><span class="nv">$ch</span><span class="p">,</span> <span class="nx">CURLOPT_RETURNTRANSFER</span><span class="p">,</span> <span class="mi">1</span><span class="p">);</span>
<span class="nb">curl_setopt</span><span class="p">(</span><span class="nv">$ch</span><span class="p">,</span> <span class="nx">CURLOPT_CUSTOMREQUEST</span><span class="p">,</span> <span class="s2">"GET"</span><span class="p">);</span>
<span class="nb">curl_setopt</span><span class="p">(</span><span class="nv">$ch</span><span class="p">,</span> <span class="nx">CURLOPT_USERPWD</span><span class="p">,</span> <span class="s2">"user"</span> <span class="o">.</span> <span class="s2">":"</span> <span class="o">.</span> <span class="s2">"pass1"</span><span class="p">);</span>

<span class="nv">$result</span> <span class="o">=</span> <span class="nb">curl_exec</span><span class="p">(</span><span class="nv">$ch</span><span class="p">);</span>
<span class="k">echo</span> <span class="nv">$result</span><span class="p">;</span>

<span class="k">if</span> <span class="p">(</span><span class="nb">curl_errno</span><span class="p">(</span><span class="nv">$ch</span><span class="p">))</span> <span class="p">{</span>
    <span class="k">echo</span> <span class="s1">'Error:'</span> <span class="o">.</span> <span class="nb">curl_error</span><span class="p">(</span><span class="nv">$ch</span><span class="p">);</span>
<span class="p">}</span>
<span class="nb">curl_close</span> <span class="p">(</span><span class="nv">$ch</span><span class="p">);</span>
<span class="cp">?&gt;</span></code></pre>
</div>
<div class="su-tabs-pane su-u-clearfix su-u-trim" data-title="&lt;strong&gt;HTTP&lt;/strong&gt;">
<pre class="highlight http tab-http"><code><span class="err">HTTP method is currently not supported</span></code></pre>
</div></div></div>
<p>The API will return job content:</p>
<pre class="highlight json tab-json"><code><span class="p">{</span>
  <span class="s2">"results"</span><span class="p">:</span> <span class="p">[</span>
    <span class="p">{</span>
      <span class="s2">"content"</span><span class="p">:</span> <span class="s2">"&lt;!doctype html&gt;&lt;html&gt;
        CONTENT      
      &lt;/html&gt;"</span><span class="p">,</span>
      <span class="s2">"created_at"</span><span class="p">:</span> <span class="s2">"2019-10-01 00:00:01"</span><span class="p">,</span>
      <span class="s2">"updated_at"</span><span class="p">:</span> <span class="s2">"2019-10-01 00:00:15"</span><span class="p">,</span>
      <span class="s2">"page"</span><span class="p">:</span> <span class="mi">1</span><span class="p">,</span>
      <span class="s2">"url"</span><span class="p">:</span> <span class="s2">"https://books.toscrape.com/catalogue/a-light-in-the-attic_1000/index.html"</span><span class="p">,</span>
      <span class="s2">"job_id"</span><span class="p">:</span> <span class="s2">"12345678900987654321"</span><span class="p">,</span>
      <span class="s2">"status_code"</span><span class="p">:</span> <span class="mi">200</span>
    <span class="p">}</span>
  <span class="p">]</span>
<span class="p">}</span></code></pre>
<hr />
<h4 id="callback">Callback</h4>
<p>A callback is a <code>POST</code> request we send to your machine, informing that the data extraction task is completed and providing URL to download scraped content. This means that you no longer need to <a class="custom_link" href="https://developers.oxylabs.io/scraper-apis/ecommerce_scraper_api/source/universal/index.html?http#check-job-status" target="_blank" rel="noopener">check job status</a> manually. Once the data is here, we will let you know, and all you need to do now is <a class="custom_link" href="#retrieve-job-content">retrieve it</a>.</p>
<div class="su-tabs su-tabs-style-default su-tabs-mobile-stack" data-active="4" data-scroll-offset="0" data-anchor-in-url="no"><div class="su-tabs-nav"><span class="" data-url="" data-target="blank" tabindex="0" role="button"><strong>cURL</strong></span><span class="" data-url="" data-target="blank" tabindex="0" role="button"><strong>Python</strong></span><span class="" data-url="" data-target="blank" tabindex="0" role="button"><strong>PHP</strong></span><span class="" data-url="" data-target="blank" tabindex="0" role="button"><strong>HTTP</strong></span></div><div class="su-tabs-panes"><div class="su-tabs-pane su-u-clearfix su-u-trim" data-title="&lt;strong&gt;cURL&lt;/strong&gt;">
<pre class="highlight shell tab-shell"><code><span class="c"># Please see the code samples in Python and PHP.</span></code></pre>
</div>
<div class="su-tabs-pane su-u-clearfix su-u-trim" data-title="&lt;strong&gt;Python&lt;/strong&gt;">
<pre class="highlight python tab-python"><code><span class="c"># This is a simple Sanic web server with a route listening for callbacks on localhost:8080.</span>
<span class="c"># It will print job results to stdout.</span>
<span class="kn">import</span> <span class="nn">requests</span>
<span class="kn">from</span> <span class="nn">pprint</span> <span class="kn">import</span> <span class="n">pprint</span>
<span class="kn">from</span> <span class="nn">sanic</span> <span class="kn">import</span> <span class="n">Sanic</span><span class="p">,</span> <span class="n">response</span>


<span class="n">AUTH_TUPLE</span> <span class="o">=</span> <span class="p">(</span><span class="s">'user'</span><span class="p">,</span> <span class="s">'pass1'</span><span class="p">)</span>

<span class="n">app</span> <span class="o">=</span> <span class="n">Sanic</span><span class="p">()</span>


<span class="c"># Define /job_listener endpoint that accepts POST requests.</span>
<span class="nd">@app.route</span><span class="p">(</span><span class="s">'/job_listener'</span><span class="p">,</span> <span class="n">methods</span><span class="o">=</span><span class="p">[</span><span class="s">'POST'</span><span class="p">])</span>
<span class="n">async</span> <span class="k">def</span> <span class="nf">job_listener</span><span class="p">(</span><span class="n">request</span><span class="p">):</span>
    <span class="k">try</span><span class="p">:</span>
        <span class="n">res</span> <span class="o">=</span> <span class="n">request</span><span class="o">.</span><span class="n">json</span>
        <span class="n">links</span> <span class="o">=</span> <span class="n">res</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">'_links'</span><span class="p">,</span> <span class="p">[])</span>
        <span class="k">for</span> <span class="n">link</span> <span class="ow">in</span> <span class="n">links</span><span class="p">:</span>
            <span class="k">if</span> <span class="n">link</span><span class="p">[</span><span class="s">'rel'</span><span class="p">]</span> <span class="o">==</span> <span class="s">'results'</span><span class="p">:</span>
                <span class="c"># Sanic is async, but requests are synchronous, to fully take</span>
                <span class="c"># advantage of Sanic, use aiohttp.</span>
                <span class="n">res_response</span> <span class="o">=</span> <span class="n">requests</span><span class="o">.</span><span class="n">request</span><span class="p">(</span>
                    <span class="n">method</span><span class="o">=</span><span class="s">'GET'</span><span class="p">,</span>
                    <span class="n">url</span><span class="o">=</span><span class="n">link</span><span class="p">[</span><span class="s">'href'</span><span class="p">],</span>
                    <span class="n">auth</span><span class="o">=</span><span class="n">AUTH_TUPLE</span><span class="p">,</span>
                <span class="p">)</span>
                <span class="n">pprint</span><span class="p">(</span><span class="n">res_response</span><span class="o">.</span><span class="n">json</span><span class="p">())</span>
                <span class="k">break</span>
    <span class="k">except</span> <span class="nb">Exception</span> <span class="k">as</span> <span class="n">e</span><span class="p">:</span>
        <span class="k">print</span><span class="p">(</span><span class="s">"Listener exception: {}"</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="n">e</span><span class="p">))</span>
    <span class="k">return</span> <span class="n">response</span><span class="o">.</span><span class="n">json</span><span class="p">(</span><span class="n">status</span><span class="o">=</span><span class="mi">200</span><span class="p">,</span> <span class="n">body</span><span class="o">=</span><span class="p">{</span><span class="s">'status'</span><span class="p">:</span> <span class="s">'ok'</span><span class="p">})</span>


<span class="k">if</span> <span class="n">__name__</span> <span class="o">==</span> <span class="s">'__main__'</span><span class="p">:</span>
    <span class="n">app</span><span class="o">.</span><span class="n">run</span><span class="p">(</span><span class="n">host</span><span class="o">=</span><span class="s">'0.0.0.0'</span><span class="p">,</span> <span class="n">port</span><span class="o">=</span><span class="mi">8080</span><span class="p">)</span></code></pre>
</div>
<div class="su-tabs-pane su-u-clearfix su-u-trim" data-title="&lt;strong&gt;PHP&lt;/strong&gt;">
<pre class="highlight php tab-php"><code><span class="cp">&lt;?php</span>
<span class="nv">$stdout</span> <span class="o">=</span> <span class="nb">fopen</span><span class="p">(</span><span class="s1">'php://stdout'</span><span class="p">,</span> <span class="s1">'w'</span><span class="p">);</span>

<span class="k">if</span> <span class="p">(</span><span class="nb">isset</span><span class="p">(</span><span class="nv">$_POST</span><span class="p">))</span> <span class="p">{</span>
    <span class="nv">$result</span> <span class="o">=</span> <span class="nb">array_merge</span><span class="p">(</span><span class="nv">$_POST</span><span class="p">,</span> <span class="p">(</span><span class="k">array</span><span class="p">)</span> <span class="nb">json_decode</span><span class="p">(</span><span class="nb">file_get_contents</span><span class="p">(</span><span class="s1">'php://input'</span><span class="p">)));</span>

    <span class="nv">$ch</span> <span class="o">=</span> <span class="nb">curl_init</span><span class="p">();</span>

    <span class="nb">curl_setopt</span><span class="p">(</span><span class="nv">$ch</span><span class="p">,</span> <span class="nx">CURLOPT_URL</span><span class="p">,</span> <span class="s2">"https://data.oxylabs.io/v1/queries/"</span><span class="o">.</span><span class="nv">$result</span><span class="p">[</span><span class="s1">'id'</span><span class="p">]</span><span class="o">.</span><span class="s1">'/results'</span><span class="p">);</span>
    <span class="nb">curl_setopt</span><span class="p">(</span><span class="nv">$ch</span><span class="p">,</span> <span class="nx">CURLOPT_RETURNTRANSFER</span><span class="p">,</span> <span class="mi">1</span><span class="p">);</span>
    <span class="nb">curl_setopt</span><span class="p">(</span><span class="nv">$ch</span><span class="p">,</span> <span class="nx">CURLOPT_CUSTOMREQUEST</span><span class="p">,</span> <span class="s2">"GET"</span><span class="p">);</span>
    <span class="nb">curl_setopt</span><span class="p">(</span><span class="nv">$ch</span><span class="p">,</span> <span class="nx">CURLOPT_USERPWD</span><span class="p">,</span> <span class="s2">"user"</span> <span class="o">.</span> <span class="s2">":"</span> <span class="o">.</span> <span class="s2">"pass1"</span><span class="p">);</span>

    <span class="nv">$result</span> <span class="o">=</span> <span class="nb">curl_exec</span><span class="p">(</span><span class="nv">$ch</span><span class="p">);</span>
    <span class="nb">fwrite</span><span class="p">(</span><span class="nv">$stdout</span><span class="p">,</span> <span class="nv">$result</span><span class="p">);</span>

    <span class="k">if</span> <span class="p">(</span><span class="nb">curl_errno</span><span class="p">(</span><span class="nv">$ch</span><span class="p">))</span> <span class="p">{</span>
        <span class="k">echo</span> <span class="s1">'Error:'</span> <span class="o">.</span> <span class="nb">curl_error</span><span class="p">(</span><span class="nv">$ch</span><span class="p">);</span>
    <span class="p">}</span>
    <span class="nb">curl_close</span> <span class="p">(</span><span class="nv">$ch</span><span class="p">);</span>
<span class="p">}</span>
<span class="cp">?&gt;</span></code></pre>
</div>
<div class="su-tabs-pane su-u-clearfix su-u-trim" data-title="&lt;strong&gt;HTTP&lt;/strong&gt;">
<pre class="highlight http tab-http"><code><span class="err">HTTP method is currently not supported</span></code></pre>
</div></div></div>
<p>Sample callback output</p>
<pre class="highlight json tab-json"><code><span class="p">{</span>  
   <span class="s2">"created_at"</span><span class="p">:</span><span class="s2">"2019-10-01 00:00:01"</span><span class="p">,</span>
   <span class="s2">"updated_at"</span><span class="p">:</span><span class="s2">"2019-10-01 00:00:15"</span><span class="p">,</span>
   <span class="s2">"locale"</span><span class="p">:</span><span class="kc">null</span><span class="p">,</span>
   <span class="s2">"client_id"</span><span class="p">:</span><span class="mi">163</span><span class="p">,</span>
   <span class="s2">"user_agent_type"</span><span class="p">:</span><span class="s2">"desktop"</span><span class="p">,</span>
   <span class="s2">"source"</span><span class="p">:</span><span class="s2">"universal_ecommerce"</span><span class="p">,</span>
   <span class="s2">"pages"</span><span class="p">:</span><span class="mi">1</span><span class="p">,</span>
   <span class="s2">"subdomain"</span><span class="p">:</span><span class="s2">"www"</span><span class="p">,</span>
   <span class="s2">"status"</span><span class="p">:</span><span class="s2">"done"</span><span class="p">,</span>
   <span class="s2">"start_page"</span><span class="p">:</span><span class="mi">1</span><span class="p">,</span>
   <span class="s2">"parse"</span><span class="p">:</span><span class="mi">0</span><span class="p">,</span>
   <span class="s2">"render"</span><span class="p">:</span><span class="kc">null</span><span class="p">,</span>
   <span class="s2">"priority"</span><span class="p">:</span><span class="mi">0</span><span class="p">,</span>
   <span class="s2">"ttl"</span><span class="p">:</span><span class="mi">0</span><span class="p">,</span>
   <span class="s2">"origin"</span><span class="p">:</span><span class="s2">"api"</span><span class="p">,</span>
   <span class="s2">"persist"</span><span class="p">:</span><span class="kc">true</span><span class="p">,</span>
   <span class="s2">"id"</span><span class="p">:</span><span class="s2">"12345678900987654321"</span><span class="p">,</span>
   <span class="s2">"callback_url"</span><span class="p">:</span><span class="s2">"http://your.callback.url/"</span><span class="p">,</span>
   <span class="s2">"url"</span><span class="p">:</span><span class="s2">"https://books.toscrape.com/catalogue/a-light-in-the-attic_1000/index.html"</span><span class="p">,</span>
   <span class="s2">"domain"</span><span class="p">:</span><span class="s2">"de"</span><span class="p">,</span>
   <span class="s2">"limit"</span><span class="p">:</span><span class="mi">10</span><span class="p">,</span>
   <span class="s2">"geo_location"</span><span class="p">:</span><span class="kc">null</span><span class="p">,</span>
   <span class="p">{</span><span class="err">...</span><span class="p">}</span>
   <span class="s2">"_links"</span><span class="p">:[</span>
      <span class="p">{</span>  
         <span class="s2">"href"</span><span class="p">:</span><span class="s2">"https://data.oxylabs.io/v1/queries/12345678900987654321"</span><span class="p">,</span>
         <span class="s2">"method"</span><span class="p">:</span><span class="s2">"GET"</span><span class="p">,</span>
         <span class="s2">"rel"</span><span class="p">:</span><span class="s2">"self"</span>
      <span class="p">},</span>
      <span class="p">{</span>  
         <span class="s2">"href"</span><span class="p">:</span><span class="s2">"https://data.oxylabs.io/v1/queries/12345678900987654321/results"</span><span class="p">,</span>
         <span class="s2">"method"</span><span class="p">:</span><span class="s2">"GET"</span><span class="p">,</span>
         <span class="s2">"rel"</span><span class="p">:</span><span class="s2">"results"</span>
      <span class="p">}</span>
   <span class="p">],</span>
<span class="p">}</span></code></pre>
<hr />
<h4 id="batch-query">Batch Query</h4>
<p>Scraper API also accepts multiple keywords per query, up to 1,000 keywords with each batch. The following endpoint will submit multiple keywords to the extraction queue.</p>
<div class="endpoint">
<pre><strong>POST https://data.oxylabs.io/v1/queries/batch</strong></pre>
</div>
<p>You need to post query parameters as data in the JSON body.</p>
<p>The system will handle every keyword as a separate request. If you provided a callback URL, you will get a separate call for each keyword. Otherwise, our initial response will contain job <code>id</code>s for all keywords. For example, if you sent 50 keywords, we will return 50 unique job <code>id</code>s.</p>
<p>Important! <code>query</code> is the only parameter that can have multiple values. All other parameters are the same for that batch query.</p>
<div class="su-tabs su-tabs-style-default su-tabs-mobile-stack" data-active="4" data-scroll-offset="0" data-anchor-in-url="no"><div class="su-tabs-nav"><span class="" data-url="" data-target="blank" tabindex="0" role="button"><strong>cURL</strong></span><span class="" data-url="" data-target="blank" tabindex="0" role="button"><strong>Python</strong></span><span class="" data-url="" data-target="blank" tabindex="0" role="button"><strong>PHP</strong></span><span class="" data-url="" data-target="blank" tabindex="0" role="button"><strong>HTTP</strong></span></div><div class="su-tabs-panes"><div class="su-tabs-pane su-u-clearfix su-u-trim" data-title="&lt;strong&gt;cURL&lt;/strong&gt;">
<pre class="highlight shell tab-shell"><code>curl --user user:pass1 <span class="s1">'https://data.oxylabs.io/v1/queries/batch'</span> -H <span class="s1">'Content-Type: application/json'</span> <span class="se">\</span>
 -d <span class="s1">'@keywords.json'</span></code></pre>
</div>
<div class="su-tabs-pane su-u-clearfix su-u-trim" data-title="&lt;strong&gt;Python&lt;/strong&gt;">
<pre class="highlight python tab-python"><code><span class="kn">import</span> <span class="nn">requests</span>
<span class="kn">import</span> <span class="nn">json</span>
<span class="kn">from</span> <span class="nn">pprint</span> <span class="kn">import</span> <span class="n">pprint</span>


<span class="c"># Get payload from file.</span>
<span class="k">with</span> <span class="nb">open</span><span class="p">(</span><span class="s">'keywords.json'</span><span class="p">,</span> <span class="s">'r'</span><span class="p">)</span> <span class="k">as</span> <span class="n">f</span><span class="p">:</span>
    <span class="n">payload</span> <span class="o">=</span> <span class="n">json</span><span class="o">.</span><span class="n">loads</span><span class="p">(</span><span class="n">f</span><span class="o">.</span><span class="n">read</span><span class="p">())</span>

<span class="n">response</span> <span class="o">=</span> <span class="n">requests</span><span class="o">.</span><span class="n">request</span><span class="p">(</span>
    <span class="s">'POST'</span><span class="p">,</span>
    <span class="s">'https://data.oxylabs.io/v1/queries/batch'</span><span class="p">,</span>
    <span class="n">auth</span><span class="o">=</span><span class="p">(</span><span class="s">'user'</span><span class="p">,</span> <span class="s">'pass1'</span><span class="p">),</span>
    <span class="n">json</span><span class="o">=</span><span class="n">payload</span><span class="p">,</span>
<span class="p">)</span>

<span class="c"># Print prettified response.</span>
<span class="n">pprint</span><span class="p">(</span><span class="n">response</span><span class="o">.</span><span class="n">json</span><span class="p">())</span></code></pre>
</div>
<div class="su-tabs-pane su-u-clearfix su-u-trim" data-title="&lt;strong&gt;PHP&lt;/strong&gt;">
<pre class="highlight php tab-php"><code><span class="cp">&lt;?php</span>

<span class="nv">$paramsFile</span> <span class="o">=</span> <span class="nb">file_get_contents</span><span class="p">(</span><span class="nb">realpath</span><span class="p">(</span><span class="s2">"keywords.json"</span><span class="p">));</span>
<span class="nv">$ch</span> <span class="o">=</span> <span class="nb">curl_init</span><span class="p">();</span>

<span class="nb">curl_setopt</span><span class="p">(</span><span class="nv">$ch</span><span class="p">,</span> <span class="nx">CURLOPT_URL</span><span class="p">,</span> <span class="s2">"https://data.oxylabs.io/v1/queries/batch"</span><span class="p">);</span>
<span class="nb">curl_setopt</span><span class="p">(</span><span class="nv">$ch</span><span class="p">,</span> <span class="nx">CURLOPT_RETURNTRANSFER</span><span class="p">,</span> <span class="mi">1</span><span class="p">);</span>
<span class="nb">curl_setopt</span><span class="p">(</span><span class="nv">$ch</span><span class="p">,</span> <span class="nx">CURLOPT_POSTFIELDS</span><span class="p">,</span> <span class="nv">$paramsFile</span><span class="p">);</span>
<span class="nb">curl_setopt</span><span class="p">(</span><span class="nv">$ch</span><span class="p">,</span> <span class="nx">CURLOPT_POST</span><span class="p">,</span> <span class="mi">1</span><span class="p">);</span>
<span class="nb">curl_setopt</span><span class="p">(</span><span class="nv">$ch</span><span class="p">,</span> <span class="nx">CURLOPT_USERPWD</span><span class="p">,</span> <span class="s2">"user"</span> <span class="o">.</span> <span class="s2">":"</span> <span class="o">.</span> <span class="s2">"pass1"</span><span class="p">);</span>

<span class="nv">$headers</span> <span class="o">=</span> <span class="k">array</span><span class="p">();</span>
<span class="nv">$headers</span><span class="p">[]</span> <span class="o">=</span> <span class="s2">"Content-Type: application/json"</span><span class="p">;</span>
<span class="nb">curl_setopt</span><span class="p">(</span><span class="nv">$ch</span><span class="p">,</span> <span class="nx">CURLOPT_HTTPHEADER</span><span class="p">,</span> <span class="nv">$headers</span><span class="p">);</span>

<span class="nv">$result</span> <span class="o">=</span> <span class="nb">curl_exec</span><span class="p">(</span><span class="nv">$ch</span><span class="p">);</span>
<span class="k">echo</span> <span class="nv">$result</span><span class="p">;</span>

<span class="k">if</span> <span class="p">(</span><span class="nb">curl_errno</span><span class="p">(</span><span class="nv">$ch</span><span class="p">))</span> <span class="p">{</span>
    <span class="k">echo</span> <span class="s1">'Error:'</span> <span class="o">.</span> <span class="nb">curl_error</span><span class="p">(</span><span class="nv">$ch</span><span class="p">);</span>
<span class="p">}</span>
<span class="nb">curl_close</span> <span class="p">(</span><span class="nv">$ch</span><span class="p">);</span>
<span class="cp">?&gt;</span></code></pre>
</div>
<div class="su-tabs-pane su-u-clearfix su-u-trim" data-title="&lt;strong&gt;HTTP&lt;/strong&gt;">
<pre class="highlight http tab-http"><code><span class="err">HTTP method is currently not supported</span></code></pre>
</div></div></div>
<p><code>keywords.json</code> content:</p>
<pre class="highlight json tab-json"><code><span class="p">{</span>  
   <span class="s2">"url"</span><span class="p">:[</span>  
      <span class="s2">"https://books.toscrape.com/catalogue/a-light-in-the-attic_1000/index.html"</span><span class="p">,</span>
      <span class="s2">"https://books.toscrape.com/catalogue/tipping-the-velvet_999/index.html"</span><span class="p">,</span>
      <span class="s2">"https://books.toscrape.com/catalogue/soumission_998/index.html"</span>
   <span class="p">],</span>
   <span class="s2">"source"</span><span class="p">:</span> <span class="s2">"universal_ecommerce"</span><span class="p">,</span>
   <span class="s2">"callback_url"</span><span class="p">:</span> <span class="s2">"https://your.callback.url"</span>
<span class="p">}</span>
</code></pre>
<p>The API will respond with query information in JSON format, by printing it in the response body, similar to this:</p>
<pre class="highlight json tab-json"><code><span class="p">{</span>
  <span class="s2">"queries"</span><span class="p">:</span> <span class="p">[</span>
    <span class="p">{</span>
      <span class="s2">"callback_url"</span><span class="p">:</span> <span class="s2">"https://your.callback.url"</span><span class="p">,</span>
      <span class="p">{</span><span class="err">...</span><span class="p">}</span>
      <span class="s2">"created_at"</span><span class="p">:</span> <span class="s2">"2019-10-01 00:00:01"</span><span class="p">,</span>
      <span class="s2">"domain"</span><span class="p">:</span> <span class="s2">"com"</span><span class="p">,</span>
      <span class="s2">"id"</span><span class="p">:</span> <span class="s2">"12345678900987654321"</span><span class="p">,</span>
      <span class="p">{</span><span class="err">...</span><span class="p">}</span>
      <span class="s2">"url"</span><span class="p">:</span> <span class="s2">"https://books.toscrape.com/catalogue/a-light-in-the-attic_1000/index.html"</span><span class="p">,</span>
      <span class="s2">"source"</span><span class="p">:</span> <span class="s2">"universal_ecommerce"</span><span class="p">,</span>
      <span class="p">{</span><span class="err">...</span><span class="p">}</span>
          <span class="s2">"rel"</span><span class="p">:</span> <span class="s2">"results"</span><span class="p">,</span>
          <span class="s2">"href"</span><span class="p">:</span> <span class="s2">"http://data.oxylabs.io/v1/queries/12345678900987654321/results"</span><span class="p">,</span>
          <span class="s2">"method"</span><span class="p">:</span> <span class="s2">"GET"</span>
        <span class="p">}</span>
      <span class="p">]</span>
    <span class="p">},</span>
    <span class="p">{</span>
      <span class="s2">"callback_url"</span><span class="p">:</span> <span class="s2">"https://your.callback.url"</span><span class="p">,</span>
      <span class="p">{</span><span class="err">...</span><span class="p">}</span>
      <span class="s2">"created_at"</span><span class="p">:</span> <span class="s2">"2019-10-01 00:00:01"</span><span class="p">,</span>
      <span class="s2">"domain"</span><span class="p">:</span> <span class="s2">"com"</span><span class="p">,</span>
      <span class="s2">"id"</span><span class="p">:</span> <span class="s2">"12345678901234567890"</span><span class="p">,</span>
      <span class="p">{</span><span class="err">...</span><span class="p">}</span>
      <span class="s2">"url"</span><span class="p">:</span> <span class="s2">"https://books.toscrape.com/catalogue/tipping-the-velvet_999/index.html"</span><span class="p">,</span>
      <span class="s2">"source"</span><span class="p">:</span> <span class="s2">"universal_ecommerce"</span><span class="p">,</span>
      <span class="p">{</span><span class="err">...</span><span class="p">}</span>
          <span class="s2">"rel"</span><span class="p">:</span> <span class="s2">"results"</span><span class="p">,</span>
          <span class="s2">"href"</span><span class="p">:</span> <span class="s2">"http://data.oxylabs.io/v1/queries/12345678901234567890/results"</span><span class="p">,</span>
          <span class="s2">"method"</span><span class="p">:</span> <span class="s2">"GET"</span>
        <span class="p">}</span>
      <span class="p">]</span>
    <span class="p">},</span>
    <span class="p">{</span>
      <span class="s2">"callback_url"</span><span class="p">:</span> <span class="s2">"https://your.callback.url"</span><span class="p">,</span>
      <span class="p">{</span><span class="err">...</span><span class="p">}</span>
      <span class="s2">"created_at"</span><span class="p">:</span> <span class="s2">"2019-10-01 00:00:01"</span><span class="p">,</span>
      <span class="s2">"domain"</span><span class="p">:</span> <span class="s2">"com"</span><span class="p">,</span>
      <span class="s2">"id"</span><span class="p">:</span> <span class="s2">"01234567899876543210"</span><span class="p">,</span>
      <span class="p">{</span><span class="err">...</span><span class="p">}</span>
      <span class="s2">"url"</span><span class="p">:</span> <span class="s2">"https://books.toscrape.com/catalogue/soumission_998/index.html"</span><span class="p">,</span>
      <span class="s2">"source"</span><span class="p">:</span> <span class="s2">"universal_ecommerce"</span><span class="p">,</span>
      <span class="p">{</span><span class="err">...</span><span class="p">}</span>
          <span class="s2">"rel"</span><span class="p">:</span> <span class="s2">"results"</span><span class="p">,</span>
          <span class="s2">"href"</span><span class="p">:</span> <span class="s2">"http://data.oxylabs.io/v1/queries/01234567899876543210/results"</span><span class="p">,</span>
          <span class="s2">"method"</span><span class="p">:</span> <span class="s2">"GET"</span>
        <span class="p">}</span>
      <span class="p">]</span>
    <span class="p">}</span>
  <span class="p">]</span>
<span class="p">}</span></code></pre>
<hr />
<h4 id="get-notifier-ip-address-list">Get Notifier IP Address List</h4>
<p>You may want to whitelist the IPs sending you callback messages or get the list of these IPs for other purposes. This can be done by <code>GET</code>ing this endpoint: <code>https://data.oxylabs.io/v1/info/callbacker_ips</code>.</p>
<div class="su-tabs su-tabs-style-default su-tabs-mobile-stack" data-active="4" data-scroll-offset="0" data-anchor-in-url="no"><div class="su-tabs-nav"><span class="" data-url="" data-target="blank" tabindex="0" role="button"><strong>cURL</strong></span><span class="" data-url="" data-target="blank" tabindex="0" role="button"><strong>Python</strong></span><span class="" data-url="" data-target="blank" tabindex="0" role="button"><strong>PHP</strong></span><span class="" data-url="" data-target="blank" tabindex="0" role="button"><strong>HTTP</strong></span></div><div class="su-tabs-panes"><div class="su-tabs-pane su-u-clearfix su-u-trim" data-title="&lt;strong&gt;cURL&lt;/strong&gt;">
<pre class="highlight shell tab-shell"><code>curl --user user:pass1 <span class="s1">'https://data.oxylabs.io/v1/info/callbacker_ips'</span></code></pre>
</div>
<div class="su-tabs-pane su-u-clearfix su-u-trim" data-title="&lt;strong&gt;Python&lt;/strong&gt;">
<pre class="highlight python tab-python"><code><span class="kn">import</span> <span class="nn">requests</span>
<span class="kn">from</span> <span class="nn">pprint</span> <span class="kn">import</span> <span class="n">pprint</span>

<span class="c"># Get response from the callback IPs endpoint.</span>
<span class="n">response</span> <span class="o">=</span> <span class="n">requests</span><span class="o">.</span><span class="n">request</span><span class="p">(</span>
    <span class="n">method</span><span class="o">=</span><span class="s">'GET'</span><span class="p">,</span>
    <span class="n">url</span><span class="o">=</span><span class="s">'https://data.oxylabs.io/v1/info/callbacker_ips'</span><span class="p">,</span>
    <span class="n">auth</span><span class="o">=</span><span class="p">(</span><span class="s">'user'</span><span class="p">,</span> <span class="s">'pass1'</span><span class="p">),</span>
<span class="p">)</span>

<span class="c"># Print the prettified JSON response to stdout.</span>
<span class="n">pprint</span><span class="p">(</span><span class="n">response</span><span class="o">.</span><span class="n">json</span><span class="p">())</span></code></pre>
</div>
<div class="su-tabs-pane su-u-clearfix su-u-trim" data-title="&lt;strong&gt;PHP&lt;/strong&gt;">
<pre class="highlight php tab-php"><code><span class="cp">&lt;?php</span>

<span class="nv">$ch</span> <span class="o">=</span> <span class="nb">curl_init</span><span class="p">();</span>

<span class="nb">curl_setopt</span><span class="p">(</span><span class="nv">$ch</span><span class="p">,</span> <span class="nx">CURLOPT_URL</span><span class="p">,</span> <span class="s2">"https://data.oxylabs.io/v1/info/callbacker_ips"</span><span class="p">);</span>
<span class="nb">curl_setopt</span><span class="p">(</span><span class="nv">$ch</span><span class="p">,</span> <span class="nx">CURLOPT_RETURNTRANSFER</span><span class="p">,</span> <span class="mi">1</span><span class="p">);</span>
<span class="nb">curl_setopt</span><span class="p">(</span><span class="nv">$ch</span><span class="p">,</span> <span class="nx">CURLOPT_CUSTOMREQUEST</span><span class="p">,</span> <span class="s2">"GET"</span><span class="p">);</span>
<span class="nb">curl_setopt</span><span class="p">(</span><span class="nv">$ch</span><span class="p">,</span> <span class="nx">CURLOPT_USERPWD</span><span class="p">,</span> <span class="s2">"user"</span> <span class="o">.</span> <span class="s2">":"</span> <span class="o">.</span> <span class="s2">"pass1"</span><span class="p">);</span>

<span class="nv">$result</span> <span class="o">=</span> <span class="nb">curl_exec</span><span class="p">(</span><span class="nv">$ch</span><span class="p">);</span>
<span class="k">echo</span> <span class="nv">$result</span><span class="p">;</span>

<span class="k">if</span> <span class="p">(</span><span class="nb">curl_errno</span><span class="p">(</span><span class="nv">$ch</span><span class="p">))</span> <span class="p">{</span>
    <span class="k">echo</span> <span class="s1">'Error:'</span> <span class="o">.</span> <span class="nb">curl_error</span><span class="p">(</span><span class="nv">$ch</span><span class="p">);</span>
<span class="p">}</span>
<span class="nb">curl_close</span> <span class="p">(</span><span class="nv">$ch</span><span class="p">);</span>
<span class="cp">?&gt;</span></code></pre>
</div>
<div class="su-tabs-pane su-u-clearfix su-u-trim" data-title="&lt;strong&gt;HTTP&lt;/strong&gt;">
<pre class="highlight http tab-http"><code><span class="err">HTTP method is currently not supported</span></code></pre>
</div></div></div>
<p>The API will return the list of IPs making callback requests to your system:</p>
<pre class="highlight json tab-json"><code><span class="p">{</span>
    <span class="s2">"ips"</span><span class="p">:</span> <span class="p">[</span>
        <span class="s2">"x.x.x.x"</span><span class="p">,</span>
        <span class="s2">"y.y.y.y"</span>
    <span class="p">]</span>
<span class="p">}</span></code></pre>
<hr />
<h4 id="upload-to-storage">Upload to Storage</h4>
<p>By default, Ecommerce Spraper API's job results are stored in our databases. This means that you will need to query our results endpoint and retrieve the content yourself. Custom storage feature allows you to store results in your own cloud storage. The advantages of this feature are that you do not need extra requests to fetch results &#8211; everything goes directly to your storage bucket.</p>
<p>At the moment, we only support Amazon S3. If you want to use a different type of storage, contact your account manager to discuss the timeline.</p>
<p>In order to upload job results to your Amazon S3 bucket, you need to set up special permissions. To do that, go to <code>https://s3.console.aws.amazon.com/ &gt; S3 &gt; Storage &gt; Bucket Name (if don't have one, create new) &gt; Permissions &gt; Bucket Policy</code></p>
<p><img loading="lazy" decoding="async" class="aligncenter size-full wp-image-9123" src="https://www.proxysp.com/wp-content/uploads/2021/11/Oxylabs-ECommerce-Universal-Scraper-API-Upload-to-Storage.png" alt="Oxylabs ECommerce Universal Scraper API Upload to Storage" width="482" height="319" srcset="https://proxysp.com/wp-content/uploads/2021/11/Oxylabs-ECommerce-Universal-Scraper-API-Upload-to-Storage.png 482w, https://proxysp.com/wp-content/uploads/2021/11/Oxylabs-ECommerce-Universal-Scraper-API-Upload-to-Storage-300x199.png 300w" sizes="(max-width: 482px) 100vw, 482px" /></p>
<p>You can find the bucket policy in this <a class="custom_link" href="https://developers.oxylabs.io/resources/s3_bucket_policy.json" target="_blank" rel="noopener">JSON</a> or in the code sample area on the right. Do not forget to change the bucket name under <code>YOUR_BUCKET_NAME</code>. This policy allows us to write to your bucket, upload files for you, and know the bucket location.</p>
<p>To use this feature and you will need to specify two additional parameters in your requests. Learn more <a class="custom_link" href="#direct">here</a>.</p>
<p>The upload path looks like this: <code>YOUR_BUCKET_NAME/job_ID.json</code>. You will find the job ID in the response body that you will receive from us after submitting a request. In <a class="custom_link" href="#single-query">this example</a> job ID is <code>12345678900987654321</code>.</p>
<pre class="highlight json tab-json"><code><span class="p">{</span>
    <span class="s2">"Version"</span><span class="p">:</span> <span class="s2">"2012-10-17"</span><span class="p">,</span>
    <span class="s2">"Id"</span><span class="p">:</span> <span class="s2">"Policy1577442634787"</span><span class="p">,</span>
    <span class="s2">"Statement"</span><span class="p">:</span> <span class="p">[</span>
        <span class="p">{</span>
            <span class="s2">"Sid"</span><span class="p">:</span> <span class="s2">"Stmt1577442633719"</span><span class="p">,</span>
            <span class="s2">"Effect"</span><span class="p">:</span> <span class="s2">"Allow"</span><span class="p">,</span>
            <span class="s2">"Principal"</span><span class="p">:</span> <span class="p">{</span>
                <span class="s2">"AWS"</span><span class="p">:</span> <span class="s2">"arn:aws:iam::324311890426:user/oxylabs.s3.uploader"</span>
            <span class="p">},</span>
            <span class="s2">"Action"</span><span class="p">:</span> <span class="s2">"s3:GetBucketLocation"</span><span class="p">,</span>
            <span class="s2">"Resource"</span><span class="p">:</span> <span class="s2">"arn:aws:s3:::YOUR_BUCKET_NAME"</span>
        <span class="p">},</span>
        <span class="p">{</span>
            <span class="s2">"Sid"</span><span class="p">:</span> <span class="s2">"Stmt1577442633719"</span><span class="p">,</span>
            <span class="s2">"Effect"</span><span class="p">:</span> <span class="s2">"Allow"</span><span class="p">,</span>
            <span class="s2">"Principal"</span><span class="p">:</span> <span class="p">{</span>
                <span class="s2">"AWS"</span><span class="p">:</span> <span class="s2">"arn:aws:iam::324311890426:user/oxylabs.s3.uploader"</span>
            <span class="p">},</span>
            <span class="s2">"Action"</span><span class="p">:</span> <span class="p">[</span>
                <span class="s2">"s3:PutObject"</span><span class="p">,</span>
                <span class="s2">"s3:PutObjectAcl"</span>
            <span class="p">],</span>
            <span class="s2">"Resource"</span><span class="p">:</span> <span class="s2">"arn:aws:s3:::YOUR_BUCKET_NAME/*"</span>
        <span class="p">}</span>
    <span class="p">]</span>
<span class="p">}</span></code></pre>
<hr />
<h3 id="realtime">Realtime</h3>
<p>The data submission is the same as in Push-Pull method, but with Realtime, we will return the content on open connection. You send us a query, the connection remains open, we retrieve the content, and bring it to you. The endpoint that handles that is this:</p>
<div class="endpoint">
<pre><strong>POST https://realtime.oxylabs.io/v1/queries</strong></pre>
</div>
<p>The timeout limit for open connections is 100 seconds. Therefore, in rare cases of heavy load, we may not be able to ensure the data gets to you.</p>
<p>You need to post query parameters as data in the JSON body. Please see an example for more details.</p>
<div class="su-tabs su-tabs-style-default su-tabs-mobile-stack" data-active="4" data-scroll-offset="0" data-anchor-in-url="no"><div class="su-tabs-nav"><span class="" data-url="" data-target="blank" tabindex="0" role="button"><strong>cURL</strong></span><span class="" data-url="" data-target="blank" tabindex="0" role="button"><strong>Python</strong></span><span class="" data-url="" data-target="blank" tabindex="0" role="button"><strong>PHP</strong></span><span class="" data-url="" data-target="blank" tabindex="0" role="button"><strong>HTTP</strong></span></div><div class="su-tabs-panes"><div class="su-tabs-pane su-u-clearfix su-u-trim" data-title="&lt;strong&gt;cURL&lt;/strong&gt;">
<pre class="highlight shell tab-shell"><code>curl --user user:pass1 <span class="s1">'https://realtime.oxylabs.io/v1/queries'</span> -H <span class="s2">"Content-Type: application/json"</span> <span class="se">\</span>
 -d <span class="s1">'{"source": "universal_ecommerce", "url": "https://books.toscrape.com/catalogue/a-light-in-the-attic_1000/index.html"}'</span></code></pre>
</div>
<div class="su-tabs-pane su-u-clearfix su-u-trim" data-title="&lt;strong&gt;Python&lt;/strong&gt;">
<pre class="highlight python tab-python"><code><span class="kn">import</span> <span class="nn">requests</span>
<span class="kn">from</span> <span class="nn">pprint</span> <span class="kn">import</span> <span class="n">pprint</span>


<span class="c"># Structure payload.</span>
<span class="n">payload</span> <span class="o">=</span> <span class="p">{</span>
    <span class="s">'source'</span><span class="p">:</span> <span class="s">'universal_ecommerce'</span><span class="p">,</span>
    <span class="s">'url'</span><span class="p">:</span> <span class="s">'https://books.toscrape.com/catalogue/a-light-in-the-attic_1000/index.html'</span><span class="p">,</span>
<span class="p">}</span>

<span class="c"># Get response.</span>
<span class="n">response</span> <span class="o">=</span> <span class="n">requests</span><span class="o">.</span><span class="n">request</span><span class="p">(</span>
    <span class="s">'POST'</span><span class="p">,</span>
    <span class="s">'https://realtime.oxylabs.io/v1/queries'</span><span class="p">,</span>
    <span class="n">auth</span><span class="o">=</span><span class="p">(</span><span class="s">'user'</span><span class="p">,</span> <span class="s">'pass1'</span><span class="p">),</span>
    <span class="n">json</span><span class="o">=</span><span class="n">payload</span><span class="p">,</span>
<span class="p">)</span>

<span class="c"># Instead of response with job status and results url, this will return the</span>
<span class="c"># JSON response with results.</span>
<span class="n">pprint</span><span class="p">(</span><span class="n">response</span><span class="o">.</span><span class="n">json</span><span class="p">())</span></code></pre>
</div>
<div class="su-tabs-pane su-u-clearfix su-u-trim" data-title="&lt;strong&gt;PHP&lt;/strong&gt;">
<pre class="highlight php tab-php"><code><span class="cp">&lt;?php</span>

<span class="nv">$params</span> <span class="o">=</span> <span class="k">array</span><span class="p">(</span>
    <span class="s1">'source'</span> <span class="o">=&gt;</span> <span class="s1">'universal_ecommerce'</span><span class="p">,</span>
    <span class="s1">'query'</span> <span class="o">=&gt;</span> <span class="s1">'sofa'</span><span class="p">,</span>
<span class="p">);</span>

<span class="nv">$ch</span> <span class="o">=</span> <span class="nb">curl_init</span><span class="p">();</span>

<span class="nb">curl_setopt</span><span class="p">(</span><span class="nv">$ch</span><span class="p">,</span> <span class="nx">CURLOPT_URL</span><span class="p">,</span> <span class="s2">"https://realtime.oxylabs.io/v1/queries"</span><span class="p">);</span>
<span class="nb">curl_setopt</span><span class="p">(</span><span class="nv">$ch</span><span class="p">,</span> <span class="nx">CURLOPT_RETURNTRANSFER</span><span class="p">,</span> <span class="mi">1</span><span class="p">);</span>
<span class="nb">curl_setopt</span><span class="p">(</span><span class="nv">$ch</span><span class="p">,</span> <span class="nx">CURLOPT_POSTFIELDS</span><span class="p">,</span> <span class="nb">json_encode</span><span class="p">(</span><span class="nv">$params</span><span class="p">));</span>
<span class="nb">curl_setopt</span><span class="p">(</span><span class="nv">$ch</span><span class="p">,</span> <span class="nx">CURLOPT_POST</span><span class="p">,</span> <span class="mi">1</span><span class="p">);</span>
<span class="nb">curl_setopt</span><span class="p">(</span><span class="nv">$ch</span><span class="p">,</span> <span class="nx">CURLOPT_USERPWD</span><span class="p">,</span> <span class="s2">"user"</span> <span class="o">.</span> <span class="s2">":"</span> <span class="o">.</span> <span class="s2">"pass1"</span><span class="p">);</span>

<span class="nv">$headers</span> <span class="o">=</span> <span class="k">array</span><span class="p">();</span>
<span class="nv">$headers</span><span class="p">[]</span> <span class="o">=</span> <span class="s2">"Content-Type: application/json"</span><span class="p">;</span>
<span class="nb">curl_setopt</span><span class="p">(</span><span class="nv">$ch</span><span class="p">,</span> <span class="nx">CURLOPT_HTTPHEADER</span><span class="p">,</span> <span class="nv">$headers</span><span class="p">);</span>

<span class="nv">$result</span> <span class="o">=</span> <span class="nb">curl_exec</span><span class="p">(</span><span class="nv">$ch</span><span class="p">);</span>
<span class="k">echo</span> <span class="nv">$result</span><span class="p">;</span>

<span class="k">if</span> <span class="p">(</span><span class="nb">curl_errno</span><span class="p">(</span><span class="nv">$ch</span><span class="p">))</span> <span class="p">{</span>
    <span class="k">echo</span> <span class="s1">'Error:'</span> <span class="o">.</span> <span class="nb">curl_error</span><span class="p">(</span><span class="nv">$ch</span><span class="p">);</span>
<span class="p">}</span>
<span class="nb">curl_close</span> <span class="p">(</span><span class="nv">$ch</span><span class="p">);</span>
<span class="cp">?&gt;</span></code></pre>
</div>
<div class="su-tabs-pane su-u-clearfix su-u-trim" data-title="&lt;strong&gt;HTTP&lt;/strong&gt;">
<pre class="highlight http tab-http"><code><span class="err"># URL has to be encoded to escape `&` and `=` characters. It is not necessary in this example.

https://realtime.oxylabs.io/v1/queries?source=universal_ecommerce&url=https://books.toscrape.com/catalogue/a-light-in-the-attic_1000/index.html&access_token=12345abcde</span></code></pre>
</div></div></div>
<p>Example response body that will be returned on open connection:</p>
<pre class="highlight json tab-json"><code><span class="p">{</span>
  <span class="s2">"results"</span><span class="p">:</span> <span class="p">[</span>
    <span class="p">{</span>
      <span class="s2">"content"</span><span class="p">:</span> <span class="s2">"&lt;html&gt;
      CONTENT
      &lt;/html&gt;"</span>
      <span class="s2">"created_at"</span><span class="p">:</span> <span class="s2">"2019-10-01 00:00:01"</span><span class="p">,</span>
      <span class="s2">"updated_at"</span><span class="p">:</span> <span class="s2">"2019-10-01 00:00:15"</span><span class="p">,</span>
      <span class="s2">"id"</span><span class="p">:</span> <span class="kc">null</span><span class="p">,</span>
      <span class="s2">"page"</span><span class="p">:</span> <span class="mi">1</span><span class="p">,</span>
      <span class="s2">"url"</span><span class="p">:</span> <span class="s2">"https://books.toscrape.com/catalogue/a-light-in-the-attic_1000/index.html"</span><span class="p">,</span>
      <span class="s2">"job_id"</span><span class="p">:</span> <span class="s2">"12345678900987654321"</span><span class="p">,</span>
      <span class="s2">"status_code"</span><span class="p">:</span> <span class="mi">200</span>
    <span class="p">}</span>
  <span class="p">]</span>
<span class="p">}</span></code></pre>
<hr />
<h3 id="superapi">SuperAPI</h3>
<p>If you have ever used regular proxies for data scraping, integrating SuperAPI delivery method will be a breeze. You simply need to use our entry node as proxy, authorize with Scraper API credentials, and ignore certificates. In <code>cURL</code> it's <code>-k</code> or <code>--insecure</code>. Your data will reach you on open connection.</p>
<div class="endpoint">
<pre><strong>GET realtime.oxylabs.io:60000</strong></pre>
</div>
<p>SuperAPI only supports a handful of parameters since it <strong>only works with <a class="custom_link" href="#direct">Direct</a> data source</strong> where a full URL is provided. These parameters should be sent as headers. This is a list of accepted parameters:</p>
<table>
<tbody>
<tr>
<td><code>X-OxySERPs-User-Agent-Type</code></td>
<td>There is no way to indicate a specific User-Agent, but you can let us know which browser and platform to use. A list of supported User-Agents can be found <a class="custom_link" href="#user_agent_type">here</a>.</td>
</tr>
</tbody>
</table>
<p>If you need help setting up SuperAPI, get in touch with us at <a class="custom_link" href="mailto:support@oxylabs.io" target="_blank" rel="nofollow noopener">support@oxylabs.io</a>.</p>
<div class="su-tabs su-tabs-style-default su-tabs-mobile-stack" data-active="4" data-scroll-offset="0" data-anchor-in-url="no"><div class="su-tabs-nav"><span class="" data-url="" data-target="blank" tabindex="0" role="button"><strong>cURL</strong></span><span class="" data-url="" data-target="blank" tabindex="0" role="button"><strong>Python</strong></span><span class="" data-url="" data-target="blank" tabindex="0" role="button"><strong>PHP</strong></span><span class="" data-url="" data-target="blank" tabindex="0" role="button"><strong>HTTP</strong></span></div><div class="su-tabs-panes"><div class="su-tabs-pane su-u-clearfix su-u-trim" data-title="&lt;strong&gt;cURL&lt;/strong&gt;">
<pre class="highlight shell tab-shell"><code>curl -k <span class="se">\</span>
-x realtime.oxylabs.io:60000 <span class="se">\</span>
-U user:pass1 <span class="se">\</span>
-H <span class="s2">"X-OxySERPs-User-Agent-Type: desktop_chrome"</span> <span class="se">\</span>
<span class="s2">"https://books.toscrape.com/catalogue/a-light-in-the-attic_1000/index.html"</span></code></pre>
</div>
<div class="su-tabs-pane su-u-clearfix su-u-trim" data-title="&lt;strong&gt;Python&lt;/strong&gt;">
<pre class="highlight python tab-python"><code><span class="kn">import</span> <span class="nn">requests</span>
<span class="kn">from</span> <span class="nn">pprint</span> <span class="kn">import</span> <span class="n">pprint</span>

<span class="c"># Define proxy dict. Do not forget to put your real user and pass here as well.</span>
<span class="n">proxies</span> <span class="o">=</span> <span class="p">{</span>
  <span class="s">'http'</span><span class="p">:</span> <span class="s">'http://user:pass1@realtime.oxylabs.io:60000'</span><span class="p">,</span>
  <span class="s">'https'</span><span class="p">:</span> <span class="s">'https://user:pass1@realtime.oxylabs.io:60000'</span><span class="p">,</span>
<span class="p">}</span>

<span class="n">response</span> <span class="o">=</span> <span class="n">requests</span><span class="o">.</span><span class="n">request</span><span class="p">(</span>
    <span class="s">'GET'</span><span class="p">,</span>
    <span class="s">'https://books.toscrape.com/catalogue/a-light-in-the-attic_1000/index.html'</span><span class="p">,</span>
    <span class="n">auth</span><span class="o">=</span><span class="p">(</span><span class="s">'user'</span><span class="p">,</span> <span class="s">'pass1'</span><span class="p">),</span>
    <span class="n">verify</span><span class="o">=</span><span class="bp">False</span><span class="p">,</span>  <span class="c"># Or accept our certificate.</span>
    <span class="n">proxies</span><span class="o">=</span><span class="n">proxies</span><span class="p">,</span>
<span class="p">)</span>

<span class="c"># Print result page to stdout</span>
<span class="n">pprint</span><span class="p">(</span><span class="n">response</span><span class="o">.</span><span class="n">text</span><span class="p">)</span>

<span class="c"># Save returned HTML to result.html file</span>
<span class="k">with</span> <span class="nb">open</span><span class="p">(</span><span class="s">'result.html'</span><span class="p">,</span> <span class="s">'w'</span><span class="p">)</span> <span class="k">as</span> <span class="n">f</span><span class="p">:</span>
    <span class="n">f</span><span class="o">.</span><span class="n">write</span><span class="p">(</span><span class="n">response</span><span class="o">.</span><span class="n">text</span><span class="p">)</span></code></pre>
</div>
<div class="su-tabs-pane su-u-clearfix su-u-trim" data-title="&lt;strong&gt;PHP&lt;/strong&gt;">
<pre class="highlight php tab-php"><code><span class="cp">&lt;?php</span>
<span class="nv">$ch</span> <span class="o">=</span> <span class="nb">curl_init</span><span class="p">();</span>

<span class="nb">curl_setopt</span><span class="p">(</span><span class="nv">$ch</span><span class="p">,</span> <span class="nx">CURLOPT_URL</span><span class="p">,</span> <span class="s2">"https://books.toscrape.com/catalogue/a-light-in-the-attic_1000/index.html"</span><span class="p">);</span>
<span class="nb">curl_setopt</span><span class="p">(</span><span class="nv">$ch</span><span class="p">,</span> <span class="nx">CURLOPT_RETURNTRANSFER</span><span class="p">,</span> <span class="mi">1</span><span class="p">);</span>
<span class="nb">curl_setopt</span><span class="p">(</span><span class="nv">$ch</span><span class="p">,</span> <span class="nx">CURLOPT_PROXY</span><span class="p">,</span> <span class="s1">'realtime.oxylabs.io:60000'</span><span class="p">);</span>
<span class="nb">curl_setopt</span><span class="p">(</span><span class="nv">$ch</span><span class="p">,</span> <span class="nx">CURLOPT_PROXYUSERPWD</span><span class="p">,</span> <span class="s2">"user"</span> <span class="o">.</span> <span class="s2">":"</span> <span class="o">.</span> <span class="s2">"pass1"</span><span class="p">);</span>
<span class="nb">curl_setopt</span><span class="p">(</span><span class="nv">$ch</span><span class="p">,</span> <span class="nx">CURLOPT_SSL_VERIFYPEER</span><span class="p">,</span> <span class="kc">false</span><span class="p">);</span>
<span class="nb">curl_setopt</span><span class="p">(</span><span class="nv">$ch</span><span class="p">,</span> <span class="nx">CURLOPT_SSL_VERIFYHOST</span><span class="p">,</span> <span class="kc">false</span><span class="p">);</span>

<span class="nv">$result</span> <span class="o">=</span> <span class="nb">curl_exec</span><span class="p">(</span><span class="nv">$ch</span><span class="p">);</span>
<span class="k">echo</span> <span class="nv">$result</span><span class="p">;</span>

<span class="k">if</span> <span class="p">(</span><span class="nb">curl_errno</span><span class="p">(</span><span class="nv">$ch</span><span class="p">))</span> <span class="p">{</span>
    <span class="k">echo</span> <span class="s1">'Error:'</span> <span class="o">.</span> <span class="nb">curl_error</span><span class="p">(</span><span class="nv">$ch</span><span class="p">);</span>
<span class="p">}</span>
<span class="nb">curl_close</span> <span class="p">(</span><span class="nv">$ch</span><span class="p">);</span>
<span class="cp">?&gt;</span></code></pre>
</div>
<div class="su-tabs-pane su-u-clearfix su-u-trim" data-title="&lt;strong&gt;HTTP&lt;/strong&gt;">
<pre class="highlight http tab-http"><code><span class="err">HTTP method is not supported with SuperAPI</span></code></pre>
</div></div></div>
<hr />
<h2 id="content-type">Content Type</h2>
<p>Scraper API returns <strong>raw HTML</strong>, as well as <strong>structured JSON</strong>.</p>
<h3 id="download-images">Download Images</h3>
<p>It is possible to download images via Scraper API. If you are doing that through SuperAPI, you can simply save the output to image extension. For example:</p>
<p><code>curl -k -x realtime.oxylabs.io:60000 -U user:pass1 "https://example.com/image.jpg" &gt;&gt; image.jpg</code></p>
<p>If you are using <a class="custom_link" href="#push-pull">Push-Pull</a> or <a class="custom_link" href="#realtime">Realtime</a> methods, you will need to add <code>content_encoding</code> parameter with a value of <code>base64</code>. Once you receive the results, you then need to decode encoded data from <code>content</code> into bytes and save it as an image file. Please find an example in Python on the right.</p>
<hr />
<h2 id="data-sources">Data Sources</h2>
<p>Scraper API accepts URLs, along with additional parameters, such as User-Agent type, proxy location, and others. See this method, which we call <a class="custom_link" href="#direct">Direct</a>, described below.</p>
<p>Scraper API is able to render JavaScript when scraping. This enables you to get more data from the web page and get screenshots.</p>
<p>If you are unsure about any part of the documentation, drop us a line at <a class="custom_link" href="mailto:support@oxylabs.io" target="_blank" rel="nofollow noopener">support@oxylabs.io</a> or contact your account manager.</p>
<hr />
<h3 id="direct">Direct</h3>
<p><img loading="lazy" decoding="async" class="size-full wp-image-9126 alignleft" src="https://www.proxysp.com/wp-content/uploads/2021/11/Oxylabs-ECommerce-Universal-Scraper-API-Direct.png" alt="Oxylabs ECommerce Universal Scraper API Direct" width="426" height="17" srcset="https://proxysp.com/wp-content/uploads/2021/11/Oxylabs-ECommerce-Universal-Scraper-API-Direct.png 426w, https://proxysp.com/wp-content/uploads/2021/11/Oxylabs-ECommerce-Universal-Scraper-API-Direct-300x12.png 300w" sizes="(max-width: 426px) 100vw, 426px" /></p>
<p>&nbsp;</p>
<p><code>universal_ecommerce</code> source is designed to retrieve the contents of any URL on the internet. <code>POST</code>-ing the parameters in JSON format to the following endpoint will submit the specified URL to the extraction queue.</p>
<p><span class="test">Query parameters</span></p>
<div class="su-table su-table-responsive su-table-alternate">
<table width="216">
<tbody>
<tr>
<td style="font-weight: 400;" width="72">Parameter</td>
<td style="font-weight: 400;" width="72">Description</td>
<td style="font-weight: 400;" width="72">Default Value</td>
</tr>
<tr>
<td style="font-weight: 400;" width="72">source</td>
<td style="font-weight: 400;" width="72">Data source</td>
<td style="font-weight: 400;" width="72">universal_ecommerce</td>
</tr>
<tr>
<td style="font-weight: 400;" width="72">url</td>
<td style="font-weight: 400;" width="72">Direct URL (link) to Universal page</td>
<td style="font-weight: 400;" width="72">&#8211;</td>
</tr>
<tr>
<td style="font-weight: 400;" width="72">user_agent_type</td>
<td style="font-weight: 400;" width="72">Device type and browser. The full list can be found <a href="#user_agent_type">here.</a></td>
<td style="font-weight: 400;" width="72">desktop</td>
</tr>
<tr>
<td style="font-weight: 400;" width="72">geo_location</td>
<td style="font-weight: 400;" width="72">Geo location of proxy used to retrieve the data. The full list of supported locations can be found <a href="#geo_location">here.</a></td>
<td style="font-weight: 400;" width="72"></td>
</tr>
<tr>
<td style="font-weight: 400;" width="72">locale</td>
<td style="font-weight: 400;" width="72">Locale, as expected in Accept-Language header.</td>
<td style="font-weight: 400;" width="72"></td>
</tr>
<tr>
<td style="font-weight: 400;" width="72">render</td>
<td style="font-weight: 400;" width="72">Enables JavaScript rendering. Use it when the target requires JavaScript to load content. Only works via Push-Pull (a.k.a. Callback) method. There are two available values for this parameter: html(get raw output) and png (get a Base64-encoded screenshot).</td>
<td style="font-weight: 400;" width="72"></td>
</tr>
<tr>
<td style="font-weight: 400;" width="72">content_encoding</td>
<td style="font-weight: 400;" width="72">Add this parameter if you are downloading images. Learn more <a href="#download-images">here.</a></td>
<td style="font-weight: 400;" width="72">base64</td>
</tr>
<tr>
<td style="font-weight: 400;" width="72">context:</td>
<td style="font-weight: 400;" rowspan="2" width="72">Base64-encoded POST request body. It is only useful if http_method is set to post.</td>
<td style="font-weight: 400;" rowspan="2" width="72">&#8211;</td>
</tr>
<tr>
<td style="font-weight: 400;" width="72">content</td>
</tr>
<tr>
<td style="font-weight: 400;" width="72">context:</td>
<td style="font-weight: 400;" rowspan="2" width="72">Pass your own cookies.</td>
<td style="font-weight: 400;" rowspan="2" width="72">&#8211;</td>
</tr>
<tr>
<td style="font-weight: 400;" width="72">cookies</td>
</tr>
<tr>
<td style="font-weight: 400;" width="72">context:</td>
<td style="font-weight: 400;" rowspan="2" width="72">Indicate whether you would like the scraper to follow redirects (3xx responses with a destination URL) to get the contents of the URL at the end of the redirect chain.</td>
<td style="font-weight: 400;" rowspan="2" width="72">&#8211;</td>
</tr>
<tr>
<td style="font-weight: 400;" width="72">follow_redirects</td>
</tr>
<tr>
<td style="font-weight: 400;" width="72">context:</td>
<td style="font-weight: 400;" rowspan="2" width="72">Pass your own headers.</td>
<td style="font-weight: 400;" rowspan="2" width="72">&#8211;</td>
</tr>
<tr>
<td style="font-weight: 400;" width="72">headers</td>
</tr>
<tr>
<td style="font-weight: 400;" width="72">context:</td>
<td style="font-weight: 400;" rowspan="2" width="72">Set it to post if you would like to make a POST request to your target URL via E-commerce Universal Scraper.</td>
<td style="font-weight: 400;" rowspan="2" width="72">get</td>
</tr>
<tr>
<td style="font-weight: 400;" width="72">http_method</td>
</tr>
<tr>
<td style="font-weight: 400;" width="72">context:</td>
<td style="font-weight: 400;" rowspan="2" width="72">If you want to use the same proxy with multiple requests, you can do so by using this parameter. Just set your session to any string you like, and we will assign a proxy to this ID and keep it for up to 10 minutes. After that, if you make another request with the same session ID, a new proxy will be assigned to that particular session ID.</td>
<td style="font-weight: 400;" rowspan="2" width="72">&#8211;</td>
</tr>
<tr>
<td style="font-weight: 400;" width="72">session_id</td>
</tr>
<tr>
<td style="font-weight: 400;" width="72">context:</td>
<td style="font-weight: 400;" rowspan="2" width="72">Define a custom HTTP response code (or a few of them), upon which we should consider the scrape successful and return the content to you. May be useful if you want us to return the 503 error page or in some other non-standard cases.</td>
<td style="font-weight: 400;" rowspan="2" width="72">&#8211;</td>
</tr>
<tr>
<td style="font-weight: 400;" width="72">successful_status_codes</td>
</tr>
<tr>
<td style="font-weight: 400;" width="72">callback_url</td>
<td style="font-weight: 400;" width="72">URL to your callback endpoint.</td>
<td style="font-weight: 400;" width="72">&#8211;</td>
</tr>
<tr>
<td style="font-weight: 400;" width="72">parse</td>
<td style="font-weight: 400;" width="72">true will return structured data, as long as the URL submitted directs to an ecommerce product page. Use this parameter in combination with parser_type parameter to use our Adaptive Parser.</td>
<td style="font-weight: 400;" width="72">FALSE</td>
</tr>
<tr>
<td style="font-weight: 400;" width="72">parser_type</td>
<td style="font-weight: 400;" width="72">Set the value to ecommerce_product to access Adaptive Parser.</td>
<td style="font-weight: 400;" width="72">&#8211;</td>
</tr>
<tr>
<td style="font-weight: 400;" width="72">storage_type</td>
<td style="font-weight: 400;" width="72">Storage service provider. At the moment, only Amazon S3 is supported: s3. Full implementation can be found on the<a href="#upload-to-storage"> Upload to Storage</a> page. Only works via Push-Pull (Callback) method.</td>
<td style="font-weight: 400;" width="72">&#8211;</td>
</tr>
<tr>
<td style="font-weight: 400;" width="72">storage_url</td>
<td style="font-weight: 400;" width="72">Your Amazon S3 bucket name. Only works via Push-Pull (Callback) method.</td>
<td style="font-weight: 400;" width="72">&#8211;</td>
</tr>
</tbody>
</table>
</div>
<p><code class="required">  </code> &#8211; required parameter</p>
<p>In this example, the API will retrieve a E-commerce universal product page in Push-Pull method. All available parameters are included (though not always necessary or compatible within the same request), to give you an idea on how to format your requests:</p>
<div class="su-tabs su-tabs-style-default su-tabs-mobile-stack" data-active="4" data-scroll-offset="0" data-anchor-in-url="no"><div class="su-tabs-nav"><span class="" data-url="" data-target="blank" tabindex="0" role="button"><strong>cURL</strong></span><span class="" data-url="" data-target="blank" tabindex="0" role="button"><strong>Python</strong></span><span class="" data-url="" data-target="blank" tabindex="0" role="button"><strong>PHP</strong></span><span class="" data-url="" data-target="blank" tabindex="0" role="button"><strong>HTTP</strong></span></div><div class="su-tabs-panes"><div class="su-tabs-pane su-u-clearfix su-u-trim" data-title="&lt;strong&gt;cURL&lt;/strong&gt;">
<pre class="highlight shell tab-shell"><code>curl --user user:pass1 <span class="se">\</span>
<span class="s1">'https://data.oxylabs.io/v1/queries'</span> <span class="se">\</span>
-H <span class="s2">"Content-Type: application/json"</span> <span class="se">\</span>
 -d <span class="s1">'{"source": "universal_ecommerce", "url": "https://books.toscrape.com/catalogue/a-light-in-the-attic_1000/index.html", "user_agent_type": "mobile", "render": "html", 
 "context": [{"key": "headers", "value": ["Accept-Language": "en-US", "Content-Type": "application/octet-stream", "Custom-Header": "custom header content"]}, {"key": "cookies", "value": [{"key": "NID", "value": "1234567890"}, {"key": "1P JAR", "value": "0987654321"}, {"key": "follow_redirects", "value": true}, {"key": "http_method", "value": "get"}, {"key": "content", "value": "base64EncodedPOSTBody"}, {"key": "successful_status_codes", "value": [303, 808, 909]}]}]}'</span></code></pre>
</div>
<div class="su-tabs-pane su-u-clearfix su-u-trim" data-title="&lt;strong&gt;Python&lt;/strong&gt;">
<pre class="highlight python tab-python"><code><span class="kn">import</span> <span class="nn">requests</span>
<span class="kn">from</span> <span class="nn">pprint</span> <span class="kn">import</span> <span class="n">pprint</span>


<span class="c"># Structure payload.</span>
<span class="n">payload</span> <span class="o">=</span> <span class="p">{</span>
    <span class="s">'source'</span><span class="p">:</span> <span class="s">'universal_ecommerce'</span><span class="p">,</span>
    <span class="s">'url'</span><span class="p">:</span> <span class="s">'https://www.etsy.com/listing/399423455/big-glass-house-planter-handmade-glass?ref=hp_prn&frs=1'</span><span class="p">,</span>
    <span class="s">'user_agent_type'</span><span class="p">:</span> <span class="s">'desktop'</span><span class="p">,</span>
    <span class="s">'geo_location'</span><span class="p">:</span> <span class="s">'United States'</span><span class="p">,</span>
    <span class="s">'parse'</span><span class="p">:</span> <span class="n">true</span><span class="p">,</span>
    <span class="s">'parser_type'</span><span class="p">:</span> <span class="s">"ecommerce_product"</span><span class="p">,</span>
    <span class="s">'context'</span><span class="p">:</span> <span class="p">[</span>
        <span class="p">{</span>
          <span class="s">'key'</span><span class="p">:</span> <span class="s">'session_id'</span><span class="p">,</span>
          <span class="s">'value'</span><span class="p">:</span> <span class="s">'1234567890abcdef'</span>
        <span class="p">}</span>
        <span class="p">{</span>
          <span class="s">'key'</span><span class="p">:</span> <span class="s">'headers'</span><span class="p">,</span> <span class="s">'value'</span><span class="p">:</span> 
            <span class="p">{</span>
             <span class="s">'Accept-Language'</span><span class="p">:</span> <span class="s">'en-US'</span><span class="p">,</span>
             <span class="s">'Content-Type'</span><span class="p">:</span> <span class="s">'application/octet-stream'</span><span class="p">,</span>
             <span class="s">'Custom-Header'</span><span class="p">:</span> <span class="s">'custom header content'</span>
            <span class="p">}</span>
        <span class="p">},</span>
        <span class="p">{</span>
          <span class="s">'key'</span><span class="p">:</span> <span class="s">'cookies'</span><span class="p">,</span>
          <span class="s">'value'</span><span class="p">:</span> <span class="p">[{</span>
              <span class="s">'key'</span><span class="p">:</span> <span class="s">'NID'</span><span class="p">,</span>
             <span class="s">'value'</span><span class="p">:</span> <span class="s">'1234567890'</span>
           <span class="p">},</span>
           <span class="p">{</span>
              <span class="s">'key'</span><span class="p">:</span> <span class="s">'1P_JAR'</span><span class="p">,</span>
             <span class="s">'value'</span><span class="p">:</span> <span class="s">'0987654321'</span>
           <span class="p">}</span>
         <span class="p">]</span>
        <span class="p">},</span>
        <span class="p">{</span>
          <span class="s">'key'</span><span class="p">:</span> <span class="s">'follow_redirects'</span><span class="p">,</span>
          <span class="s">'value'</span><span class="p">:</span> <span class="n">true</span>
        <span class="p">},</span>
        <span class="p">{</span>
          <span class="s">'key'</span><span class="p">:</span> <span class="s">'successful_status_codes'</span><span class="p">,</span>
          <span class="s">'value'</span><span class="p">:</span> <span class="p">[</span><span class="mi">303</span><span class="p">,</span> <span class="mi">808</span><span class="p">,</span> <span class="mi">909</span><span class="p">]</span>
        <span class="p">},</span>
        <span class="p">{</span>
          <span class="s">'key'</span><span class="p">:</span> <span class="s">'http_method'</span><span class="p">,</span>
          <span class="s">'value'</span><span class="p">:</span> <span class="s">'get'</span>
        <span class="p">}</span>
        <span class="p">{</span>
          <span class="s">'key'</span><span class="p">:</span> <span class="s">'content'</span>
          <span class="s">'value'</span><span class="p">:</span> <span class="s">'base64EncodedPOSTBody'</span>
        <span class="p">}</span>
    <span class="p">],</span>
    <span class="s">'callback_url'</span><span class="p">:</span> <span class="s">'https://your.callback.url'</span><span class="p">,</span>
<span class="p">}</span>

<span class="c"># Get response.</span>
<span class="n">response</span> <span class="o">=</span> <span class="n">requests</span><span class="o">.</span><span class="n">request</span><span class="p">(</span>
    <span class="s">'POST'</span><span class="p">,</span>
    <span class="s">'https://data.oxylabs.io/v1/queries'</span><span class="p">,</span>
    <span class="n">auth</span><span class="o">=</span><span class="p">(</span><span class="s">'user'</span><span class="p">,</span> <span class="s">'pass1'</span><span class="p">),</span>
    <span class="n">json</span><span class="o">=</span><span class="n">payload</span><span class="p">,</span>
<span class="p">)</span>

<span class="c"># Print prettified response to stdout.</span>
<span class="n">pprint</span><span class="p">(</span><span class="n">response</span><span class="o">.</span><span class="n">json</span><span class="p">())</span></code></pre>
</div>
<div class="su-tabs-pane su-u-clearfix su-u-trim" data-title="&lt;strong&gt;PHP&lt;/strong&gt;">
<pre class="highlight php tab-php"><code><span class="cp">&lt;?php</span>

<span class="nv">$params</span> <span class="o">=</span> <span class="p">[</span>
    <span class="s1">'source'</span> <span class="o">=&gt;</span> <span class="s1">'universal_ecommerce'</span><span class="p">,</span>
    <span class="s1">'url'</span> <span class="o">=&gt;</span> <span class="s1">'https://books.toscrape.com/catalogue/a-light-in-the-attic_1000/index.html'</span><span class="p">,</span>
    <span class="s1">'context'</span> <span class="o">=&gt;</span> <span class="p">[</span>
        <span class="p">[</span>
            <span class="s1">'key'</span> <span class="o">=&gt;</span> <span class="s1">'session_id'</span><span class="p">,</span>
            <span class="s1">'value'</span> <span class="o">=&gt;</span> <span class="s1">'1234567890abcdef'</span>
        <span class="p">],</span>
        <span class="p">[</span>
            <span class="s1">'key'</span> <span class="o">=&gt;</span> <span class="s1">'headers'</span><span class="p">,</span>
            <span class="s1">'value'</span> <span class="o">=&gt;</span> <span class="p">[</span>
                <span class="s1">'Accept-Language'</span> <span class="o">=&gt;</span> <span class="s1">'en-US'</span><span class="p">,</span>
                <span class="s1">'Content-Type'</span> <span class="o">=&gt;</span> <span class="s1">'application/octet-stream'</span><span class="p">,</span>
                <span class="s1">'Custom-Header'</span> <span class="o">=&gt;</span> <span class="s1">'custom header content'</span>
            <span class="p">],</span>
        <span class="p">],</span>
        <span class="p">[</span>
            <span class="s1">'key'</span> <span class="o">=&gt;</span> <span class="s1">'cookies'</span><span class="p">,</span>
            <span class="s1">'value'</span> <span class="o">=&gt;</span> <span class="p">[</span>
                <span class="p">[</span><span class="s1">'key'</span> <span class="o">=&gt;</span> <span class="s1">'NID'</span><span class="p">,</span> <span class="s1">'value'</span> <span class="o">=&gt;</span> <span class="s1">'1234567890'</span><span class="p">],</span>
                <span class="p">[</span><span class="s1">'key'</span> <span class="o">=&gt;</span> <span class="s1">'1P_JAR'</span><span class="p">,</span> <span class="s1">'value'</span> <span class="o">=&gt;</span> <span class="s1">'0987654321'</span><span class="p">]</span>
            <span class="p">]</span>
        <span class="p">],</span>
        <span class="p">[</span>
            <span class="s1">'key'</span> <span class="o">=&gt;</span> <span class="s1">'follow_redirects'</span><span class="p">,</span>
            <span class="s1">'value'</span> <span class="o">=&gt;</span> <span class="s1">'true'</span>
        <span class="p">],</span>
        <span class="p">[</span>
            <span class="s1">'key'</span> <span class="o">=&gt;</span> <span class="s1">'successful_status_codes'</span><span class="p">,</span>
            <span class="s1">'value'</span> <span class="o">=&gt;</span> <span class="p">[</span><span class="mi">303</span><span class="p">,</span> <span class="mi">808</span><span class="p">,</span> <span class="mi">909</span><span class="p">]</span>
        <span class="p">],</span>
        <span class="p">[</span>
            <span class="s1">'key'</span> <span class="o">=&gt;</span> <span class="s1">'http_method'</span><span class="p">,</span>
            <span class="s1">'value'</span> <span class="o">=&gt;</span> <span class="s1">'get'</span>
        <span class="p">],</span>
        <span class="p">[</span>
            <span class="s1">'key'</span> <span class="o">=&gt;</span> <span class="s1">'content'</span><span class="p">,</span>
            <span class="s1">'value'</span> <span class="o">=&gt;</span> <span class="s1">'base64EncodedPOSTBody'</span>
        <span class="p">]</span>
    <span class="p">]</span>
<span class="p">];</span>

<span class="nv">$ch</span> <span class="o">=</span> <span class="nb">curl_init</span><span class="p">();</span>

<span class="nb">curl_setopt</span><span class="p">(</span><span class="nv">$ch</span><span class="p">,</span> <span class="nx">CURLOPT_URL</span><span class="p">,</span> <span class="s2">"https://data.oxylabs.io/v1/queries"</span><span class="p">);</span>
<span class="nb">curl_setopt</span><span class="p">(</span><span class="nv">$ch</span><span class="p">,</span> <span class="nx">CURLOPT_RETURNTRANSFER</span><span class="p">,</span> <span class="mi">1</span><span class="p">);</span>
<span class="nb">curl_setopt</span><span class="p">(</span><span class="nv">$ch</span><span class="p">,</span> <span class="nx">CURLOPT_POSTFIELDS</span><span class="p">,</span> <span class="nb">json_encode</span><span class="p">(</span><span class="nv">$params</span><span class="p">));</span>
<span class="nb">curl_setopt</span><span class="p">(</span><span class="nv">$ch</span><span class="p">,</span> <span class="nx">CURLOPT_POST</span><span class="p">,</span> <span class="mi">1</span><span class="p">);</span>
<span class="nb">curl_setopt</span><span class="p">(</span><span class="nv">$ch</span><span class="p">,</span> <span class="nx">CURLOPT_USERPWD</span><span class="p">,</span> <span class="s2">"user"</span> <span class="o">.</span> <span class="s2">":"</span> <span class="o">.</span> <span class="s2">"pass1"</span><span class="p">);</span>

<span class="nv">$headers</span> <span class="o">=</span> <span class="k">array</span><span class="p">();</span>
<span class="nv">$headers</span><span class="p">[]</span> <span class="o">=</span> <span class="s2">"Content-Type: application/json"</span><span class="p">;</span>
<span class="nb">curl_setopt</span><span class="p">(</span><span class="nv">$ch</span><span class="p">,</span> <span class="nx">CURLOPT_HTTPHEADER</span><span class="p">,</span> <span class="nv">$headers</span><span class="p">);</span>

<span class="nv">$result</span> <span class="o">=</span> <span class="nb">curl_exec</span><span class="p">(</span><span class="nv">$ch</span><span class="p">);</span>
<span class="k">echo</span> <span class="nv">$result</span><span class="p">;</span>

<span class="k">if</span> <span class="p">(</span><span class="nb">curl_errno</span><span class="p">(</span><span class="nv">$ch</span><span class="p">))</span> <span class="p">{</span>
    <span class="k">echo</span> <span class="s1">'Error:'</span> <span class="o">.</span> <span class="nb">curl_error</span><span class="p">(</span><span class="nv">$ch</span><span class="p">);</span>
<span class="p">}</span>
<span class="nb">curl_close</span> <span class="p">(</span><span class="nv">$ch</span><span class="p">);</span>
<span class="cp">?&gt;</span></code></pre>
</div>
<div class="su-tabs-pane su-u-clearfix su-u-trim" data-title="&lt;strong&gt;HTTP&lt;/strong&gt;">
<pre class="highlight http tab-http"><code><span class="err">HTTP method is currently not supported with Push-Pull</span></code></pre>
</div></div></div>
<p>Here is the same example in Realtime:</p>
<div class="su-tabs su-tabs-style-default su-tabs-mobile-stack" data-active="4" data-scroll-offset="0" data-anchor-in-url="no"><div class="su-tabs-nav"><span class="" data-url="" data-target="blank" tabindex="0" role="button"><strong>cURL</strong></span><span class="" data-url="" data-target="blank" tabindex="0" role="button"><strong>Python</strong></span><span class="" data-url="" data-target="blank" tabindex="0" role="button"><strong>PHP</strong></span><span class="" data-url="" data-target="blank" tabindex="0" role="button"><strong>HTTP</strong></span></div><div class="su-tabs-panes"><div class="su-tabs-pane su-u-clearfix su-u-trim" data-title="&lt;strong&gt;cURL&lt;/strong&gt;">
<pre class="highlight shell tab-shell"><code>curl --user user:pass1 <span class="se">\</span>
<span class="s1">'https://data.oxylabs.io/v1/queries'</span> <span class="se">\</span>
-H <span class="s2">"Content-Type: application/json"</span> <span class="se">\</span>
-d <span class="s1">'{"source": "universal_ecommerce", "url": "https://books.toscrape.com/catalogue/a-light-in-the-attic_1000/index.html", "user_agent_type": "mobile", "context": [{"key": "headers", "value": ["Accept-Language": "en-US", "Content-Type": "application/octet-stream", "Custom-Header": "custom header content"]}, {"key": "cookies", "value": [{"key": "NID", "value": "1234567890"}, {"key": "1P JAR", "value": "0987654321"}, {"key": "follow_redirects", "value": true}, {"key": "http_method", "value": "get"}, {"key": "content", "value": "base64EncodedPOSTBody"}, {"key": "successful_status_codes", "value": [303, 808, 909]}]}]}'</span></code></pre>
</div>
<div class="su-tabs-pane su-u-clearfix su-u-trim" data-title="&lt;strong&gt;Python&lt;/strong&gt;">
<pre class="highlight python tab-python"><code><span class="kn">import</span> <span class="nn">requests</span>
<span class="kn">from</span> <span class="nn">pprint</span> <span class="kn">import</span> <span class="n">pprint</span>

<span class="c"># Structure payload.</span>
<span class="n">payload</span> <span class="o">=</span> <span class="p">{</span>
    <span class="s">'source'</span><span class="p">:</span> <span class="s">'universal_ecommerce'</span><span class="p">,</span>
    <span class="s">'url'</span><span class="p">:</span> <span class="s">'https://books.toscrape.com/catalogue/a-light-in-the-attic_1000/index.html'</span><span class="p">,</span>
    <span class="s">'user_agent_type'</span><span class="p">:</span> <span class="s">'mobile'</span><span class="p">,</span>
    <span class="s">'geo_location'</span><span class="p">:</span> <span class="s">'United States'</span><span class="p">,</span>
    <span class="s">'context'</span><span class="p">:</span> <span class="p">[</span>
        <span class="p">{</span>
          <span class="s">'key'</span><span class="p">:</span> <span class="s">'session_id'</span><span class="p">,</span>
          <span class="s">'value'</span><span class="p">:</span> <span class="s">'1234567890abcdef'</span>
        <span class="p">}</span>
        <span class="p">{</span>
          <span class="s">'key'</span><span class="p">:</span> <span class="s">'headers'</span><span class="p">,</span> <span class="s">'value'</span><span class="p">:</span> 
            <span class="p">{</span>
             <span class="s">'Accept-Language'</span><span class="p">:</span> <span class="s">'en-US'</span><span class="p">,</span>
             <span class="s">'Content-Type'</span><span class="p">:</span> <span class="s">'application/octet-stream'</span><span class="p">,</span>
             <span class="s">'Custom-Header'</span><span class="p">:</span> <span class="s">'custom header content'</span>
            <span class="p">}</span>
        <span class="p">},</span>
        <span class="p">{</span>
          <span class="s">'key'</span><span class="p">:</span> <span class="s">'cookies'</span><span class="p">,</span>
          <span class="s">'value'</span><span class="p">:</span> <span class="p">[{</span>
              <span class="s">'key'</span><span class="p">:</span> <span class="s">'NID'</span><span class="p">,</span>
             <span class="s">'value'</span><span class="p">:</span> <span class="s">'1234567890'</span>
           <span class="p">},</span>
           <span class="p">{</span>
              <span class="s">'key'</span><span class="p">:</span> <span class="s">'1P_JAR'</span><span class="p">,</span>
             <span class="s">'value'</span><span class="p">:</span> <span class="s">'0987654321'</span>
           <span class="p">}</span>
         <span class="p">]</span>
        <span class="p">},</span>
        <span class="p">{</span>
          <span class="s">'key'</span><span class="p">:</span> <span class="s">'follow_redirects'</span><span class="p">,</span>
          <span class="s">'value'</span><span class="p">:</span> <span class="n">true</span>
        <span class="p">},</span>
        <span class="p">{</span>
          <span class="s">'key'</span><span class="p">:</span> <span class="s">'successful_status_codes'</span><span class="p">,</span>
          <span class="s">'value'</span><span class="p">:</span> <span class="p">[</span><span class="mi">303</span><span class="p">,</span> <span class="mi">808</span><span class="p">,</span> <span class="mi">909</span><span class="p">]</span>
        <span class="p">},</span>
        <span class="p">{</span>
          <span class="s">'key'</span><span class="p">:</span> <span class="s">'http_method'</span><span class="p">,</span>
          <span class="s">'value'</span><span class="p">:</span> <span class="s">'get'</span>
        <span class="p">}</span>
        <span class="p">{</span>
          <span class="s">'key'</span><span class="p">:</span> <span class="s">'content'</span>
          <span class="s">'value'</span><span class="p">:</span> <span class="s">'base64EncodedPOSTBody'</span>
        <span class="p">}</span>
    <span class="p">],</span>
<span class="p">}</span>

<span class="c"># Get response.</span>
<span class="n">response</span> <span class="o">=</span> <span class="n">requests</span><span class="o">.</span><span class="n">request</span><span class="p">(</span>
    <span class="s">'POST'</span><span class="p">,</span>
    <span class="s">'https://realtime.oxylabs.io/v1/queries'</span><span class="p">,</span>
    <span class="n">auth</span><span class="o">=</span><span class="p">(</span><span class="s">'user'</span><span class="p">,</span> <span class="s">'pass1'</span><span class="p">),</span>
    <span class="n">json</span><span class="o">=</span><span class="n">payload</span><span class="p">,</span>
<span class="p">)</span>

<span class="c"># Instead of response with job status and results url, this will return the</span>
<span class="c"># JSON response with the result.</span>
<span class="n">pprint</span><span class="p">(</span><span class="n">response</span><span class="o">.</span><span class="n">json</span><span class="p">())</span></code></pre>
</div>
<div class="su-tabs-pane su-u-clearfix su-u-trim" data-title="&lt;strong&gt;PHP&lt;/strong&gt;">
<pre class="highlight php tab-php"><code><span class="cp">&lt;?php</span>

<span class="nv">$params</span> <span class="o">=</span> <span class="p">[</span>
    <span class="s1">'source'</span> <span class="o">=&gt;</span> <span class="s1">'universal_ecommerce'</span><span class="p">,</span>
    <span class="s1">'url'</span> <span class="o">=&gt;</span> <span class="s1">'https://books.toscrape.com/catalogue/a-light-in-the-attic_1000/index.html'</span><span class="p">,</span>
    <span class="s1">'context'</span> <span class="o">=&gt;</span> <span class="p">[</span>
        <span class="p">[</span>
            <span class="s1">'key'</span> <span class="o">=&gt;</span> <span class="s1">'session_id'</span><span class="p">,</span>
            <span class="s1">'value'</span> <span class="o">=&gt;</span> <span class="s1">'1234567890abcdef'</span>
        <span class="p">],</span>
        <span class="p">[</span>
            <span class="s1">'key'</span> <span class="o">=&gt;</span> <span class="s1">'headers'</span><span class="p">,</span>
            <span class="s1">'value'</span> <span class="o">=&gt;</span> <span class="p">[</span>
                <span class="s1">'Accept-Language'</span> <span class="o">=&gt;</span> <span class="s1">'en-US'</span><span class="p">,</span>
                <span class="s1">'Content-Type'</span> <span class="o">=&gt;</span> <span class="s1">'application/octet-stream'</span><span class="p">,</span>
                <span class="s1">'Custom-Header'</span> <span class="o">=&gt;</span> <span class="s1">'custom header content'</span>
            <span class="p">],</span>
        <span class="p">],</span>
        <span class="p">[</span>
            <span class="s1">'key'</span> <span class="o">=&gt;</span> <span class="s1">'cookies'</span><span class="p">,</span>
            <span class="s1">'value'</span> <span class="o">=&gt;</span> <span class="p">[</span>
                <span class="p">[</span><span class="s1">'key'</span> <span class="o">=&gt;</span> <span class="s1">'NID'</span><span class="p">,</span> <span class="s1">'value'</span> <span class="o">=&gt;</span> <span class="s1">'1234567890'</span><span class="p">],</span>
                <span class="p">[</span><span class="s1">'key'</span> <span class="o">=&gt;</span> <span class="s1">'1P_JAR'</span><span class="p">,</span> <span class="s1">'value'</span> <span class="o">=&gt;</span> <span class="s1">'0987654321'</span><span class="p">]</span>
            <span class="p">]</span>
        <span class="p">],</span>
        <span class="p">[</span>
            <span class="s1">'key'</span> <span class="o">=&gt;</span> <span class="s1">'follow_redirects'</span><span class="p">,</span>
            <span class="s1">'value'</span> <span class="o">=&gt;</span> <span class="s1">'true'</span>
        <span class="p">],</span>
        <span class="p">[</span>
            <span class="s1">'key'</span> <span class="o">=&gt;</span> <span class="s1">'successful_status_codes'</span><span class="p">,</span>
            <span class="s1">'value'</span> <span class="o">=&gt;</span> <span class="p">[</span><span class="mi">303</span><span class="p">,</span> <span class="mi">808</span><span class="p">,</span> <span class="mi">909</span><span class="p">]</span>
        <span class="p">],</span>
        <span class="p">[</span>
            <span class="s1">'key'</span> <span class="o">=&gt;</span> <span class="s1">'http_method'</span><span class="p">,</span>
            <span class="s1">'value'</span> <span class="o">=&gt;</span> <span class="s1">'get'</span>
        <span class="p">],</span>
        <span class="p">[</span>
            <span class="s1">'key'</span> <span class="o">=&gt;</span> <span class="s1">'content'</span><span class="p">,</span>
            <span class="s1">'value'</span> <span class="o">=&gt;</span> <span class="s1">'base64EncodedPOSTBody'</span>
        <span class="p">]</span>
    <span class="p">]</span>
<span class="p">];</span>

<span class="nv">$ch</span> <span class="o">=</span> <span class="nb">curl_init</span><span class="p">();</span>

<span class="nb">curl_setopt</span><span class="p">(</span><span class="nv">$ch</span><span class="p">,</span> <span class="nx">CURLOPT_URL</span><span class="p">,</span> <span class="s2">"https://data.oxylabs.io/v1/queries"</span><span class="p">);</span>
<span class="nb">curl_setopt</span><span class="p">(</span><span class="nv">$ch</span><span class="p">,</span> <span class="nx">CURLOPT_RETURNTRANSFER</span><span class="p">,</span> <span class="mi">1</span><span class="p">);</span>
<span class="nb">curl_setopt</span><span class="p">(</span><span class="nv">$ch</span><span class="p">,</span> <span class="nx">CURLOPT_POSTFIELDS</span><span class="p">,</span> <span class="nb">json_encode</span><span class="p">(</span><span class="nv">$params</span><span class="p">));</span>
<span class="nb">curl_setopt</span><span class="p">(</span><span class="nv">$ch</span><span class="p">,</span> <span class="nx">CURLOPT_POST</span><span class="p">,</span> <span class="mi">1</span><span class="p">);</span>
<span class="nb">curl_setopt</span><span class="p">(</span><span class="nv">$ch</span><span class="p">,</span> <span class="nx">CURLOPT_USERPWD</span><span class="p">,</span> <span class="s2">"user"</span> <span class="o">.</span> <span class="s2">":"</span> <span class="o">.</span> <span class="s2">"pass1"</span><span class="p">);</span>

<span class="nv">$headers</span> <span class="o">=</span> <span class="k">array</span><span class="p">();</span>
<span class="nv">$headers</span><span class="p">[]</span> <span class="o">=</span> <span class="s2">"Content-Type: application/json"</span><span class="p">;</span>
<span class="nb">curl_setopt</span><span class="p">(</span><span class="nv">$ch</span><span class="p">,</span> <span class="nx">CURLOPT_HTTPHEADER</span><span class="p">,</span> <span class="nv">$headers</span><span class="p">);</span>

<span class="nv">$result</span> <span class="o">=</span> <span class="nb">curl_exec</span><span class="p">(</span><span class="nv">$ch</span><span class="p">);</span>
<span class="k">echo</span> <span class="nv">$result</span><span class="p">;</span>

<span class="k">if</span> <span class="p">(</span><span class="nb">curl_errno</span><span class="p">(</span><span class="nv">$ch</span><span class="p">))</span> <span class="p">{</span>
    <span class="k">echo</span> <span class="s1">'Error:'</span> <span class="o">.</span> <span class="nb">curl_error</span><span class="p">(</span><span class="nv">$ch</span><span class="p">);</span>
<span class="p">}</span>
<span class="nb">curl_close</span> <span class="p">(</span><span class="nv">$ch</span><span class="p">);</span>
<span class="cp">?&gt;</span></code></pre>
</div>
<div class="su-tabs-pane su-u-clearfix su-u-trim" data-title="&lt;strong&gt;HTTP&lt;/strong&gt;">
<pre class="highlight http tab-http"><code><span class="err"># The whole string you submit has to be URL-encoded.

https://realtime.oxylabs.io/v1/queries?source=universal_ecommerce&url=https%3A%2F%2Fstackoverflow.com%2Fquestions%2Ftagged%2Fpython&access_token=12345abcde</span></code></pre>
</div></div></div>
<p>And via SuperAPI:</p>
<div class="su-tabs su-tabs-style-default su-tabs-mobile-stack" data-active="4" data-scroll-offset="0" data-anchor-in-url="no"><div class="su-tabs-nav"><span class="" data-url="" data-target="blank" tabindex="0" role="button"><strong>cURL</strong></span><span class="" data-url="" data-target="blank" tabindex="0" role="button"><strong>Python</strong></span><span class="" data-url="" data-target="blank" tabindex="0" role="button"><strong>PHP</strong></span><span class="" data-url="" data-target="blank" tabindex="0" role="button"><strong>HTTP</strong></span></div><div class="su-tabs-panes"><div class="su-tabs-pane su-u-clearfix su-u-trim" data-title="&lt;strong&gt;cURL&lt;/strong&gt;">
<pre class="highlight shell tab-shell"><code><span class="c"># A GET request could look something like this:</span>
curl -k <span class="se">\</span>
-x http://realtime.oxylabs.io:60000 <span class="se">\</span>
-U user:pass1 <span class="se">\</span>
<span class="s2">"https://books.toscrape.com/catalogue/a-light-in-the-attic_1000/index.html"</span> <span class="se">\</span>
-H <span class="s2">"X-OxySERPs-Session-Id: 1234567890abcdef"</span> <span class="se">\</span>
-H <span class="s2">"X-OxySERPs-Geo-Location: India"</span> <span class="se">\</span>
-H <span class="s2">"Accept-Language: en-US"</span> <span class="se">\</span>
-H <span class="s2">"Content-Type: application/octet-stream"</span> <span class="se">\</span>
-H <span class="s2">"Custom-Header: custom header content"</span> <span class="se">\</span>
-H <span class="s2">"Cookie: NID=1234567890; 1P_JAR=0987654321"</span> <span class="se">\</span>
-H <span class="s2">"X-Status-Code: 303, 808, 909"</span>

<span class="c"># A POST request would have the same structure but contain a parameter specifying that it is a POST request:</span>
curl -X POST <span class="se">\</span>
-k <span class="se">\</span>
-x http://realtime.oxylabs.io:60000 <span class="se">\</span>
-U user:pass1 <span class="s2">"https://books.toscrape.com/catalogue/a-light-in-the-attic_1000/index.html"</span> <span class="se">\</span>
-H <span class="s2">"X-OxySERPs-Session-Id: 1234567890abcdef"</span> <span class="se">\</span>
-H <span class="s2">"X-OxySERPs-Geo-Location: India"</span> <span class="se">\</span>
-H <span class="s2">"Custom-Header: custom header content"</span> <span class="se">\</span>
-H <span class="s2">"Cookie: NID=1234567890; 1P_JAR=0987654321"</span> <span class="se">\</span>
-H <span class="s2">"X-Status-Code: 303, 808, 909"</span></code></pre>
</div>
<div class="su-tabs-pane su-u-clearfix su-u-trim" data-title="&lt;strong&gt;Python&lt;/strong&gt;">
<pre class="highlight python tab-python"><code><span class="kn">import</span> <span class="nn">requests</span>
<span class="kn">from</span> <span class="nn">pprint</span> <span class="kn">import</span> <span class="n">pprint</span>

<span class="c"># Define proxy dict. Do not forget to put your real user and pass here as well.</span>
<span class="n">proxies</span> <span class="o">=</span> <span class="p">{</span>
  <span class="s">'http'</span><span class="p">:</span> <span class="s">'http://user:pass1@realtime.oxylabs.io:60000'</span><span class="p">,</span>
  <span class="s">'https'</span><span class="p">:</span> <span class="s">'https://user:pass1@realtime.oxylabs.io:60000'</span><span class="p">,</span>
<span class="p">}</span>

<span class="n">response</span> <span class="o">=</span> <span class="n">requests</span><span class="o">.</span><span class="n">request</span><span class="p">(</span>
    <span class="s">'GET'</span><span class="p">,</span>
    <span class="s">'https://books.toscrape.com/catalogue/a-light-in-the-attic_1000/index.html'</span><span class="p">,</span>
    <span class="n">auth</span><span class="o">=</span><span class="p">(</span><span class="s">'user'</span><span class="p">,</span> <span class="s">'pass1'</span><span class="p">),</span>
    <span class="n">verify</span><span class="o">=</span><span class="bp">False</span><span class="p">,</span>  <span class="c"># Or accept our certificate.</span>
    <span class="n">proxies</span><span class="o">=</span><span class="n">proxies</span><span class="p">,</span>
<span class="p">)</span>

<span class="c"># Print result page to stdout</span>
<span class="n">pprint</span><span class="p">(</span><span class="n">response</span><span class="o">.</span><span class="n">text</span><span class="p">)</span>

<span class="c"># Save returned HTML to result.html file</span>
<span class="k">with</span> <span class="nb">open</span><span class="p">(</span><span class="s">'result.html'</span><span class="p">,</span> <span class="s">'w'</span><span class="p">)</span> <span class="k">as</span> <span class="n">f</span><span class="p">:</span>
    <span class="n">f</span><span class="o">.</span><span class="n">write</span><span class="p">(</span><span class="n">response</span><span class="o">.</span><span class="n">text</span><span class="p">)</span></code></pre>
</div>
<div class="su-tabs-pane su-u-clearfix su-u-trim" data-title="&lt;strong&gt;PHP&lt;/strong&gt;">
<pre class="highlight php tab-php"><code><span class="cp">&lt;?php</span>
<span class="nv">$ch</span> <span class="o">=</span> <span class="nb">curl_init</span><span class="p">();</span>

<span class="nb">curl_setopt</span><span class="p">(</span><span class="nv">$ch</span><span class="p">,</span> <span class="nx">CURLOPT_URL</span><span class="p">,</span> <span class="s2">"https://books.toscrape.com/catalogue/a-light-in-the-attic_1000/index.html"</span><span class="p">);</span>
<span class="nb">curl_setopt</span><span class="p">(</span><span class="nv">$ch</span><span class="p">,</span> <span class="nx">CURLOPT_RETURNTRANSFER</span><span class="p">,</span> <span class="mi">1</span><span class="p">);</span>
<span class="nb">curl_setopt</span><span class="p">(</span><span class="nv">$ch</span><span class="p">,</span> <span class="nx">CURLOPT_PROXY</span><span class="p">,</span> <span class="s1">'realtime.oxylabs.io:60000'</span><span class="p">);</span>
<span class="nb">curl_setopt</span><span class="p">(</span><span class="nv">$ch</span><span class="p">,</span> <span class="nx">CURLOPT_PROXYUSERPWD</span><span class="p">,</span> <span class="s2">"user"</span> <span class="o">.</span> <span class="s2">":"</span> <span class="o">.</span> <span class="s2">"pass1"</span><span class="p">);</span>
<span class="nb">curl_setopt</span><span class="p">(</span><span class="nv">$ch</span><span class="p">,</span> <span class="nx">CURLOPT_SSL_VERIFYPEER</span><span class="p">,</span> <span class="kc">false</span><span class="p">);</span>
<span class="nb">curl_setopt</span><span class="p">(</span><span class="nv">$ch</span><span class="p">,</span> <span class="nx">CURLOPT_SSL_VERIFYHOST</span><span class="p">,</span> <span class="kc">false</span><span class="p">);</span>

<span class="nv">$result</span> <span class="o">=</span> <span class="nb">curl_exec</span><span class="p">(</span><span class="nv">$ch</span><span class="p">);</span>
<span class="k">echo</span> <span class="nv">$result</span><span class="p">;</span>

<span class="k">if</span> <span class="p">(</span><span class="nb">curl_errno</span><span class="p">(</span><span class="nv">$ch</span><span class="p">))</span> <span class="p">{</span>
    <span class="k">echo</span> <span class="s1">'Error:'</span> <span class="o">.</span> <span class="nb">curl_error</span><span class="p">(</span><span class="nv">$ch</span><span class="p">);</span>
<span class="p">}</span>
<span class="nb">curl_close</span> <span class="p">(</span><span class="nv">$ch</span><span class="p">);</span>
<span class="cp">?&gt;</span></code></pre>
</div>
<div class="su-tabs-pane su-u-clearfix su-u-trim" data-title="&lt;strong&gt;HTTP&lt;/strong&gt;">
<pre class="highlight http tab-http"><code><span class="err">HTTP method is not supported with SuperAPI</span></code></pre>
</div></div></div>
<hr />
<h2 id="parameter-values">Parameter Values</h2>
<h3 id="geo_location">Geo_Location</h3>
<p>Full list of supported geo locations can be found in CSV format <a class="custom_link" href="https://developers.oxylabs.io/resources/universal-supported-geo_location-values.csv" target="_blank" rel="noopener">here</a>.</p>
<pre class="highlight json tab-json"><code><span class="s2">"United Arab Emirates"</span><span class="p">,</span>
<span class="s2">"Albania"</span><span class="p">,</span>
<span class="s2">"Armenia"</span><span class="p">,</span>
<span class="s2">"Angola"</span><span class="p">,</span>
<span class="s2">"Argentina"</span><span class="p">,</span>
<span class="s2">"Australia"</span><span class="p">,</span>
<span class="err">...</span>
<span class="s2">"Uruguay"</span><span class="p">,</span>
<span class="s2">"Uzbekistan"</span><span class="p">,</span>
<span class="s2">"Venezuela Bolivarian Republic of"</span><span class="p">,</span>
<span class="s2">"Viet Nam"</span><span class="p">,</span>
<span class="s2">"South Africa"</span><span class="p">,</span>
<span class="s2">"Zimbabwe"</span></code></pre>
<hr />
<h3 id="http_method">HTTP_Method</h3>
<p>E-commerce Universal Scraper API supports two HTTP(S) methods: <code>GET</code> (default) and <code>POST</code>.</p>
<pre class="highlight json tab-json"><code><span class="s2">"GET"</span><span class="p">,</span>
<span class="s2">"POST"</span></code></pre>
<hr />
<h3 id="render">Render</h3>
<p>E-commerce Universal Scraper API can render Javascript and return either a rendered HTML document or a PNG screenshot of the web page.</p>
<pre class="highlight json tab-json"><code><span class="s2">"html"</span><span class="p">,</span>
<span class="s2">"png"</span></code></pre>
<hr />
<h3 id="user_agent_type">User_Agent_Type</h3>
<p>Download full list of <code>user_agent_type</code> values in JSON <a class="custom_link" href="https://developers.oxylabs.io/resources/user_agent_type.json" target="_blank" rel="noopener">here</a>.</p>
<pre class="highlight json tab-json"><code><span class="p">[</span>
  <span class="p">{</span>
    <span class="s2">"user_agent_type"</span><span class="p">:</span> <span class="s2">"desktop"</span><span class="p">,</span>
    <span class="s2">"description"</span><span class="p">:</span> <span class="s2">"Random desktop browser User-Agent"</span>
  <span class="p">},</span>
  <span class="p">{</span>
    <span class="s2">"user_agent_type"</span><span class="p">:</span> <span class="s2">"desktop_firefox"</span><span class="p">,</span>
    <span class="s2">"description"</span><span class="p">:</span> <span class="s2">"Random User-Agent of one of the latest versions of desktop Firefox"</span>
  <span class="p">},</span>
  <span class="p">{</span>
    <span class="s2">"user_agent_type"</span><span class="p">:</span> <span class="s2">"desktop_chrome"</span><span class="p">,</span>
    <span class="s2">"description"</span><span class="p">:</span> <span class="s2">"Random User-Agent of one of the latest versions of desktop Chrome"</span>
  <span class="p">},</span>
  <span class="p">{</span>
    <span class="s2">"user_agent_type"</span><span class="p">:</span> <span class="s2">"desktop_opera"</span><span class="p">,</span>
    <span class="s2">"description"</span><span class="p">:</span> <span class="s2">"Random User-Agent of one of the latest versions of desktop Opera"</span>
  <span class="p">},</span>
  <span class="p">{</span>
    <span class="s2">"user_agent_type"</span><span class="p">:</span> <span class="s2">"desktop_edge"</span><span class="p">,</span>
    <span class="s2">"description"</span><span class="p">:</span> <span class="s2">"Random User-Agent of one of the latest versions of desktop Edge"</span>
  <span class="p">},</span>
  <span class="p">{</span>
    <span class="s2">"user_agent_type"</span><span class="p">:</span> <span class="s2">"desktop_safari"</span><span class="p">,</span>
    <span class="s2">"description"</span><span class="p">:</span> <span class="s2">"Random User-Agent of one of the latest versions of desktop Safari"</span>
  <span class="p">},</span>
  <span class="p">{</span>
    <span class="s2">"user_agent_type"</span><span class="p">:</span> <span class="s2">"mobile"</span><span class="p">,</span>
    <span class="s2">"description"</span><span class="p">:</span> <span class="s2">"Random mobile browser User-Agent"</span>
  <span class="p">},</span>
  <span class="p">{</span>
    <span class="s2">"user_agent_type"</span><span class="p">:</span> <span class="s2">"mobile_android"</span><span class="p">,</span>
    <span class="s2">"description"</span><span class="p">:</span> <span class="s2">"Random User-Agent of one of the latest versions of Android browser"</span>
  <span class="p">},</span>
  <span class="p">{</span>
    <span class="s2">"user_agent_type"</span><span class="p">:</span> <span class="s2">"mobile_ios"</span><span class="p">,</span>
    <span class="s2">"description"</span><span class="p">:</span> <span class="s2">"Random User-Agent of one of the latest versions of iPhone browser"</span>
  <span class="p">},</span>
  <span class="p">{</span>
    <span class="s2">"user_agent_type"</span><span class="p">:</span> <span class="s2">"tablet"</span><span class="p">,</span>
    <span class="s2">"description"</span><span class="p">:</span> <span class="s2">"Random tablet browser User-Agent"</span>
  <span class="p">},</span>
  <span class="p">{</span>
    <span class="s2">"user_agent_type"</span><span class="p">:</span> <span class="s2">"tablet_android"</span><span class="p">,</span>
    <span class="s2">"description"</span><span class="p">:</span> <span class="s2">"Random User-Agent of one of the latest versions of Android tablet"</span>
  <span class="p">},</span>
  <span class="p">{</span>
    <span class="s2">"user_agent_type"</span><span class="p">:</span> <span class="s2">"tablet_ios"</span><span class="p">,</span>
    <span class="s2">"description"</span><span class="p">:</span> <span class="s2">"Random User-Agent of one of the latest versions of iPad tablet"</span>
  <span class="p">}</span>
<span class="p">]</span></code></pre>
<hr />
<h2 id="account-status">Account Status</h2>
<h3 id="usage-statistics">Usage Statistics</h3>
<p>You can find your usage statistics by querying the following endpoint:</p>
<div class="endpoint">
<pre><strong>GET https://data.oxylabs.io/v2/stats</strong></pre>
</div>
<p>By default, the API will return all-time usage statistics. Adding <code>?group_by=month</code> will return monthly stats, while <code>?group_by=day</code> will return daily numbers.</p>
<p>This query will return all-time statistics. You can find your daily and monthly usage by adding either <code>?group_by=day</code> or <code>?group_by=month</code></p>
<div class="su-tabs su-tabs-style-default su-tabs-mobile-stack" data-active="3" data-scroll-offset="0" data-anchor-in-url="no"><div class="su-tabs-nav"><span class="" data-url="" data-target="blank" tabindex="0" role="button"><strong>cURL</strong></span><span class="" data-url="" data-target="blank" tabindex="0" role="button"><strong>Python</strong></span><span class="" data-url="" data-target="blank" tabindex="0" role="button"><strong>PHP</strong></span></div><div class="su-tabs-panes"><div class="su-tabs-pane su-u-clearfix su-u-trim" data-title="&lt;strong&gt;cURL&lt;/strong&gt;">
<pre class="highlight shell tab-shell"><code>curl --user user:pass1 <span class="s1">'https://data.oxylabs.io/v2/stats'</span>
</code></pre>
</div>
<div class="su-tabs-pane su-u-clearfix su-u-trim" data-title="&lt;strong&gt;Python&lt;/strong&gt;">
<pre class="highlight python tab-python"><code><span class="kn">import</span> <span class="nn">requests</span>
<span class="kn">from</span> <span class="nn">pprint</span> <span class="kn">import</span> <span class="n">pprint</span>

<span class="c"># Get response from stats endpoint.</span>
<span class="n">response</span> <span class="o">=</span> <span class="n">requests</span><span class="o">.</span><span class="n">request</span><span class="p">(</span>
    <span class="n">method</span><span class="o">=</span><span class="s">'GET'</span><span class="p">,</span>
    <span class="n">url</span><span class="o">=</span><span class="s">'https://data.oxylabs.io/v2/stats'</span><span class="p">,</span>
    <span class="n">auth</span><span class="o">=</span><span class="p">(</span><span class="s">'user'</span><span class="p">,</span> <span class="s">'pass1'</span><span class="p">),</span>
<span class="p">)</span>

<span class="c"># Print prettified JSON response to stdout.</span>
<span class="n">pprint</span><span class="p">(</span><span class="n">response</span><span class="o">.</span><span class="n">json</span><span class="p">())</span></code></pre>
</div>
<div class="su-tabs-pane su-u-clearfix su-u-trim" data-title="&lt;strong&gt;PHP&lt;/strong&gt;">
<pre class="highlight php tab-php"><code><span class="cp">&lt;?php</span>

<span class="nv">$ch</span> <span class="o">=</span> <span class="nb">curl_init</span><span class="p">();</span>

<span class="nb">curl_setopt</span><span class="p">(</span><span class="nv">$ch</span><span class="p">,</span> <span class="nx">CURLOPT_URL</span><span class="p">,</span> <span class="s2">"https://data.oxylabs.io/v2/stats"</span><span class="p">);</span>
<span class="nb">curl_setopt</span><span class="p">(</span><span class="nv">$ch</span><span class="p">,</span> <span class="nx">CURLOPT_RETURNTRANSFER</span><span class="p">,</span> <span class="mi">1</span><span class="p">);</span>
<span class="nb">curl_setopt</span><span class="p">(</span><span class="nv">$ch</span><span class="p">,</span> <span class="nx">CURLOPT_CUSTOMREQUEST</span><span class="p">,</span> <span class="s2">"GET"</span><span class="p">);</span>
<span class="nb">curl_setopt</span><span class="p">(</span><span class="nv">$ch</span><span class="p">,</span> <span class="nx">CURLOPT_USERPWD</span><span class="p">,</span> <span class="s2">"user"</span> <span class="o">.</span> <span class="s2">":"</span> <span class="o">.</span> <span class="s2">"pass1"</span><span class="p">);</span>

<span class="nv">$result</span> <span class="o">=</span> <span class="nb">curl_exec</span><span class="p">(</span><span class="nv">$ch</span><span class="p">);</span>
<span class="k">echo</span> <span class="nv">$result</span><span class="p">;</span>

<span class="k">if</span> <span class="p">(</span><span class="nb">curl_errno</span><span class="p">(</span><span class="nv">$ch</span><span class="p">))</span> <span class="p">{</span>
    <span class="k">echo</span> <span class="s1">'Error:'</span> <span class="o">.</span> <span class="nb">curl_error</span><span class="p">(</span><span class="nv">$ch</span><span class="p">);</span>
<span class="p">}</span>
<span class="nb">curl_close</span> <span class="p">(</span><span class="nv">$ch</span><span class="p">);</span>
<span class="cp">?&gt;</span></code></pre>
</div></div></div>
<p>Sample output:</p>
<pre class="highlight json tab-json"><code><span class="p">{</span>
    <span class="s2">"data"</span><span class="p">:</span> <span class="p">{</span>
        <span class="s2">"sources"</span><span class="p">:</span> <span class="p">[</span>
            <span class="p">{</span>
                <span class="s2">"realtime_results_count"</span><span class="p">:</span> <span class="s2">"90"</span><span class="p">,</span>
                <span class="s2">"results_count"</span><span class="p">:</span> <span class="s2">"10"</span><span class="p">,</span>
                <span class="s2">"title"</span><span class="p">:</span> <span class="s2">"universal_ecommerce"</span>
            <span class="p">}</span>
        <span class="p">]</span>
    <span class="p">},</span>
    <span class="s2">"meta"</span><span class="p">:</span> <span class="p">{</span>
        <span class="s2">"group_by"</span><span class="p">:</span> <span class="kc">null</span>
    <span class="p">}</span>
<span class="p">}</span>
</code></pre>
<hr />
<h3 id="limits">Limits</h3>
<p>The following endpoint will give your monthly commitment information as well as how much of it has already been used:</p>
<div class="endpoint">
<pre><strong>GET https://data.oxylabs.io/v2/stats/limits</strong></pre>
</div>
<div class="su-tabs su-tabs-style-default su-tabs-mobile-stack" data-active="3" data-scroll-offset="0" data-anchor-in-url="no"><div class="su-tabs-nav"><span class="" data-url="" data-target="blank" tabindex="0" role="button"><strong>cURL</strong></span><span class="" data-url="" data-target="blank" tabindex="0" role="button"><strong>Python</strong></span><span class="" data-url="" data-target="blank" tabindex="0" role="button"><strong>PHP</strong></span></div><div class="su-tabs-panes"><div class="su-tabs-pane su-u-clearfix su-u-trim" data-title="&lt;strong&gt;cURL&lt;/strong&gt;">
<pre class="highlight shell tab-shell"><code>curl --user user:pass1 <span class="s1">'https://data.oxylabs.io/v2/stats/limits'</span></code></pre>
</div>
<div class="su-tabs-pane su-u-clearfix su-u-trim" data-title="&lt;strong&gt;Python&lt;/strong&gt;">
<pre class="highlight python tab-python"><code><span class="kn">import</span> <span class="nn">requests</span>
<span class="kn">from</span> <span class="nn">pprint</span> <span class="kn">import</span> <span class="n">pprint</span>

<span class="c"># Get response from stats endpoint.</span>
<span class="n">response</span> <span class="o">=</span> <span class="n">requests</span><span class="o">.</span><span class="n">request</span><span class="p">(</span>
    <span class="n">method</span><span class="o">=</span><span class="s">'GET'</span><span class="p">,</span>
    <span class="n">url</span><span class="o">=</span><span class="s">'https://data.oxylabs.io/v2/stats/limits'</span><span class="p">,</span>
    <span class="n">auth</span><span class="o">=</span><span class="p">(</span><span class="s">'user'</span><span class="p">,</span> <span class="s">'pass1'</span><span class="p">),</span>
<span class="p">)</span>

<span class="c"># Print prettified JSON response to stdout.</span>
<span class="n">pprint</span><span class="p">(</span><span class="n">response</span><span class="o">.</span><span class="n">json</span><span class="p">())</span></code></pre>
</div>
<div class="su-tabs-pane su-u-clearfix su-u-trim" data-title="&lt;strong&gt;PHP&lt;/strong&gt;">
<pre class="highlight php tab-php"><code><span class="cp">&lt;?php</span>

<span class="nv">$ch</span> <span class="o">=</span> <span class="nb">curl_init</span><span class="p">();</span>

<span class="nb">curl_setopt</span><span class="p">(</span><span class="nv">$ch</span><span class="p">,</span> <span class="nx">CURLOPT_URL</span><span class="p">,</span> <span class="s2">"https://data.oxylabs.io/v2/stats/limits"</span><span class="p">);</span>
<span class="nb">curl_setopt</span><span class="p">(</span><span class="nv">$ch</span><span class="p">,</span> <span class="nx">CURLOPT_RETURNTRANSFER</span><span class="p">,</span> <span class="mi">1</span><span class="p">);</span>
<span class="nb">curl_setopt</span><span class="p">(</span><span class="nv">$ch</span><span class="p">,</span> <span class="nx">CURLOPT_CUSTOMREQUEST</span><span class="p">,</span> <span class="s2">"GET"</span><span class="p">);</span>
<span class="nb">curl_setopt</span><span class="p">(</span><span class="nv">$ch</span><span class="p">,</span> <span class="nx">CURLOPT_USERPWD</span><span class="p">,</span> <span class="s2">"user"</span> <span class="o">.</span> <span class="s2">":"</span> <span class="o">.</span> <span class="s2">"pass1"</span><span class="p">);</span>

<span class="nv">$result</span> <span class="o">=</span> <span class="nb">curl_exec</span><span class="p">(</span><span class="nv">$ch</span><span class="p">);</span>
<span class="k">echo</span> <span class="nv">$result</span><span class="p">;</span>

<span class="k">if</span> <span class="p">(</span><span class="nb">curl_errno</span><span class="p">(</span><span class="nv">$ch</span><span class="p">))</span> <span class="p">{</span>
    <span class="k">echo</span> <span class="s1">'Error:'</span> <span class="o">.</span> <span class="nb">curl_error</span><span class="p">(</span><span class="nv">$ch</span><span class="p">);</span>
<span class="p">}</span>
<span class="nb">curl_close</span> <span class="p">(</span><span class="nv">$ch</span><span class="p">);</span>
<span class="cp">?&gt;</span></code></pre>
</div></div></div>
<p>Sample output:</p>
<pre class="highlight json tab-json"><code><span class="p">{</span>
    <span class="s2">"monthly_requests_commitment"</span><span class="p">:</span> <span class="mi">4500000</span><span class="p">,</span>
    <span class="s2">"used_requests"</span><span class="p">:</span> <span class="mi">985000</span>
<span class="p">}</span></code></pre>
<hr />
<h2 id="response-codes">Response Codes</h2>
<table>
<thead>
<tr>
<th>Code</th>
<th>Status</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><code>204</code></td>
<td>No Content</td>
<td>You are trying to retrieve a job that has not been completed yet.</td>
</tr>
<tr>
<td><code>400</code></td>
<td>Multiple error messages</td>
<td>Bad request structure, could be a misspelled parameter or invalid value. The response body will have a more specific error message.</td>
</tr>
<tr>
<td><code>401</code></td>
<td>&#8216;Authorization header not provided' / &#8216;Invalid authorization header' / &#8216;Client not found'</td>
<td>Missing authorization header or incorrect login credentials.</td>
</tr>
<tr>
<td><code>403</code></td>
<td>Forbidden</td>
<td>Your account does not have access to this resource.</td>
</tr>
<tr>
<td><code>404</code></td>
<td>Not Found</td>
<td>Job ID you are looking for is no longer available.</td>
</tr>
<tr>
<td><code>429</code></td>
<td>Too many requests</td>
<td>Exceeded rate limit. Please contact your account manager to increase limits.</td>
</tr>
<tr>
<td><code>500</code></td>
<td>Unknown Error</td>
<td>Service unavailable.</td>
</tr>
<tr>
<td><code>524</code></td>
<td>Timeout</td>
<td>Service unavailable.</td>
</tr>
<tr>
<td><code>612</code></td>
<td>Undefined Internal Error</td>
<td>Something went wrong and we failed the job you submitted. You can try again at no extra cost, as we do not charge you for <code>faulted</code> jobs. If that does not work, please get in touch with us.</td>
</tr>
<tr>
<td><code>613</code></td>
<td>Faulted After Too Many Retries</td>
<td>We tried scraping the job you submitted, but gave up after reaching our retry limit. You can try again at no extra cost, as we do not charge you for <code>faulted</code> jobs. If that does not work, please get in touch with us.</td>
</tr>
</tbody>
</table>
<hr />
<h4>References</h4>
<ul>
<li style="list-style-type: none;">
<ul>
<li><a href="https://developers.oxylabs.io/scraper-apis/ecommerce_scraper_api/source/universal/index.html#quick-start" target="_blank" rel="nofollow noopener">https://developers.oxylabs.io/scraper-apis/ecommerce_scraper_api/source/universal/index.html#quick-start</a></li>
<li><a href="https://developers.oxylabs.io/scraper-apis/" target="_blank" rel="nofollow noopener">https://developers.oxylabs.io/scraper-apis/ </a></li>
</ul>
</li>
</ul>
<hr />
<blockquote><p><strong>Disclaimer:</strong> This part of the content is mainly from the merchant. If the merchant does not want it to be displayed on my website, please <a href="https://www.proxysp.com/contact-us/">contact us</a> to delete your content.</p></blockquote>
]]></content:encoded>
					
					<wfw:commentRss>https://proxysp.com/oxylabs-ecommerce-scraper-api/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">9117</post-id>	</item>
		<item>
		<title>How to Use Zenscrape API</title>
		<link>https://proxysp.com/how-to-use-zenscrape-api/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=how-to-use-zenscrape-api</link>
					<comments>https://proxysp.com/how-to-use-zenscrape-api/#respond</comments>
		
		<dc:creator><![CDATA[proxysp]]></dc:creator>
		<pubDate>Thu, 01 Jan 1970 00:00:00 +0000</pubDate>
				<category><![CDATA[APIs]]></category>
		<category><![CDATA[Manuals]]></category>
		<guid isPermaLink="false">https://www.proxysp.com/?p=8684</guid>

					<description><![CDATA[Want to use Zenscrape API for web scraping? So you have to know how to use Zenscrape API. This article will give you a detailed guide. &#8230;<p class="read-more"> <a class="ast-button" href="https://proxysp.com/how-to-use-zenscrape-api/"> <span class="screen-reader-text">How to Use Zenscrape API</span> Read More &#187;</a></p>]]></description>
										<content:encoded><![CDATA[<blockquote><p>Want to use Zenscrape API for web scraping? So you have to know how to use Zenscrape API. This article will give you a detailed guide. Let's go!</p></blockquote>
<h2>Documentation</h2>
<p><b>Pro Tip</b>: <a href="https://app.zenscrape.com/register" target="_blank" rel="nofollow noopener">Register</a> your free apikey here and all code snippets below will contain your private apikey. If you have already registered, <a href="https://app.zenscrape.com/login" target="_blank" rel="nofollow noopener">login</a> before viewing the documentation.</p>
<h3 id="postman">Postman Collection</h3>
<p>To provide you with the best developer experience possible, we also created a Postman collection covering all of our endpoints, including plenty of examples. <a href="https://app.getpostman.com/run-collection/85f8b936e3e1870c3fa9" target="_blank" rel="nofollow noopener">Run in Postman</a>.</p>
<hr />
<h3 id="failed">Credit Costs & Failed Requests</h3>
<p>The number of credits that is counted towards your quota depends on the type request configuration that and the status code that the API endpoint returns. Hence, a request can cost between 1 and 25 credits. You can configure your request with our request builder inside your <a href="https://app.zenscrape.com/" target="_blank" rel="nofollow noopener">dashboard</a>. It generates code snippets for the most common programming languages. You can find the list of our error codes <a href="https://app.zenscrape.com/documentation#errorCodes" target="_blank" rel="nofollow noopener">here</a>.</p>
<table class="table">
<thead>
<tr>
<th class="pl-0" scope="col"><code>premium</code></th>
<th scope="col"><code>render</code></th>
<th scope="col">Cost in credits</th>
</tr>
</thead>
<tbody>
<tr>
<td>false</td>
<td>false</td>
<td>1</td>
</tr>
<tr>
<td>false</td>
<td>true</td>
<td>5</td>
</tr>
<tr>
<td>true</td>
<td>false</td>
<td>10</td>
</tr>
<tr>
<td>true</td>
<td>true</td>
<td>25</td>
</tr>
</tbody>
</table>
<hr />
<h3>Basic Usage</h3>
<p>This endpoint allows you to fetch the content of a website. For basic usage, only one parameter is required in addition to your apikey.</p>
<div class="card-header"><code>GET POST /get</code></div>
<div class="card-body">
<p>Zenscrape adding the <code>url</code> parameter to your request will fetch the HTML content from the target website. This request configuration will use standard proxies and will count as 1 credit towards your monthly limit.</p>
<pre class="p-0"><code class="bash p-3 hljs">curl <span class="hljs-string">"https://app.zenscrape.com/api/v1/get?url=http://httpbin.org/ip"</span> \
    -H <span class="hljs-string">"apikey: YOUR-APIKEY"</span> </code></pre>
<p>will generate the following response:</p>
<pre class="p-0"><code class="html p-3 hljs xml"><span class="hljs-tag">&lt;<span class="hljs-name">html</span>&gt;</span>
    <span class="hljs-tag">&lt;<span class="hljs-name">head</span>&gt;</span>
    <span class="hljs-tag">&lt;/<span class="hljs-name">head</span>&gt;</span>
    <span class="hljs-tag">&lt;<span class="hljs-name">body</span>&gt;</span>
        <span class="hljs-tag">&lt;<span class="hljs-name">pre</span> <span class="hljs-attr">style</span>=<span class="hljs-string">"word-wrap: break-word; white-space: pre-wrap;"</span>&gt;</span>
            {
                "origin": "80.102.66.13"
            }
        <span class="hljs-tag">&lt;/<span class="hljs-name">pre</span>&gt;</span>
    <span class="hljs-tag">&lt;/<span class="hljs-name">body</span>&gt;</span>
<span class="hljs-tag">&lt;/<span class="hljs-name">html</span>&gt;</span></code></pre>
</div>
<hr />
<h3>Web Scraping API</h3>
<p><code>GET POST /get</code></p>
<p>See Demo Response:</p>
<div class="card-body">
<pre class="p-0">&lt;html&gt; 
   &lt;head&gt;&lt;/head&gt; 
     &lt;body&gt; 
       &lt;pre&gt; 
          { 
<span class="hljs-attr">            "origin"</span>: <span class="hljs-string">"223.233.44.142"</span> 
          } 
      &lt;/pre&gt; 
    &lt;/body&gt; 
&lt;/html&gt;</pre>
</div>
<p>This endpoint accepts the following parameters:</p>
<div class="su-table su-table-responsive su-table-alternate su-table-fixed">
<table class="table">
<thead>
<tr>
<th class="pl-0" scope="col">Parameter</th>
<th scope="col">Type</th>
<th scope="col">Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>url</td>
<td><b>required</b></td>
<td>target site you want to scrape</td>
</tr>
<tr>
<td>premium</td>
<td><b>optional</b>, boolean, counts as 20 credits towards your quota</td>
<td>Uses residential proxies, unlocks sites that are hard to scrape</td>
</tr>
<tr>
<td>location</td>
<td><b>optional</b>, default: worldwide</td>
<td>if <code>premium=false</code> possible locations are &#8216;na' (North America) and &#8216;eu' (Europe)<br />
if <code>premium=true</code> you can choose a location from our <a href="https://app.zenscrape.com/documentation#proxyLocationList" target="_blank" rel="nofollow noopener">list of 230+ countries</a></td>
</tr>
<tr>
<td>keep_headers</td>
<td><b>optional</b>, boolean</td>
<td>Allows to pass through forward headers (e.g. user agents, cookies)</td>
</tr>
<tr>
<td>device_type</td>
<td><b>optional</b>, boolean</td>
<td>By default, a desktop user agent is set. When set to &#8216;mobile', it will be set to an iPhone or Android user agent</td>
</tr>
<tr>
<td>render</td>
<td><b>optional</b>, boolean, counts as 5 credits towards your quota</td>
<td>Use a headless browser to fetch content that relies on javascript</td>
</tr>
<tr>
<td>wait_for</td>
<td><b>optional</b>, integer</td>
<td>Max value: 15, only works together with <code>render=true</code> amount of seconds that a browser waits for content to render before it scrapes the HTML markup</td>
</tr>
<tr>
<td>wait_for_css</td>
<td><b>optional</b>, integer</td>
<td>Only works together with <code>render=true</code>, waits until the css-selector becomes visible</td>
</tr>
<tr>
<td>session</td>
<td><b>optional</b>, string</td>
<td>a random string if you want to reuse an IP, for example <code>session=kdQ1VeQE</code></td>
</tr>
<tr>
<td>scroll_to_bottom</td>
<td><b>optional</b>, boolean</td>
<td>Only works together with <code>render=true</code>, scrolls to bottom of page before returning the page content</td>
</tr>
</tbody>
</table>
</div>
<p>Zenscrape is a REST-API and accepts HTTP requests through any programming language. The following example connects to the url https://httpbin.org/ip through a proxy and renders the content inside a browser, before it returns the markup to you.</p>
<div class="su-tabs su-tabs-style-default su-tabs-mobile-stack" data-active="5" data-scroll-offset="0" data-anchor-in-url="no"><div class="su-tabs-nav"><span class="" data-url="" data-target="blank" tabindex="0" role="button"><strong>Browser</strong></span><span class="" data-url="" data-target="blank" tabindex="0" role="button"><strong>cURL</strong></span><span class="" data-url="" data-target="blank" tabindex="0" role="button"><strong>Python</strong></span><span class="" data-url="" data-target="blank" tabindex="0" role="button"><strong> Node.js</strong></span><span class="" data-url="" data-target="blank" tabindex="0" role="button"><strong>PHP</strong></span></div><div class="su-tabs-panes"><div class="su-tabs-pane su-u-clearfix su-u-trim" data-title="&lt;strong&gt;Browser&lt;/strong&gt;">
<div class="card-body">
<pre class="p-0">https://app.zenscrape.com/api/v1/get?apikey=YOUR-APIKEY&url=https%3A%2F%2Fhttpbin.org%2Fip&premium=true&country=de&render=true</pre>
</div>
</div>
<div class="su-tabs-pane su-u-clearfix su-u-trim" data-title="&lt;strong&gt;cURL&lt;/strong&gt;">
<div class="card-body">
<pre class="p-0">curl <span class="hljs-string">"https://app.zenscrape.com/api/v1/get?apikey=YOUR-APIKEY&url=https%3A%2F%2Fhttpbin.org%2Fip&premium=true&country=de&render=true"</span></pre>
</div>
</div>
<div class="su-tabs-pane su-u-clearfix su-u-trim" data-title="&lt;strong&gt;Python&lt;/strong&gt;">
<div class="card-body">
<pre class="p-0"><span class="hljs-keyword">import</span> requests headers = { <span class="hljs-string">"apikey"</span>: <span class="hljs-string">"YOUR-APIKEY"</span>} params = ( (<span class="hljs-string">"url"</span>,<span class="hljs-string">"https://httpbin.org/ip"</span>), (<span class="hljs-string">"premium"</span>,<span class="hljs-string">"true"</span>), (<span class="hljs-string">"country"</span>,<span class="hljs-string">"de"</span>), (<span class="hljs-string">"render"</span>,<span class="hljs-string">"true"</span>), ); response = requests.get(<span class="hljs-string">'https://app.zenscrape.com/api/v1/get'</span>, headers=headers, params=params); print(response.text)</pre>
</div>
</div>
<div class="su-tabs-pane su-u-clearfix su-u-trim" data-title="&lt;strong&gt; Node.js&lt;/strong&gt;">
<div class="card-body">
<pre class="p-0"><span class="hljs-keyword">var</span> request = <span class="hljs-built_in">require</span>(<span class="hljs-string">'request'</span>); <span class="hljs-keyword">var</span> options = { <span class="hljs-attr">url</span>: <span class="hljs-string">'https://app.zenscrape.com/api/v1/get?apikey=YOUR-APIKEY&url=https://httpbin.org/ip&premium=true&country=de&render=true'</span> }; <span class="hljs-function"><span class="hljs-keyword">function</span> <span class="hljs-title">callback</span>(<span class="hljs-params">error, response, body</span>) </span>{ <span class="hljs-keyword">if</span> (!error && response.statusCode == <span class="hljs-number">200</span>) { <span class="hljs-built_in">console</span>.log(body); } } request(options, callback);</pre>
</div>
</div>
<div class="su-tabs-pane su-u-clearfix su-u-trim" data-title="&lt;strong&gt;PHP&lt;/strong&gt;">
<div class="card-body">
<pre class="p-0">$ch = curl_init(); curl_setopt($ch, CURLOPT_RETURNTRANSFER, <span class="hljs-literal">true</span>); curl_setopt($ch, CURLOPT_HEADER, <span class="hljs-literal">false</span>); $data = [ <span class="hljs-string">"url"</span> =&gt; <span class="hljs-string">"https://httpbin.org/ip"</span>, <span class="hljs-string">"premium"</span> =&gt; <span class="hljs-string">"true"</span>, <span class="hljs-string">"country"</span> =&gt; <span class="hljs-string">"de"</span>, <span class="hljs-string">"render"</span> =&gt; <span class="hljs-string">"true"</span>, ]; curl_setopt($ch, CURLOPT_URL, <span class="hljs-string">"https://app.zenscrape.com/api/v1/get?"</span> . http_build_query($data)); curl_setopt($ch, CURLOPT_HTTPHEADER, <span class="hljs-keyword">array</span>( <span class="hljs-string">"Content-Type: application/json"</span>, <span class="hljs-string">"apikey: YOUR-APIKEY"</span>, )); $response = curl_exec($ch); curl_close($ch); $json = json_decode($response); var_dump($json);</pre>
</div>
</div></div></div>
<hr />
<h3>Proxy Mode</h3>
<p><code>GET POST </code></p>
<p>See Demo Response:</p>
<div class="card-body">
<p>will generate the following response:</p>
<pre class="p-0">&lt;html&gt; 
   &lt;head&gt;&lt;/head&gt; 
     &lt;body&gt; 
       &lt;pre&gt; 
          { 
<span class="hljs-attr">            "origin": <span class="hljs-string">"223.233.44.142"</span></span> 
          } 
      &lt;/pre&gt; 
    &lt;/body&gt; &lt;/
html&gt;</pre>
</div>
<p class="mb-4">In addition to the REST API Zenscrape also provides an HTTP proxy interface. You can integrate any application that already relies on proxies. Simply use your API key as the username and use any parameters you usually supply as the password.</p>
<p class="mb-4">The HTTP proxy will return <code>HTTP/1.1 407 Proxy Authentication Required</code> in case your credentials are invalid.</p>
<div class="su-tabs su-tabs-style-default su-tabs-mobile-stack" data-active="3" data-scroll-offset="0" data-anchor-in-url="no"><div class="su-tabs-nav"><span class="" data-url="" data-target="blank" tabindex="0" role="button"><strong>cURL</strong></span><span class="" data-url="" data-target="blank" tabindex="0" role="button"><strong>Python</strong></span><span class="" data-url="" data-target="blank" tabindex="0" role="button"><strong>PHP</strong></span></div><div class="su-tabs-panes"><div class="su-tabs-pane su-u-clearfix su-u-trim" data-title="&lt;strong&gt;cURL&lt;/strong&gt;">
<div class="card-body">
<pre class="p-0">curl -k -x <span class="hljs-string">"http://YOUR-APIKEY:render=true&wait_for_css=.author@proxy-server.zenscrape.com:8282"</span> https://quotes.toscrape.com/js</pre>
</div>
</div>
<div class="su-tabs-pane su-u-clearfix su-u-trim" data-title="&lt;strong&gt;Python&lt;/strong&gt;">
<div class="card-body">
<pre class="p-0"><span class="hljs-keyword">import</span> requests proxy = { <span class="hljs-string">"http"</span>: <span class="hljs-string">"http://YOUR-APIKEY:render=true&wait_for_css=.author@proxy-server.zenscrape.com:8282"</span>, <span class="hljs-string">"https"</span>: <span class="hljs-string">"http://YOUR-APIKEY:render=true&wait_for_css=.author@proxy-server.zenscrape.com:8282"</span> } response = requests.get(<span class="hljs-string">'https://quotes.toscrape.com/js'</span>, proxies=proxy, verify=<span class="hljs-literal">False</span>); print(response.text)</pre>
</div>
</div>
<div class="su-tabs-pane su-u-clearfix su-u-trim" data-title="&lt;strong&gt;PHP&lt;/strong&gt;">
<div class="card-body">
<pre class="p-0">$ch = curl_init(); curl_setopt($ch, CURLOPT_RETURNTRANSFER, <span class="hljs-literal">true</span>); curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, <span class="hljs-literal">false</span>); curl_setopt($ch, CURLOPT_URL, <span class="hljs-string">"https://quotes.toscrape.com/js"</span>); curl_setopt($ch, CURLOPT_PROXY, <span class="hljs-string">"proxy-server.zenscrape.com:8282"</span>); curl_setopt($ch, CURLOPT_PROXYUSERPWD, <span class="hljs-string">"YOUR-APIKEY:render=true&wait_for_css=.author"</span>); $response = curl_exec($ch); curl_close($ch); var_dump($response);</pre>
</div>
</div></div></div>
<hr />
<h3>Premium Proxy Location List</h3>
<p>The following list of locations can be used for the <code>location</code> parameter, if <code>premium</code> is set to <code>true</code>.</p>
<div class="su-spoiler su-spoiler-style-default su-spoiler-icon-plus su-spoiler-closed" data-scroll-offset="0" data-anchor-in-url="no"><div class="su-spoiler-title" tabindex="0" role="button"><span class="su-spoiler-icon"></span>North America</div><div class="su-spoiler-content su-u-clearfix su-u-trim">
<div class="col-md-4">
<ul>
<li>ai &#8211; Anguilla</li>
<li>ag &#8211; Antigua and Barbuda</li>
<li>aw &#8211; Aruba</li>
<li>bs &#8211; Bahamas</li>
<li>bb &#8211; Barbados</li>
<li>bz &#8211; Belize</li>
<li>bm &#8211; Bermuda</li>
<li>bq &#8211; Bonaire Saint Eustatius and Saba</li>
<li>vg &#8211; BritishVirginIslands</li>
<li>ca &#8211; Canada</li>
<li>ky &#8211; Cayman Islands</li>
<li>cr &#8211; Costa Rica</li>
<li>cu &#8211; Cuba</li>
<li>cw &#8211; Curacao</li>
</ul>
</div>
<div class="col-md-4">
<ul>
<li>dm &#8211; Dominica</li>
<li>do &#8211; Dominican Republic</li>
<li>sv &#8211; El Salvador</li>
<li>gd &#8211; Grenada</li>
<li>gp &#8211; Guadeloupe</li>
<li>gt &#8211; Guatemala</li>
<li>ht &#8211; Haiti</li>
<li>hn &#8211; Honduras</li>
<li>jm &#8211; Jamaica</li>
<li>mq &#8211; Martinique</li>
<li>mx &#8211; Mexico</li>
<li>ni &#8211; Nicaragua</li>
</ul>
</div>
<div class="col-md-4">
<ul>
<li>pa &#8211; Panama</li>
<li>pr &#8211; Puerto Rico</li>
<li>bl &#8211; Saint Barthelemy</li>
<li>kn &#8211; Saint Kitts and Nevis</li>
<li>lc &#8211; Saint Lucia</li>
<li>mf &#8211; Saint Martin</li>
<li>pm &#8211; Saint Pierre and Miquelon</li>
<li>vc &#8211; Saint Vincent and the Grenadines</li>
<li>sx &#8211; Sint Maarten</li>
<li>tt &#8211; Trinidad and Tobago</li>
<li>tc &#8211; TurksandCaicosIslands</li>
<li>us &#8211; United States</li>
<li>vi &#8211; United States Virgin Islands</li>
</ul>
</div>
</div></div>
<div class="su-spoiler su-spoiler-style-default su-spoiler-icon-plus su-spoiler-closed" data-scroll-offset="0" data-anchor-in-url="no"><div class="su-spoiler-title" tabindex="0" role="button"><span class="su-spoiler-icon"></span>Europe</div><div class="su-spoiler-content su-u-clearfix su-u-trim">
<div class="col-md-4">
<ul>
<li>ax &#8211; Aland Islands</li>
<li>al &#8211; Albania</li>
<li>ad &#8211; Andorra</li>
<li>at &#8211; Austria</li>
<li>by &#8211; Belarus</li>
<li>be &#8211; Belgium</li>
<li>ba &#8211; Bosnia and Herzegovina</li>
<li>bg &#8211; Bulgaria</li>
<li>hr &#8211; Croatia</li>
<li>cy &#8211; Cyprus</li>
<li>cz &#8211; Czech Republic</li>
<li>dk &#8211; Denmark</li>
<li>ee &#8211; Estonia</li>
<li>fo &#8211; Faroe Islands</li>
<li>fi &#8211; Finland</li>
<li>fr &#8211; France</li>
</ul>
</div>
<div class="col-md-4">
<ul>
<li>de &#8211; Germany</li>
<li>gi &#8211; Gibraltar</li>
<li>gr &#8211; Greece</li>
<li>gl &#8211; Greenland</li>
<li>gg &#8211; Guernsey</li>
<li>hu &#8211; Hungary</li>
<li>is &#8211; Iceland</li>
<li>ie &#8211; Ireland</li>
<li>im &#8211; Isle of Man</li>
<li>it &#8211; Italy</li>
<li>je &#8211; Jersey</li>
<li>xk &#8211; Kosovo</li>
<li>lv &#8211; Latvia</li>
<li>li &#8211; Liechtenstein</li>
<li>lt &#8211; Lithuania</li>
<li>lu &#8211; Luxembourg</li>
<li>mk &#8211; Macedonia</li>
</ul>
</div>
<div class="col-md-4">
<ul>
<li>mt &#8211; Malta</li>
<li>md &#8211; Moldova</li>
<li>mc &#8211; Monaco</li>
<li>me &#8211; Montenegro</li>
<li>nl &#8211; Netherlands</li>
<li>no &#8211; Norway</li>
<li>pl &#8211; Poland</li>
<li>pt &#8211; Portugal</li>
<li>ro &#8211; Romania</li>
<li>sm &#8211; San Marino</li>
<li>rs &#8211; Serbia</li>
<li>sk &#8211; Slovakia</li>
<li>si &#8211; Slovenia</li>
<li>es &#8211; Spain</li>
<li>se &#8211; Sweden</li>
<li>ch &#8211; Switzerland</li>
<li>tr &#8211; Turkey</li>
<li>ua &#8211; Ukraine</li>
<li>uk &#8211; United Kingdom</li>
<li>va &#8211; Vatican</li>
</ul>
</div>
</div></div>
<div class="su-spoiler su-spoiler-style-default su-spoiler-icon-plus su-spoiler-closed" data-scroll-offset="0" data-anchor-in-url="no"><div class="su-spoiler-title" tabindex="0" role="button"><span class="su-spoiler-icon"></span>Asia</div><div class="su-spoiler-content su-u-clearfix su-u-trim">
<div class="col-md-4">
<ul>
<li>af &#8211; Afghanistan</li>
<li>am &#8211; Armenia</li>
<li>az &#8211; Azerbaijan</li>
<li>bh &#8211; Bahrain</li>
<li>bd &#8211; Bangladesh</li>
<li>bt &#8211; Bhutan</li>
<li>bn &#8211; Brunei</li>
<li>kh &#8211; Cambodia</li>
<li>cn &#8211; China</li>
<li>ge &#8211; Georgia</li>
<li>hk &#8211; Hong Kong</li>
<li>in &#8211; India</li>
<li>mm &#8211; Myanmar</li>
<li>np &#8211; Nepal</li>
<li>om &#8211; Oman</li>
<li>pk &#8211; Pakistan</li>
<li>ph &#8211; Philippines</li>
</ul>
</div>
<div class="col-md-4">
<ul>
<li>id &#8211; Indonesia</li>
<li>ir &#8211; Iran</li>
<li>iq &#8211; Iraq</li>
<li>il &#8211; Israel</li>
<li>jp &#8211; Japan</li>
<li>jo &#8211; Jordan</li>
<li>kz &#8211; Kazakhstan</li>
<li>kw &#8211; Kuwait</li>
<li>kg &#8211; Kyrgyzstan</li>
<li>la &#8211; Laos</li>
<li>lb &#8211; Lebanon</li>
<li>mo &#8211; Macao</li>
<li>my &#8211; Malaysia</li>
<li>mv &#8211; Maldives</li>
<li>mn &#8211; Mongolia</li>
</ul>
</div>
<div class="col-md-4">
<ul>
<li>qa &#8211; Qatar</li>
<li>ru &#8211; Russia</li>
<li>sa &#8211; Saudi Arabia</li>
<li>sg &#8211; Singapore</li>
<li>kr &#8211; South Korea</li>
<li>lk &#8211; Sri Lanka</li>
<li>sy &#8211; Syria</li>
<li>tw &#8211; Taiwan</li>
<li>tj &#8211; Tajikistan</li>
<li>th &#8211; Thailand</li>
<li>tm &#8211; Turkmenistan</li>
<li>ae &#8211; United Arab Emirates</li>
<li>uz &#8211; Uzbekistan</li>
<li>vn &#8211; Vietnam</li>
<li>ye &#8211; Yemen</li>
</ul>
</div>
</div></div>
<div class="su-spoiler su-spoiler-style-default su-spoiler-icon-plus su-spoiler-closed" data-scroll-offset="0" data-anchor-in-url="no"><div class="su-spoiler-title" tabindex="0" role="button"><span class="su-spoiler-icon"></span>South America</div><div class="su-spoiler-content su-u-clearfix su-u-trim">
<div class="col-md-4">
<ul>
<li>ar &#8211; Argentina</li>
<li>bo &#8211; Bolivia</li>
<li>br &#8211; Brazil</li>
<li>cl &#8211; Chile</li>
<li>co &#8211; Colombia</li>
</ul>
</div>
<div class="col-md-4">
<ul>
<li>ms &#8211; Montserrat</li>
<li>ec &#8211; Ecuador</li>
<li>fk &#8211; Falkland Islands</li>
<li>gf &#8211; French Guiana</li>
<li>gy &#8211; Guyana</li>
</ul>
</div>
<div class="col-md-4">
<ul>
<li>py &#8211; Paraguay</li>
<li>pe &#8211; Peru</li>
<li>sr &#8211; Surinam</li>
<li>uy &#8211; Uruguay</li>
<li>ve &#8211; Venezuela</li>
</ul>
</div>
</div></div>
<div class="su-spoiler su-spoiler-style-default su-spoiler-icon-plus su-spoiler-closed" data-scroll-offset="0" data-anchor-in-url="no"><div class="su-spoiler-title" tabindex="0" role="button"><span class="su-spoiler-icon"></span>Australia & Oceanica</div><div class="su-spoiler-content su-u-clearfix su-u-trim">
<div class="col-md-4">
<ul class="country-list">
<li>au &#8211; Australia</li>
<li>cx &#8211; Christmas Island</li>
<li>cc &#8211; Cocos Islands</li>
<li>ck &#8211; Cook Islands</li>
<li>tl &#8211; East Timor</li>
<li>fj &#8211; Fiji</li>
<li>pf &#8211; FrenchPolynesia</li>
<li>gu &#8211; Guam</li>
</ul>
</div>
<div class="col-md-4">
<ul>
<li>ki &#8211; Kiribati</li>
<li>mh &#8211; Marshall Islands</li>
<li>fm &#8211; Micronesia</li>
<li>nr &#8211; Nauru</li>
<li>nc &#8211; New Caledonia</li>
<li>nz &#8211; New Zealand</li>
<li>mp &#8211; Northern Mariana Islands</li>
</ul>
</div>
<div class="col-md-4">
<ul>
<li>pw &#8211; Palau</li>
<li>pg &#8211; Papua New Guinea</li>
<li>ws &#8211; Samoa</li>
<li>sb &#8211; SolomonIslands</li>
<li>to &#8211; Tonga</li>
<li>tv &#8211; Tuvalu</li>
<li>vu &#8211; Vanuatu</li>
<li>vf &#8211; Wallis and Futuna</li>
</ul>
</div>
</div></div>
<div class="su-spoiler su-spoiler-style-default su-spoiler-icon-plus su-spoiler-closed" data-scroll-offset="0" data-anchor-in-url="no"><div class="su-spoiler-title" tabindex="0" role="button"><span class="su-spoiler-icon"></span>Africa</div><div class="su-spoiler-content su-u-clearfix su-u-trim">
<div class="col-md-4">
<ul class="country-list">
<li>dz &#8211; Algeria</li>
<li>ao &#8211; Angola</li>
<li>bj &#8211; Benin</li>
<li>bw &#8211; Botswana</li>
<li>bf &#8211; Burkina Faso</li>
<li>bi &#8211; Burundi</li>
<li>cm &#8211; Cameroon</li>
<li>cv &#8211; CapeV erde</li>
<li>cf &#8211; Central African Republic</li>
<li>td &#8211; Chad</li>
<li>km &#8211; Comoros</li>
<li>dj &#8211; Djibouti</li>
<li>eg &#8211; Egypt</li>
<li>gq &#8211; Equatorial Guinea</li>
<li>er &#8211; Eritrea</li>
<li>et &#8211; Ethiopia</li>
<li>ga &#8211; Gabon</li>
<li>gm &#8211; Gambia</li>
</ul>
</div>
<div class="col-md-4">
<ul>
<li>gh &#8211; Ghana</li>
<li>gn &#8211; Guinea</li>
<li>gw &#8211; Guinea</li>
<li>ci &#8211; Ivory Coast</li>
<li>ke &#8211; Kenya</li>
<li>ls &#8211; Lesotho</li>
<li>lr &#8211; Liberia</li>
<li>ly &#8211; Libya</li>
<li>mg &#8211; Madagascar</li>
<li>mw &#8211; Malawi</li>
<li>ml &#8211; Mali</li>
<li>mr &#8211; Mauritania</li>
<li>mu &#8211; Mauritius</li>
<li>yt &#8211; Mayotte</li>
<li>ma &#8211; Morocco</li>
<li>mz &#8211; Mozambique</li>
<li>na &#8211; Namibia</li>
<li>ne &#8211; Niger</li>
<li>ng &#8211; Nigeria</li>
<li>cg &#8211; Republic of the Congo</li>
<li>re &#8211; Reunion</li>
</ul>
</div>
<div class="col-md-4">
<ul>
<li>rw &#8211; Rwanda</li>
<li>st &#8211; Sao Tomeand Principe</li>
<li>sn &#8211; Senegal</li>
<li>sc &#8211; Seychelles</li>
<li>sl &#8211; Sierra Leone</li>
<li>so &#8211; Somalia</li>
<li>za &#8211; South Africa</li>
<li>ss &#8211; South Sudan</li>
<li>sd &#8211; Sudan</li>
<li>sz &#8211; Swaziland</li>
<li>tz &#8211; Tanzania</li>
<li>tg &#8211; Togo</li>
<li>tn &#8211; Tunisia</li>
<li>ug &#8211; Uganda</li>
<li>eh &#8211; Western Sahara</li>
<li>zm &#8211; Zambia</li>
<li>zw &#8211; Zimbabwe</li>
</ul>
</div>
</div></div>
<hr />
<h3 id="authentification">Authentification & Apikey Information</h3>
<p>Zenscrape uses API keys to allow access to the API. You can register a new API key at our developer portal. You can register a new API key at our <a href="https://app.zenscrape.com/register" target="_blank" rel="nofollow noopener">developer portal</a>. The <code>/status</code> route returns the number of left credits.</p>
<p>To authorize, you can use the following ways:</p>
<p class="hs-docs-heading h5 d-inline mr-2">GET POST /status</p>
<p>Zenscrape looks for the API key in a header that looks like the following (recommended, works with all requests):</p>
<div class="card-body">
<pre class="p-0">curl <span class="hljs-string">"https://app.zenscrape.com/api/v1/status"</span> \ -H <span class="hljs-string">"apikey: YOUR-APIKEY"</span></pre>
</div>
<p>or</p>
<div class="card-body">
<pre class="p-0">curl <span class="hljs-string">"https://app.zenscrape.com/api/v1/status?apikey=YOUR-APIKEY"</span></pre>
</div>
<p>or</p>
<div class="card-body">
<pre class="p-0">curl <span class="hljs-string">"https://app.zenscrape.com/api/v1/status -F "</span>apikey=YOUR-APIKEY<span class="hljs-string">"</span></pre>
</div>
<hr />
<h3>Error Codes</h3>
<p>The Zenscrape API uses the following error codes:</p>
<div class="su-table su-table-responsive su-table-alternate">
<table class="table">
<thead>
<tr>
<th class="pl-0" scope="col">HTTP Error Code</th>
<th scope="col">Meaning</th>
</tr>
</thead>
<tbody>
<tr>
<td>403</td>
<td>Forbidden &#8212; API key is wrong, you don't have enough credits or you don't have enough rights to access it.</td>
</tr>
<tr>
<td>404</td>
<td>Not Found &#8212; There were no results found.</td>
</tr>
<tr>
<td>429</td>
<td>Too many requests &#8212; You have reached the limit for concurrency. Please wait or upgrade</td>
</tr>
<tr>
<td>500</td>
<td>Internal Server Error</td>
</tr>
</tbody>
</table>
</div>
<p class="mb-4">The API returns errors in this template:</p>
<div class="card-body">
<pre class="p-0">{ 
<span class="hljs-attr">   "errors"</span>: [{ 
<span class="hljs-attr">      "url"</span>: <span class="hljs-string">"missing"</span> 
   }] 
}</pre>
</div>
<hr />
<h2>Common Use Cases</h2>
<h3 id="premiumProxies">Using Premium Proxies</h3>
<p>Zenscrape offers a large pool of premium proxies are the preferred choice when scraping sites that are difficult to scrape. In order to utilize the pool simply set <code>premium=true</code>. In addition, you may specify a location, using the location parameter. We have chosen &#8216;se' (Sweden) for this example. You can see a list of all supported locations <a href="https://app.zenscrape.com/documentation#proxyLocationList" target="_blank" rel="nofollow noopener">here</a>.</p>
<div class="su-tabs su-tabs-style-default su-tabs-mobile-stack" data-active="5" data-scroll-offset="0" data-anchor-in-url="no"><div class="su-tabs-nav"><span class="" data-url="" data-target="blank" tabindex="0" role="button"><strong>Browser</strong></span><span class="" data-url="" data-target="blank" tabindex="0" role="button"><strong>cURL</strong></span><span class="" data-url="" data-target="blank" tabindex="0" role="button"><strong>Python</strong></span><span class="" data-url="" data-target="blank" tabindex="0" role="button"><strong> Node.js</strong></span><span class="" data-url="" data-target="blank" tabindex="0" role="button"><strong>PHP</strong></span></div><div class="su-tabs-panes"><div class="su-tabs-pane su-u-clearfix su-u-trim" data-title="&lt;strong&gt;Browser&lt;/strong&gt;">
<div class="card-body">
<pre class="p-0">https://app.zenscrape.com/api/v1/get?apikey=YOUR-APIKEY&url=https%3A%2F%2Fhttpbin.org%2Fip&premium=true&country=se</pre>
</div>
</div>
<div class="su-tabs-pane su-u-clearfix su-u-trim" data-title="&lt;strong&gt;cURL&lt;/strong&gt;">
<div class="card-body">
<pre class="p-0">curl <span class="hljs-string">"https://app.zenscrape.com/api/v1/get?apikey=YOUR-APIKEY&url=https%3A%2F%2Fhttpbin.org%2Fip&premium=true&country=se"</span></pre>
</div>
</div>
<div class="su-tabs-pane su-u-clearfix su-u-trim" data-title="&lt;strong&gt;Python&lt;/strong&gt;">
<div class="card-body">
<pre class="p-0"><span class="hljs-keyword">import</span> requests headers = { <span class="hljs-string">"apikey"</span>: <span class="hljs-string">"YOUR-APIKEY"</span>} params = ( (<span class="hljs-string">"url"</span>,<span class="hljs-string">"https://httpbin.org/ip"</span>), (<span class="hljs-string">"premium"</span>,<span class="hljs-string">"true"</span>), (<span class="hljs-string">"country"</span>,<span class="hljs-string">"se"</span>), ); response = requests.get(<span class="hljs-string">'https://app.zenscrape.com/api/v1/get'</span>, headers=headers, params=params); print(response.text)</pre>
</div>
</div>
<div class="su-tabs-pane su-u-clearfix su-u-trim" data-title="&lt;strong&gt; Node.js&lt;/strong&gt;">
<div class="card-body">
<pre class="p-0"><span class="hljs-keyword">var</span> request = <span class="hljs-built_in">require</span>(<span class="hljs-string">'request'</span>); <span class="hljs-keyword">var</span> options = { <span class="hljs-attr">url</span>: <span class="hljs-string">'https://app.zenscrape.com/api/v1/get?apikey=YOUR-APIKEY&url=https://httpbin.org/ip&premium=true&country=se'</span> }; <span class="hljs-function"><span class="hljs-keyword">function</span> <span class="hljs-title">callback</span>(<span class="hljs-params">error, response, body</span>) </span>{ <span class="hljs-keyword">if</span> (!error && response.statusCode == <span class="hljs-number">200</span>) { <span class="hljs-built_in">console</span>.log(body); } } request(options, callback);</pre>
</div>
</div>
<div class="su-tabs-pane su-u-clearfix su-u-trim" data-title="&lt;strong&gt;PHP&lt;/strong&gt;">
<div class="card-body">
<pre class="p-0">$ch = curl_init(); curl_setopt($ch, CURLOPT_RETURNTRANSFER, <span class="hljs-literal">true</span>); curl_setopt($ch, CURLOPT_HEADER, <span class="hljs-literal">false</span>); $data = [ <span class="hljs-string">"url"</span> =&gt; <span class="hljs-string">"https://httpbin.org/ip"</span>, <span class="hljs-string">"premium"</span> =&gt; <span class="hljs-string">"true"</span>, <span class="hljs-string">"country"</span> =&gt; <span class="hljs-string">"se"</span>, ]; curl_setopt($ch, CURLOPT_URL, <span class="hljs-string">"https://app.zenscrape.com/api/v1/get?"</span> . http_build_query($data)); curl_setopt($ch, CURLOPT_HTTPHEADER, <span class="hljs-keyword">array</span>( <span class="hljs-string">"Content-Type: application/json"</span>, <span class="hljs-string">"apikey: YOUR-APIKEY"</span>, )); $response = curl_exec($ch); curl_close($ch); $json = json_decode($response); var_dump($json);</pre>
</div>
</div></div></div>
<hr />
<h3>Setting a Custom Header</h3>
<p>Setting a custom header to avoid being blocked is not necessary, since we manage headers on our end. If you still want to set a custom header, you can do so by setting <code>keep_headers=true</code>. In this example we set a custom user-agent.</p>
<div class="su-tabs su-tabs-style-default su-tabs-mobile-stack" data-active="5" data-scroll-offset="0" data-anchor-in-url="no"><div class="su-tabs-nav"><span class="" data-url="" data-target="blank" tabindex="0" role="button"><strong>Browser</strong></span><span class="" data-url="" data-target="blank" tabindex="0" role="button"><strong>cURL</strong></span><span class="" data-url="" data-target="blank" tabindex="0" role="button"><strong>Python</strong></span><span class="" data-url="" data-target="blank" tabindex="0" role="button"><strong> Node.js</strong></span><span class="" data-url="" data-target="blank" tabindex="0" role="button"><strong>PHP</strong></span></div><div class="su-tabs-panes"><div class="su-tabs-pane su-u-clearfix su-u-trim" data-title="&lt;strong&gt;Browser&lt;/strong&gt;">
<div class="card-body">
<pre class="p-0">https://app.zenscrape.com/api/v1/get?apikey=YOUR-APIKEY&url=https%3A%2F%2Fhttpbin.org%2Fheaders&keep_headers=true&country=us</pre>
</div>
</div>
<div class="su-tabs-pane su-u-clearfix su-u-trim" data-title="&lt;strong&gt;cURL&lt;/strong&gt;">
<div class="card-body">
<pre class="p-0">curl -H <span class="hljs-string">"User-Agent: 123"</span> \ <span class="hljs-string">"https://app.zenscrape.com/api/v1/get?apikey=YOUR-APIKEY&url=https%3A%2F%2Fhttpbin.org%2Fheaders&keep_headers=true&country=us"</span></pre>
</div>
</div>
<div class="su-tabs-pane su-u-clearfix su-u-trim" data-title="&lt;strong&gt;Python&lt;/strong&gt;">
<div class="card-body">
<pre class="p-0"><span class="hljs-keyword">import</span> requests headers = { <span class="hljs-string">"apikey"</span>: <span class="hljs-string">"YOUR-APIKEY"</span>, <span class="hljs-string">"User-Agent"</span>: <span class="hljs-string">"123"</span> } params = ( (<span class="hljs-string">"url"</span>,<span class="hljs-string">"https://httpbin.org/headers"</span>), (<span class="hljs-string">"keep_headers"</span>,<span class="hljs-string">"true"</span>), (<span class="hljs-string">"country"</span>,<span class="hljs-string">"us"</span>), ); response = requests.get(<span class="hljs-string">'https://app.zenscrape.com/api/v1/get'</span>, headers=headers, params=params); print(response.text)</pre>
</div>
</div>
<div class="su-tabs-pane su-u-clearfix su-u-trim" data-title="&lt;strong&gt; Node.js&lt;/strong&gt;">
<div class="card-body">
<pre class="p-0"><span class="hljs-keyword">var</span> request = <span class="hljs-built_in">require</span>(<span class="hljs-string">'request'</span>); <span class="hljs-keyword">var</span> headers = { <span class="hljs-string">'User-Agent'</span>: <span class="hljs-string">'123'</span> }; <span class="hljs-keyword">var</span> options = { <span class="hljs-attr">url</span>: <span class="hljs-string">'https://app.zenscrape.com/api/v1/get?apikey=YOUR-APIKEY&url=https://httpbin.org/headers&keep_headers=true&country=us'</span>, <span class="hljs-attr">headers</span>: headers }; <span class="hljs-function"><span class="hljs-keyword">function</span> <span class="hljs-title">callback</span>(<span class="hljs-params">error, response, body</span>) </span>{ <span class="hljs-keyword">if</span> (!error && response.statusCode == <span class="hljs-number">200</span>) { <span class="hljs-built_in">console</span>.log(body); } } request(options, callback);</pre>
</div>
</div>
<div class="su-tabs-pane su-u-clearfix su-u-trim" data-title="&lt;strong&gt;PHP&lt;/strong&gt;">
<div class="card-body">
<pre class="p-0">$ch = curl_init(); curl_setopt($ch, CURLOPT_RETURNTRANSFER, <span class="hljs-literal">true</span>); curl_setopt($ch, CURLOPT_HEADER, <span class="hljs-literal">false</span>); $data = [ <span class="hljs-string">"url"</span> =&gt; <span class="hljs-string">"https://httpbin.org/headers"</span>, <span class="hljs-string">"keep_headers"</span> =&gt; <span class="hljs-string">"true"</span>, <span class="hljs-string">"country"</span> =&gt; <span class="hljs-string">"us"</span>, ]; curl_setopt($ch, CURLOPT_URL, <span class="hljs-string">"https://app.zenscrape.com/api/v1/get?"</span> . http_build_query($data)); curl_setopt($ch, CURLOPT_HTTPHEADER, <span class="hljs-keyword">array</span>( <span class="hljs-string">"Content-Type: application/json"</span>, <span class="hljs-string">"apikey: YOUR-APIKEY"</span>, <span class="hljs-string">"User-Agent: 123"</span> )); $response = curl_exec($ch); curl_close($ch); $json = json_decode($response); var_dump($json);</pre>
</div>
</div></div></div>
<hr />
<h3>Enable JS Rendering</h3>
<p>A lot of websites use front-end frameworks like vue, react etc. In order to extract components that require javascript, please set <code>render=true</code>.</p>
<div class="su-tabs su-tabs-style-default su-tabs-mobile-stack" data-active="5" data-scroll-offset="0" data-anchor-in-url="no"><div class="su-tabs-nav"><span class="" data-url="" data-target="blank" tabindex="0" role="button"><strong>Browser</strong></span><span class="" data-url="" data-target="blank" tabindex="0" role="button"><strong>cURL</strong></span><span class="" data-url="" data-target="blank" tabindex="0" role="button"><strong>Python</strong></span><span class="" data-url="" data-target="blank" tabindex="0" role="button"><strong> Node.js</strong></span><span class="" data-url="" data-target="blank" tabindex="0" role="button"><strong>PHP</strong></span></div><div class="su-tabs-panes"><div class="su-tabs-pane su-u-clearfix su-u-trim" data-title="&lt;strong&gt;Browser&lt;/strong&gt;">
<div class="card-body">
<pre class="p-0">https://app.zenscrape.com/api/v1/get?apikey=YOUR-APIKEY&url=https%3A%2F%2Fhttpbin.org%2Fheaders&keep_headers=true&country=us</pre>
</div>
</div>
<div class="su-tabs-pane su-u-clearfix su-u-trim" data-title="&lt;strong&gt;cURL&lt;/strong&gt;">
<div class="card-body">
<pre class="p-0">curl -H <span class="hljs-string">"User-Agent: 123"</span> \ <span class="hljs-string">"https://app.zenscrape.com/api/v1/get?apikey=YOUR-APIKEY&url=https%3A%2F%2Fhttpbin.org%2Fheaders&keep_headers=true&country=us"</span></pre>
</div>
</div>
<div class="su-tabs-pane su-u-clearfix su-u-trim" data-title="&lt;strong&gt;Python&lt;/strong&gt;">
<div class="card-body">
<pre class="p-0"><span class="hljs-keyword">import</span> requests headers = { <span class="hljs-string">"apikey"</span>: <span class="hljs-string">"YOUR-APIKEY"</span>, <span class="hljs-string">"User-Agent"</span>: <span class="hljs-string">"123"</span> } params = ( (<span class="hljs-string">"url"</span>,<span class="hljs-string">"https://httpbin.org/headers"</span>), (<span class="hljs-string">"keep_headers"</span>,<span class="hljs-string">"true"</span>), (<span class="hljs-string">"country"</span>,<span class="hljs-string">"us"</span>), ); response = requests.get(<span class="hljs-string">'https://app.zenscrape.com/api/v1/get'</span>, headers=headers, params=params); print(response.text)</pre>
</div>
</div>
<div class="su-tabs-pane su-u-clearfix su-u-trim" data-title="&lt;strong&gt; Node.js&lt;/strong&gt;">
<div class="card-body">
<pre class="p-0"><span class="hljs-keyword">var</span> request = <span class="hljs-built_in">require</span>(<span class="hljs-string">'request'</span>); <span class="hljs-keyword">var</span> headers = { <span class="hljs-string">'User-Agent'</span>: <span class="hljs-string">'123'</span> }; <span class="hljs-keyword">var</span> options = { <span class="hljs-attr">url</span>: <span class="hljs-string">'https://app.zenscrape.com/api/v1/get?apikey=YOUR-APIKEY&url=https://httpbin.org/headers&keep_headers=true&country=us'</span>, <span class="hljs-attr">headers</span>: headers }; <span class="hljs-function"><span class="hljs-keyword">function</span> <span class="hljs-title">callback</span>(<span class="hljs-params">error, response, body</span>) </span>{ <span class="hljs-keyword">if</span> (!error && response.statusCode == <span class="hljs-number">200</span>) { <span class="hljs-built_in">console</span>.log(body); } } request(options, callback);</pre>
</div>
</div>
<div class="su-tabs-pane su-u-clearfix su-u-trim" data-title="&lt;strong&gt;PHP&lt;/strong&gt;">
<div class="card-body">
<pre class="p-0">$ch = curl_init(); curl_setopt($ch, CURLOPT_RETURNTRANSFER, <span class="hljs-literal">true</span>); curl_setopt($ch, CURLOPT_HEADER, <span class="hljs-literal">false</span>); $data = [ <span class="hljs-string">"url"</span> =&gt; <span class="hljs-string">"https://httpbin.org/headers"</span>, <span class="hljs-string">"keep_headers"</span> =&gt; <span class="hljs-string">"true"</span>, <span class="hljs-string">"country"</span> =&gt; <span class="hljs-string">"us"</span>, ]; curl_setopt($ch, CURLOPT_URL, <span class="hljs-string">"https://app.zenscrape.com/api/v1/get?"</span> . http_build_query($data)); curl_setopt($ch, CURLOPT_HTTPHEADER, <span class="hljs-keyword">array</span>( <span class="hljs-string">"Content-Type: application/json"</span>, <span class="hljs-string">"apikey: YOUR-APIKEY"</span>, <span class="hljs-string">"User-Agent: 123"</span> )); $response = curl_exec($ch); curl_close($ch); $json = json_decode($response); var_dump($json);</pre>
</div>
</div></div></div>
<hr />
<h3>Getting around Cloudflare DDoS Protection</h3>
<div id="cloudFlare" class="hs-docs-content-divider">
<div class="row justify-content-center mb-3">
<div class="col-md-12">
<p>Quite a few websites that are offering interesting content have imposed cloudflare DDoS protection. Zenscrape automatically detects when cloudlare DDoS protection appears and returns the page content once the protection layer has disappeared. Hence, cloudflare DDoS protection is handled automatically and does not require any action from your end.</p>
</div>
</div>
</div>
<div id="blockResources" class="hs-docs-content-divider mb-3">
<div class="row justify-content-center mb-3">
<div class="col-md-12">
<hr />
<h3>Blocking Particular Resources</h3>
<p>In order to increase speed or to supress a certain page behaviour, it can be useful to block certain resources from loading. In the following example we have decided to block <code>stylesheets</code>, <code>image</code> and other <code>media</code> from loading. Keep in mind that <code>block_resources</code> only works in combination with <code>render=true</code>.</p>
<div class="su-tabs su-tabs-style-default su-tabs-mobile-stack" data-active="5" data-scroll-offset="0" data-anchor-in-url="no"><div class="su-tabs-nav"><span class="" data-url="" data-target="blank" tabindex="0" role="button"><strong>Browser</strong></span><span class="" data-url="" data-target="blank" tabindex="0" role="button"><strong>cURL</strong></span><span class="" data-url="" data-target="blank" tabindex="0" role="button"><strong>Python</strong></span><span class="" data-url="" data-target="blank" tabindex="0" role="button"><strong> Node.js</strong></span><span class="" data-url="" data-target="blank" tabindex="0" role="button"><strong>PHP</strong></span></div><div class="su-tabs-panes"><div class="su-tabs-pane su-u-clearfix su-u-trim" data-title="&lt;strong&gt;Browser&lt;/strong&gt;">
<div class="card-body">
<pre class="p-0">https://app.zenscrape.com/api/v1/get?apikey=YOUR-APIKEY&url=https%3A%2F%2Fquotes.toscrape.com%2Fjs&render=true&block_resources=stylesheet%2Cimage%2Cmedia</pre>
</div>
</div>
<div class="su-tabs-pane su-u-clearfix su-u-trim" data-title="&lt;strong&gt;cURL&lt;/strong&gt;">
<div class="card-body">
<pre class="p-0">curl <span class="hljs-string">"https://app.zenscrape.com/api/v1/get?apikey=YOUR-APIKEY&url=https%3A%2F%2Fquotes.toscrape.com%2Fjs&render=true&block_resources=stylesheet%2Cimage%2Cmedia"</span></pre>
</div>
</div>
<div class="su-tabs-pane su-u-clearfix su-u-trim" data-title="&lt;strong&gt;Python&lt;/strong&gt;">
<div class="card-body">
<pre class="p-0"><span class="hljs-keyword">import</span> requests headers = { <span class="hljs-string">"apikey"</span>: <span class="hljs-string">"YOUR-APIKEY"</span>} params = ( (<span class="hljs-string">"url"</span>,<span class="hljs-string">"https://quotes.toscrape.com/js"</span>), (<span class="hljs-string">"render"</span>,<span class="hljs-string">"true"</span>), (<span class="hljs-string">"block_resources"</span>,<span class="hljs-string">"stylesheet,image,media"</span>), ); response = requests.get(<span class="hljs-string">'https://app.zenscrape.com/api/v1/get'</span>, headers=headers, params=params); print(response.text)</pre>
</div>
</div>
<div class="su-tabs-pane su-u-clearfix su-u-trim" data-title="&lt;strong&gt; Node.js&lt;/strong&gt;">
<div class="card-body">
<pre class="p-0"><span class="hljs-keyword">var</span> request = <span class="hljs-built_in">require</span>(<span class="hljs-string">'request'</span>); <span class="hljs-keyword">var</span> options = { <span class="hljs-attr">url</span>: <span class="hljs-string">'https://app.zenscrape.com/api/v1/get?apikey=YOUR-APIKEY&url=https://quotes.toscrape.com/js&render=true&block_resources=stylesheet,image,media'</span> }; <span class="hljs-function"><span class="hljs-keyword">function</span> <span class="hljs-title">callback</span>(<span class="hljs-params">error, response, body</span>) </span>{ <span class="hljs-keyword">if</span> (!error && response.statusCode == <span class="hljs-number">200</span>) { <span class="hljs-built_in">console</span>.log(body); } } request(options, callback);</pre>
</div>
</div>
<div class="su-tabs-pane su-u-clearfix su-u-trim" data-title="&lt;strong&gt;PHP&lt;/strong&gt;">
<div class="card-body">
<pre class="p-0">$ch = curl_init(); curl_setopt($ch, CURLOPT_RETURNTRANSFER, <span class="hljs-literal">true</span>); curl_setopt($ch, CURLOPT_HEADER, <span class="hljs-literal">false</span>); $data = [ <span class="hljs-string">"url"</span> =&gt; <span class="hljs-string">"https://quotes.toscrape.com/js"</span>, <span class="hljs-string">"render"</span> =&gt; <span class="hljs-string">"true"</span>, <span class="hljs-string">"block_resources"</span> =&gt; <span class="hljs-string">"stylesheet,image,media"</span>, ]; curl_setopt($ch, CURLOPT_URL, <span class="hljs-string">"https://app.zenscrape.com/api/v1/get?"</span> . http_build_query($data)); curl_setopt($ch, CURLOPT_HTTPHEADER, <span class="hljs-keyword">array</span>( <span class="hljs-string">"Content-Type: application/json"</span>, <span class="hljs-string">"apikey: YOUR-APIKEY"</span>, )); $response = curl_exec($ch); curl_close($ch); $json = json_decode($response); var_dump($json);</pre>
</div>
</div></div></div>
<hr />
<h3>Setting a Cookie</h3>
<p>Cookies can also be passed to the request using <code>keep_headers=true</code>. The header then simply needs to contain the cookie name and value.</p>
<div class="su-tabs su-tabs-style-default su-tabs-mobile-stack" data-active="5" data-scroll-offset="0" data-anchor-in-url="no"><div class="su-tabs-nav"><span class="" data-url="" data-target="blank" tabindex="0" role="button"><strong>Browser</strong></span><span class="" data-url="" data-target="blank" tabindex="0" role="button"><strong>cURL</strong></span><span class="" data-url="" data-target="blank" tabindex="0" role="button"><strong>Python</strong></span><span class="" data-url="" data-target="blank" tabindex="0" role="button"><strong> Node.js</strong></span><span class="" data-url="" data-target="blank" tabindex="0" role="button"><strong>PHP</strong></span></div><div class="su-tabs-panes"><div class="su-tabs-pane su-u-clearfix su-u-trim" data-title="&lt;strong&gt;Browser&lt;/strong&gt;">
<div class="card-body">
<pre class="p-0">https://app.zenscrape.com/api/v1/get?apikey=YOUR-APIKEY&url=https%3A%2F%2Fquotes.toscrape.com%2Fcookies&keep_headers=true</pre>
</div>
</div>
<div class="su-tabs-pane su-u-clearfix su-u-trim" data-title="&lt;strong&gt;cURL&lt;/strong&gt;">
<div class="card-body">
<pre class="p-0">curl -H <span class="hljs-string">"Cookie: SESSIONID=27382738"</span> \ <span class="hljs-string">"https://app.zenscrape.com/api/v1/get?apikey=YOUR-APIKEY&url=https%3A%2F%2Fquotes.toscrape.com%2Fcookies&keep_headers=true"</span></pre>
</div>
</div>
<div class="su-tabs-pane su-u-clearfix su-u-trim" data-title="&lt;strong&gt;Python&lt;/strong&gt;">
<div class="card-body">
<pre class="p-0"><span class="hljs-keyword">import</span> requests headers = { <span class="hljs-string">"apikey"</span>: <span class="hljs-string">"YOUR-APIKEY"</span>, <span class="hljs-string">"Cookie"</span>: <span class="hljs-string">"SESSIONID=27382738"</span> } params = ( (<span class="hljs-string">"url"</span>,<span class="hljs-string">"https://quotes.toscrape.com/cookies"</span>), (<span class="hljs-string">"keep_headers"</span>,<span class="hljs-string">"true"</span>), ); response = requests.get(<span class="hljs-string">'https://app.zenscrape.com/api/v1/get'</span>, headers=headers, params=params); print(response.text)</pre>
</div>
</div>
<div class="su-tabs-pane su-u-clearfix su-u-trim" data-title="&lt;strong&gt; Node.js&lt;/strong&gt;">
<div class="card-body">
<pre class="p-0"><span class="hljs-keyword">var</span> request = <span class="hljs-built_in">require</span>(<span class="hljs-string">'request'</span>);, <span class="hljs-keyword">var</span> headers = { <span class="hljs-string">'User-Agent'</span>: <span class="hljs-string">'123'</span>, <span class="hljs-string">'Cookie'</span>: <span class="hljs-string">'SESSIONID=27382738'</span> }; <span class="hljs-keyword">var</span> options = { <span class="hljs-attr">url</span>: <span class="hljs-string">'https://app.zenscrape.com/api/v1/get?apikey=YOUR-APIKEY&url=https://quotes.toscrape.com/cookies&keep_headers=true'</span> }; <span class="hljs-function"><span class="hljs-keyword">function</span> <span class="hljs-title">callback</span>(<span class="hljs-params">error, response, body</span>) </span>{ <span class="hljs-keyword">if</span> (!error && response.statusCode == <span class="hljs-number">200</span>) { <span class="hljs-built_in">console</span>.log(body); } } request(options, callback);</pre>
</div>
</div>
<div class="su-tabs-pane su-u-clearfix su-u-trim" data-title="&lt;strong&gt;PHP&lt;/strong&gt;">
<div class="card-body">
<pre class="p-0">$ch = curl_init(); curl_setopt($ch, CURLOPT_RETURNTRANSFER, <span class="hljs-literal">true</span>); curl_setopt($ch, CURLOPT_HEADER, <span class="hljs-literal">false</span>); $data = [ <span class="hljs-string">"url"</span> =&gt; <span class="hljs-string">"https://quotes.toscrape.com/cookies"</span>, <span class="hljs-string">"keep_headers"</span> =&gt; <span class="hljs-string">"true"</span>, ]; curl_setopt($ch, CURLOPT_URL, <span class="hljs-string">"https://app.zenscrape.com/api/v1/get?"</span> . http_build_query($data)); curl_setopt($ch, CURLOPT_HTTPHEADER, <span class="hljs-keyword">array</span>( <span class="hljs-string">"Content-Type: application/json"</span>, <span class="hljs-string">"apikey: YOUR-APIKEY"</span>,, <span class="hljs-string">"Cookie: SESSIONID=27382738"</span> )); $response = curl_exec($ch); curl_close($ch); $json = json_decode($response); var_dump($json);</pre>
</div>
</div></div></div>
<hr />
<h4 id="references" class="ftwp-heading">References,</h4>
<ul>
<li><a href="https://app.zenscrape.com/documentation#webScrapingApi" target="_blank" rel="nofollow noopener">https://app.zenscrape.com/documentation#webScrapingApi </a></li>
</ul>
<hr />
<blockquote><p><strong>Disclaimer</strong>: This part of the content is mainly from the merchant. If the merchant does not want it to be displayed on my website, please <a href="https://www.proxysp.com/contact-us/">contact us</a> to delete your content.</p></blockquote>
]]></content:encoded>
					
					<wfw:commentRss>https://proxysp.com/how-to-use-zenscrape-api/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">8684</post-id>	</item>
		<item>
		<title>How to Use Oxylabs Scraper API [Part 2]: Oxylabs Web Scraper API</title>
		<link>https://proxysp.com/oxylabs-web-scraper-api/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=oxylabs-web-scraper-api</link>
					<comments>https://proxysp.com/oxylabs-web-scraper-api/#respond</comments>
		
		<dc:creator><![CDATA[proxysp]]></dc:creator>
		<pubDate>Thu, 01 Jan 1970 00:00:00 +0000</pubDate>
				<category><![CDATA[How to Use OxyLabs Proxy (OxyLabs User Manual Navigation)]]></category>
		<guid isPermaLink="false">https://www.proxysp.com/?p=9062</guid>

					<description><![CDATA[Do you know how to use Oxylabs Web Scraper API? This is the most comprehensive introduction from OxyLabs official. Quick Start Web Scraper API is built &#8230;<p class="read-more"> <a class="ast-button" href="https://proxysp.com/oxylabs-web-scraper-api/"> <span class="screen-reader-text">How to Use Oxylabs Scraper API [Part 2]: Oxylabs Web Scraper API</span> Read More &#187;</a></p>]]></description>
										<content:encoded><![CDATA[<blockquote><p>Do you know how to use Oxylabs Web Scraper API? This is the most comprehensive introduction from OxyLabs official.</p></blockquote>
<h2><a href="https://www.proxysp.com/redirect/oxylabs" target="_blank" rel="nofollow noopener"><img loading="lazy" decoding="async" class="aligncenter size-full wp-image-9217" src="https://www.proxysp.com/wp-content/uploads/2021/11/Oxylabs-Web-Scraper-API-pricing.jpg" alt="Oxylabs Web Scraper API pricing" width="898" height="500" srcset="https://proxysp.com/wp-content/uploads/2021/11/Oxylabs-Web-Scraper-API-pricing.jpg 898w, https://proxysp.com/wp-content/uploads/2021/11/Oxylabs-Web-Scraper-API-pricing-300x167.jpg 300w, https://proxysp.com/wp-content/uploads/2021/11/Oxylabs-Web-Scraper-API-pricing-768x428.jpg 768w" sizes="(max-width: 898px) 100vw, 898px" /></a></h2>
<h2 id="quick-start">Quick Start</h2>
<p>Web Scraper API is built to help you in your heavy-duty data retrieval operations. You can use Web Scraper API to access various public pages. It enables effortless web data extraction without any delays or errors.</p>
<p>Web Scraper API uses <a class="custom_link" href="https://en.wikipedia.org/wiki/Basic_access_authentication" target="_blank" rel="nofollow noopener">basic HTTP authentication</a> that requires sending username and password.</p>
<p>This is by far the fastest way to start using Web Scraper API. You will make a request to <code>https://ip.oxylabs.io</code> using <a class="custom_link" href="#realtime" target="_blank" rel="noopener">Realtime</a> integration method. Don't forget to replace <code>USERNAME</code> and <code>PASSWORD</code> with your proxy user credentials.</p>
<pre>curl --user "USERNAME:PASSWORD" 'https://realtime.oxylabs.io/v1/queries' -H "Content-Type: application/json" -d '{"source": "universal", "url": "https://ip.oxylabs.io"}'
</pre>
<p>If you have any questions not covered by this documentation, please contact your account manager or our support staff at <a class="custom_link" href="mailto:support@oxylabs.io">support@oxylabs.io</a>.</p>
<hr />
<h2 id="integration-methods">Integration Methods</h2>
<p>Web Scraper API supports three integration methods which have their unique benefits:</p>
<ul>
<li><a href="#push-pull">Push-Pull</a>. Using this method it is now required to mainain an active connection with our endpoint to retrieve the data. Upon making a request, our system is able to automatically ping users server when the job is done (see  <a href="#Callback">Callback</a>). This method saves computing resources and can be scaled easily.</li>
<li><a class="custom_link" href="#realtime">Realtime</a>. The method requires user to maintain an active connection with our endpoint in order to get the results successfully when the job is completed. This method can be implemented into one service while Push-Pull method is a two step process.</li>
<li><a class="custom_link" href="#superapi">SuperAPI</a>. This method is very similar to Realtime but instead posting data to our endpoint, user can use HTML Cralwer as a proxy. To retrieve the data, user must set up a proxy endpoint and make GET request to a desired URL. Additional parameters must be added using headers.</li>
</ul>
<p>Our recommended data extraction method is <a class="custom_link" href="#push-pull">Push-Pull</a>.</p>
<hr />
<h3 id="push-pull">Push-Pull</h3>
<p>This is the most simple yet the most reliable and recommended data delivery method. In Push-Pull scenario you send us a query, we return you job <code>id</code>, and once the job is done you can use that <code>id</code> to retrieve content from <code>/results</code> endpoint. You can check job completion status yourself, or you can set up a simple listener that is able to accept POST queries. This way, we will send you a callback message once the job is ready to be retrieved. In this particular example the results will be automatically <a class="custom_link" href="#upload-to-storage">uploaded to your S3 bucket</a> named <code>YOUR_BUCKET_NAME</code>.</p>
<hr />
<h4 id="single-query">Single Query</h4>
<p>The following endpoint will handle single queries for one keyword or URL. The API will return a confirmation message containing job information, including job <code>id</code>. You can check job completion status using that <code>id</code>, or you can ask us to ping your callback endpoint once the scraping task is finished by adding <code>callback_url</code> in the query.</p>
<div class="endpoint">
<pre><strong>POST https://data.oxylabs.io/v1/queries</strong></pre>
</div>
<p>You need to post query parameters as data in the JSON body.</p>
<div class="su-tabs su-tabs-style-default su-tabs-mobile-stack" data-active="4" data-scroll-offset="0" data-anchor-in-url="no"><div class="su-tabs-nav"><span class="" data-url="" data-target="blank" tabindex="0" role="button"><strong>cURL</strong></span><span class="" data-url="" data-target="blank" tabindex="0" role="button"><strong>Python</strong></span><span class="" data-url="" data-target="blank" tabindex="0" role="button"><strong>PHP</strong></span><span class="" data-url="" data-target="blank" tabindex="0" role="button"><strong>HTTP</strong></span></div><div class="su-tabs-panes"><div class="su-tabs-pane su-u-clearfix su-u-trim" data-title="&lt;strong&gt;cURL&lt;/strong&gt;">
<pre class="highlight shell tab-shell"><code>curl --user user:pass1<span class="se">\</span>
<span class="s1">'https://data.oxylabs.io/v1/queries'</span> <span class="se">\</span>
-H <span class="s2">"Content-Type: application/json"</span> <span class="se">\</span>
-d <span class="s1">'{"source": "universal", "url": "https://stackoverflow.com/questions/tagged/python", "callback_url": "https://your.callback.url", "storage_type": "s3", "storage_url": "YOUR_BUCKET_NAME"}'</span></code></pre>
</div>
<div class="su-tabs-pane su-u-clearfix su-u-trim" data-title="&lt;strong&gt;Python&lt;/strong&gt;">
<pre class="highlight python tab-python"><code><span class="kn">import</span> <span class="nn">requests</span>
<span class="kn">from</span> <span class="nn">pprint</span> <span class="kn">import</span> <span class="n">pprint</span>


<span class="c"># Structure payload.</span>
<span class="n">payload</span> <span class="o">=</span> <span class="p">{</span>
    <span class="s">'source'</span><span class="p">:</span> <span class="s">'universal'</span><span class="p">,</span>
    <span class="s">'url'</span><span class="p">:</span> <span class="s">'https://stackoverflow.com/questions/tagged/python'</span><span class="p">,</span>
    <span class="s">'callback_url'</span><span class="p">:</span> <span class="s">'https://your.callback.url'</span><span class="p">,</span>
    <span class="s">'storage_type'</span><span class="p">:</span> <span class="s">'s3'</span><span class="p">,</span>
    <span class="s">'storage_url'</span><span class="p">:</span> <span class="s">'YOUR_BUCKET_NAME'</span>
<span class="p">}</span>

<span class="c"># Get response.</span>
<span class="n">response</span> <span class="o">=</span> <span class="n">requests</span><span class="o">.</span><span class="n">request</span><span class="p">(</span>
    <span class="s">'POST'</span><span class="p">,</span>
    <span class="s">'https://data.oxylabs.io/v1/queries'</span><span class="p">,</span>
    <span class="n">auth</span><span class="o">=</span><span class="p">(</span><span class="s">'user'</span><span class="p">,</span> <span class="s">'pass1'</span><span class="p">),</span>
    <span class="n">json</span><span class="o">=</span><span class="n">payload</span><span class="p">,</span>
<span class="p">)</span>

<span class="c"># Print prettified response to stdout.</span>
<span class="n">pprint</span><span class="p">(</span><span class="n">response</span><span class="o">.</span><span class="n">json</span><span class="p">())</span></code></pre>
</div>
<div class="su-tabs-pane su-u-clearfix su-u-trim" data-title="&lt;strong&gt;PHP&lt;/strong&gt;">
<pre class="highlight php tab-php"><code><span class="cp">&lt;?php</span>

<span class="nv">$params</span> <span class="o">=</span> <span class="k">array</span><span class="p">(</span>
    <span class="s1">'source'</span> <span class="o">=&gt;</span> <span class="s1">'universal'</span><span class="p">,</span>
    <span class="s1">'url'</span> <span class="o">=&gt;</span> <span class="s1">'https://stackoverflow.com/questions/tagged/python'</span><span class="p">,</span>
    <span class="s1">'callback_url'</span> <span class="o">=&gt;</span> <span class="s1">'https://your.callback.url'</span><span class="p">,</span>
    <span class="s1">'storage_type'</span> <span class="o">=&gt;</span> <span class="s1">'s3'</span><span class="p">,</span>
    <span class="s1">'storage_url'</span> <span class="o">=&gt;</span> <span class="s1">'YOUR_BUCKET_NAME'</span>
<span class="p">);</span>

<span class="nv">$ch</span> <span class="o">=</span> <span class="nb">curl_init</span><span class="p">();</span>

<span class="nb">curl_setopt</span><span class="p">(</span><span class="nv">$ch</span><span class="p">,</span> <span class="nx">CURLOPT_URL</span><span class="p">,</span> <span class="s2">"https://data.oxylabs.io/v1/queries"</span><span class="p">);</span>
<span class="nb">curl_setopt</span><span class="p">(</span><span class="nv">$ch</span><span class="p">,</span> <span class="nx">CURLOPT_RETURNTRANSFER</span><span class="p">,</span> <span class="mi">1</span><span class="p">);</span>
<span class="nb">curl_setopt</span><span class="p">(</span><span class="nv">$ch</span><span class="p">,</span> <span class="nx">CURLOPT_POSTFIELDS</span><span class="p">,</span> <span class="nb">json_encode</span><span class="p">(</span><span class="nv">$params</span><span class="p">));</span>
<span class="nb">curl_setopt</span><span class="p">(</span><span class="nv">$ch</span><span class="p">,</span> <span class="nx">CURLOPT_POST</span><span class="p">,</span> <span class="mi">1</span><span class="p">);</span>
<span class="nb">curl_setopt</span><span class="p">(</span><span class="nv">$ch</span><span class="p">,</span> <span class="nx">CURLOPT_USERPWD</span><span class="p">,</span> <span class="s2">"user"</span> <span class="o">.</span> <span class="s2">":"</span> <span class="o">.</span> <span class="s2">"pass1"</span><span class="p">);</span>

<span class="nv">$headers</span> <span class="o">=</span> <span class="k">array</span><span class="p">();</span>
<span class="nv">$headers</span><span class="p">[]</span> <span class="o">=</span> <span class="s2">"Content-Type: application/json"</span><span class="p">;</span>
<span class="nb">curl_setopt</span><span class="p">(</span><span class="nv">$ch</span><span class="p">,</span> <span class="nx">CURLOPT_HTTPHEADER</span><span class="p">,</span> <span class="nv">$headers</span><span class="p">);</span>

<span class="nv">$result</span> <span class="o">=</span> <span class="nb">curl_exec</span><span class="p">(</span><span class="nv">$ch</span><span class="p">);</span>
<span class="k">echo</span> <span class="nv">$result</span><span class="p">;</span>

<span class="k">if</span> <span class="p">(</span><span class="nb">curl_errno</span><span class="p">(</span><span class="nv">$ch</span><span class="p">))</span> <span class="p">{</span>
    <span class="k">echo</span> <span class="s1">'Error:'</span> <span class="o">.</span> <span class="nb">curl_error</span><span class="p">(</span><span class="nv">$ch</span><span class="p">);</span>
<span class="p">}</span>
<span class="nb">curl_close</span> <span class="p">(</span><span class="nv">$ch</span><span class="p">);</span>
<span class="cp">?&gt;</span></code></pre>
</div>
<div class="su-tabs-pane su-u-clearfix su-u-trim" data-title="&lt;strong&gt;HTTP&lt;/strong&gt;">
<pre class="highlight http tab-http"><code><span class="err">HTTP method is currently not supported</span></code></pre>
</div></div></div>
<p>The API will respond with query information in JSON format, by printing it in the response body, similar to this:</p>
<pre class="highlight json tab-json"><code><span class="p">{</span>
  <span class="s2">"callback_url"</span><span class="p">:</span> <span class="s2">"https://your.callback.url"</span><span class="p">,</span>
  <span class="s2">"client_id"</span><span class="p">:</span> <span class="mi">5</span><span class="p">,</span>
  <span class="s2">"created_at"</span><span class="p">:</span> <span class="s2">"2019-10-01 00:00:01"</span><span class="p">,</span>
  <span class="s2">"domain"</span><span class="p">:</span> <span class="s2">"com"</span><span class="p">,</span>
  <span class="s2">"geo_location"</span><span class="p">:</span> <span class="kc">null</span><span class="p">,</span>
  <span class="s2">"id"</span><span class="p">:</span> <span class="s2">"12345678900987654321"</span><span class="p">,</span>
  <span class="s2">"limit"</span><span class="p">:</span> <span class="mi">10</span><span class="p">,</span>
  <span class="s2">"locale"</span><span class="p">:</span> <span class="kc">null</span><span class="p">,</span>
  <span class="s2">"pages"</span><span class="p">:</span> <span class="mi">1</span><span class="p">,</span>
  <span class="s2">"parse"</span><span class="p">:</span> <span class="kc">false</span><span class="p">,</span>
  <span class="s2">"render"</span><span class="p">:</span> <span class="kc">null</span><span class="p">,</span>
  <span class="s2">"url"</span><span class="p">:</span> <span class="s2">"https://stackoverflow.com/questions/tagged/python"</span><span class="p">,</span>
  <span class="s2">"source"</span><span class="p">:</span> <span class="s2">"universal"</span><span class="p">,</span>
  <span class="s2">"start_page"</span><span class="p">:</span> <span class="mi">1</span><span class="p">,</span>
  <span class="s2">"status"</span><span class="p">:</span> <span class="s2">"pending"</span><span class="p">,</span>
  <span class="s2">"storage_type"</span><span class="p">:</span> <span class="s2">"s3"</span><span class="p">,</span>
  <span class="s2">"storage_url"</span><span class="p">:</span> <span class="s2">"YOUR_BUCKET_NAME/12345678900987654321.json"</span><span class="p">,</span>
  <span class="s2">"subdomain"</span><span class="p">:</span> <span class="s2">"www"</span><span class="p">,</span>
  <span class="s2">"updated_at"</span><span class="p">:</span> <span class="s2">"2019-10-01 00:00:01"</span><span class="p">,</span>
  <span class="s2">"user_agent_type"</span><span class="p">:</span> <span class="s2">"desktop"</span><span class="p">,</span>
  <span class="s2">"_links"</span><span class="p">:</span> <span class="p">[</span>
    <span class="p">{</span>
      <span class="s2">"rel"</span><span class="p">:</span> <span class="s2">"self"</span><span class="p">,</span>
      <span class="s2">"href"</span><span class="p">:</span> <span class="s2">"http://data.oxylabs.io/v1/queries/12345678900987654321"</span><span class="p">,</span>
      <span class="s2">"method"</span><span class="p">:</span> <span class="s2">"GET"</span>
    <span class="p">},</span>
    <span class="p">{</span>
      <span class="s2">"rel"</span><span class="p">:</span> <span class="s2">"results"</span><span class="p">,</span>
      <span class="s2">"href"</span><span class="p">:</span> <span class="s2">"http://data.oxylabs.io/v1/queries/12345678900987654321/results"</span><span class="p">,</span>
      <span class="s2">"method"</span><span class="p">:</span> <span class="s2">"GET"</span>
    <span class="p">}</span>
  <span class="p">]</span>
<span class="p">}</span></code></pre>
<hr />
<h4 id="check-job-status">Check Job Status</h4>
<p>If your query had a <code>callback_url</code>, we will send you a message containing a link to the content once the scraping task is done. However, if there was no <code>callback_url</code> in the query, you will need to check the job status yourself. For that, you need to use the URL in <code>href</code> under <code>rel</code>:<code>self</code> in the response message you received after submitting your query to our API. It should look similar to this: <code>http://data.oxylabs.io/v1/queries/12345678900987654321</code>.</p>
<div class="endpoint">
<pre><strong>GET https://data.oxylabs.io/v1/queries/{id}</strong></pre>
</div>
<p>Querying this link will return the job information, including its <code>status</code>. There are three possible <code>status</code> values:</p>
<div class="su-table su-table-responsive">
<table>
<thead>
<tr>
<td><code>pending</code></td>
<td>The job is still in the queue and has not been completed.</td>
</tr>
<tr>
<td><code>done</code></td>
<td>The job is completed, you may retrieve the result by querying the URL in <code>href</code> under <code>rel</code>:<code>results</code> : <code>http://data.oxylabs.io/v1/queries/12345678900987654321/results</code></td>
</tr>
<tr>
<td><code>faulted</code></td>
<td>There was an issue with the job, and we could not complete it, most likely due to a server error on the target site's side.</td>
</tr>
</thead>
</table>
</div>
<div class="su-tabs su-tabs-style-default su-tabs-mobile-stack" data-active="4" data-scroll-offset="0" data-anchor-in-url="no"><div class="su-tabs-nav"><span class="" data-url="" data-target="blank" tabindex="0" role="button"><strong>cURL</strong></span><span class="" data-url="" data-target="blank" tabindex="0" role="button"><strong>Python</strong></span><span class="" data-url="" data-target="blank" tabindex="0" role="button"><strong>PHP</strong></span><span class="" data-url="" data-target="blank" tabindex="0" role="button"><strong>HTTP</strong></span></div><div class="su-tabs-panes"><div class="su-tabs-pane su-u-clearfix su-u-trim" data-title="&lt;strong&gt;cURL&lt;/strong&gt;">
<pre class="highlight shell tab-shell"><code>curl --user user:pass1 <span class="s1">'https://data.oxylabs.io/v1/queries/batch'</span> -H <span class="s1">'Content-Type: application/json'</span> <span class="se">\</span>
 -d <span class="s1">'@keywords.json'</span></code></pre>
</div>
<div class="su-tabs-pane su-u-clearfix su-u-trim" data-title="&lt;strong&gt;Python&lt;/strong&gt;">
<pre class="highlight python tab-python"><code><span class="kn">import</span> <span class="nn">requests</span>
<span class="kn">import</span> <span class="nn">json</span>
<span class="kn">from</span> <span class="nn">pprint</span> <span class="kn">import</span> <span class="n">pprint</span>


<span class="c"># Get payload from file.</span>
<span class="k">with</span> <span class="nb">open</span><span class="p">(</span><span class="s">'keywords.json'</span><span class="p">,</span> <span class="s">'r'</span><span class="p">)</span> <span class="k">as</span> <span class="n">f</span><span class="p">:</span>
    <span class="n">payload</span> <span class="o">=</span> <span class="n">json</span><span class="o">.</span><span class="n">loads</span><span class="p">(</span><span class="n">f</span><span class="o">.</span><span class="n">read</span><span class="p">())</span>

<span class="n">response</span> <span class="o">=</span> <span class="n">requests</span><span class="o">.</span><span class="n">request</span><span class="p">(</span>
    <span class="s">'POST'</span><span class="p">,</span>
    <span class="s">'https://data.oxylabs.io/v1/queries/batch'</span><span class="p">,</span>
    <span class="n">auth</span><span class="o">=</span><span class="p">(</span><span class="s">'user'</span><span class="p">,</span> <span class="s">'pass1'</span><span class="p">),</span>
    <span class="n">json</span><span class="o">=</span><span class="n">payload</span><span class="p">,</span>
<span class="p">)</span>

<span class="c"># Print prettified response.</span>
<span class="n">pprint</span><span class="p">(</span><span class="n">response</span><span class="o">.</span><span class="n">json</span><span class="p">())</span></code></pre>
</div>
<div class="su-tabs-pane su-u-clearfix su-u-trim" data-title="&lt;strong&gt;PHP&lt;/strong&gt;">
<pre class="highlight php tab-php"><code><span class="cp">&lt;?php</span>

<span class="nv">$paramsFile</span> <span class="o">=</span> <span class="nb">file_get_contents</span><span class="p">(</span><span class="nb">realpath</span><span class="p">(</span><span class="s2">"keywords.json"</span><span class="p">));</span>
<span class="nv">$ch</span> <span class="o">=</span> <span class="nb">curl_init</span><span class="p">();</span>

<span class="nb">curl_setopt</span><span class="p">(</span><span class="nv">$ch</span><span class="p">,</span> <span class="nx">CURLOPT_URL</span><span class="p">,</span> <span class="s2">"https://data.oxylabs.io/v1/queries/batch"</span><span class="p">);</span>
<span class="nb">curl_setopt</span><span class="p">(</span><span class="nv">$ch</span><span class="p">,</span> <span class="nx">CURLOPT_RETURNTRANSFER</span><span class="p">,</span> <span class="mi">1</span><span class="p">);</span>
<span class="nb">curl_setopt</span><span class="p">(</span><span class="nv">$ch</span><span class="p">,</span> <span class="nx">CURLOPT_POSTFIELDS</span><span class="p">,</span> <span class="nv">$paramsFile</span><span class="p">);</span>
<span class="nb">curl_setopt</span><span class="p">(</span><span class="nv">$ch</span><span class="p">,</span> <span class="nx">CURLOPT_POST</span><span class="p">,</span> <span class="mi">1</span><span class="p">);</span>
<span class="nb">curl_setopt</span><span class="p">(</span><span class="nv">$ch</span><span class="p">,</span> <span class="nx">CURLOPT_USERPWD</span><span class="p">,</span> <span class="s2">"user"</span> <span class="o">.</span> <span class="s2">":"</span> <span class="o">.</span> <span class="s2">"pass1"</span><span class="p">);</span>

<span class="nv">$headers</span> <span class="o">=</span> <span class="k">array</span><span class="p">();</span>
<span class="nv">$headers</span><span class="p">[]</span> <span class="o">=</span> <span class="s2">"Content-Type: application/json"</span><span class="p">;</span>
<span class="nb">curl_setopt</span><span class="p">(</span><span class="nv">$ch</span><span class="p">,</span> <span class="nx">CURLOPT_HTTPHEADER</span><span class="p">,</span> <span class="nv">$headers</span><span class="p">);</span>

<span class="nv">$result</span> <span class="o">=</span> <span class="nb">curl_exec</span><span class="p">(</span><span class="nv">$ch</span><span class="p">);</span>
<span class="k">echo</span> <span class="nv">$result</span><span class="p">;</span>

<span class="k">if</span> <span class="p">(</span><span class="nb">curl_errno</span><span class="p">(</span><span class="nv">$ch</span><span class="p">))</span> <span class="p">{</span>
    <span class="k">echo</span> <span class="s1">'Error:'</span> <span class="o">.</span> <span class="nb">curl_error</span><span class="p">(</span><span class="nv">$ch</span><span class="p">);</span>
<span class="p">}</span>
<span class="nb">curl_close</span> <span class="p">(</span><span class="nv">$ch</span><span class="p">);</span>
<span class="cp">?&gt;</span></code></pre>
</div>
<div class="su-tabs-pane su-u-clearfix su-u-trim" data-title="&lt;strong&gt;HTTP&lt;/strong&gt;">
<pre class="highlight http tab-http"><code><span class="err">HTTP method is currently not supported</span></code></pre>
</div></div></div>
<p><code>keywords.json</code> content:</p>
<pre class="highlight json tab-json"><code><span class="p">{</span>  
   <span class="s2">"url"</span><span class="p">:[</span>  
      <span class="s2">"https://stackoverflow.com/questions/tagged/python"</span><span class="p">,</span>
      <span class="s2">"https://stackoverflow.com/questions/tagged/golang"</span><span class="p">,</span>
      <span class="s2">"https://stackoverflow.com/questions/tagged/php"</span>
   <span class="p">],</span>
   <span class="s2">"source"</span><span class="p">:</span> <span class="s2">"universal"</span><span class="p">,</span>
   <span class="s2">"callback_url"</span><span class="p">:</span> <span class="s2">"https://your.callback.url"</span>
<span class="p">}</span>
</code></pre>
<p>The API will respond with query information in JSON format, by printing it in the response body, similar to this:</p>
<pre class="highlight json tab-json"><code><span class="p">{</span>
  <span class="s2">"queries"</span><span class="p">:</span> <span class="p">[</span>
    <span class="p">{</span>
      <span class="s2">"callback_url"</span><span class="p">:</span> <span class="s2">"https://your.callback.url"</span><span class="p">,</span>
      <span class="p">{</span><span class="err">...</span><span class="p">}</span>
      <span class="s2">"created_at"</span><span class="p">:</span> <span class="s2">"2019-10-01 00:00:01"</span><span class="p">,</span>
      <span class="s2">"domain"</span><span class="p">:</span> <span class="s2">"com"</span><span class="p">,</span>
      <span class="s2">"id"</span><span class="p">:</span> <span class="s2">"12345678900987654321"</span><span class="p">,</span>
      <span class="p">{</span><span class="err">...</span><span class="p">}</span>
      <span class="s2">"url"</span><span class="p">:</span> <span class="s2">"https://stackoverflow.com/questions/tagged/python"</span><span class="p">,</span>
      <span class="s2">"source"</span><span class="p">:</span> <span class="s2">"universal"</span><span class="p">,</span>
      <span class="p">{</span><span class="err">...</span><span class="p">}</span>
          <span class="s2">"rel"</span><span class="p">:</span> <span class="s2">"results"</span><span class="p">,</span>
          <span class="s2">"href"</span><span class="p">:</span> <span class="s2">"http://data.oxylabs.io/v1/queries/12345678900987654321/results"</span><span class="p">,</span>
          <span class="s2">"method"</span><span class="p">:</span> <span class="s2">"GET"</span>
        <span class="p">}</span>
      <span class="p">]</span>
    <span class="p">},</span>
    <span class="p">{</span>
      <span class="s2">"callback_url"</span><span class="p">:</span> <span class="s2">"https://your.callback.url"</span><span class="p">,</span>
      <span class="p">{</span><span class="err">...</span><span class="p">}</span>
      <span class="s2">"created_at"</span><span class="p">:</span> <span class="s2">"2019-10-01 00:00:01"</span><span class="p">,</span>
      <span class="s2">"domain"</span><span class="p">:</span> <span class="s2">"com"</span><span class="p">,</span>
      <span class="s2">"id"</span><span class="p">:</span> <span class="s2">"12345678901234567890"</span><span class="p">,</span>
      <span class="p">{</span><span class="err">...</span><span class="p">}</span>
      <span class="s2">"url"</span><span class="p">:</span> <span class="s2">"https://stackoverflow.com/questions/tagged/golang"</span><span class="p">,</span>
      <span class="s2">"source"</span><span class="p">:</span> <span class="s2">"universal"</span><span class="p">,</span>
      <span class="p">{</span><span class="err">...</span><span class="p">}</span>
          <span class="s2">"rel"</span><span class="p">:</span> <span class="s2">"results"</span><span class="p">,</span>
          <span class="s2">"href"</span><span class="p">:</span> <span class="s2">"http://data.oxylabs.io/v1/queries/12345678901234567890/results"</span><span class="p">,</span>
          <span class="s2">"method"</span><span class="p">:</span> <span class="s2">"GET"</span>
        <span class="p">}</span>
      <span class="p">]</span>
    <span class="p">},</span>
    <span class="p">{</span>
      <span class="s2">"callback_url"</span><span class="p">:</span> <span class="s2">"https://your.callback.url"</span><span class="p">,</span>
      <span class="p">{</span><span class="err">...</span><span class="p">}</span>
      <span class="s2">"created_at"</span><span class="p">:</span> <span class="s2">"2019-10-01 00:00:01"</span><span class="p">,</span>
      <span class="s2">"domain"</span><span class="p">:</span> <span class="s2">"com"</span><span class="p">,</span>
      <span class="s2">"id"</span><span class="p">:</span> <span class="s2">"01234567899876543210"</span><span class="p">,</span>
      <span class="p">{</span><span class="err">...</span><span class="p">}</span>
      <span class="s2">"url"</span><span class="p">:</span> <span class="s2">"https://stackoverflow.com/questions/tagged/php"</span><span class="p">,</span>
      <span class="s2">"source"</span><span class="p">:</span> <span class="s2">"universal"</span><span class="p">,</span>
      <span class="p">{</span><span class="err">...</span><span class="p">}</span>
          <span class="s2">"rel"</span><span class="p">:</span> <span class="s2">"results"</span><span class="p">,</span>
          <span class="s2">"href"</span><span class="p">:</span> <span class="s2">"http://data.oxylabs.io/v1/queries/01234567899876543210/results"</span><span class="p">,</span>
          <span class="s2">"method"</span><span class="p">:</span> <span class="s2">"GET"</span>
        <span class="p">}</span>
      <span class="p">]</span>
    <span class="p">}</span>
  <span class="p">]</span>
<span class="p">}</span></code></pre>
<hr />
<h4 id="get-notifier-ip-address-list">Get Notifier IP Address List</h4>
<p>You may want to whitelist the IPs sending you callback messages or get the list of these IPs for other purposes. This can be done by <code>GET</code>ing this endpoint: <code>https://data.oxylabs.io/v1/info/callbacker_ips</code>.</p>
<div class="su-tabs su-tabs-style-default su-tabs-mobile-stack" data-active="4" data-scroll-offset="0" data-anchor-in-url="no"><div class="su-tabs-nav"><span class="" data-url="" data-target="blank" tabindex="0" role="button"><strong>cURL</strong></span><span class="" data-url="" data-target="blank" tabindex="0" role="button"><strong>Python</strong></span><span class="" data-url="" data-target="blank" tabindex="0" role="button"><strong>PHP</strong></span><span class="" data-url="" data-target="blank" tabindex="0" role="button"><strong>HTTP</strong></span></div><div class="su-tabs-panes"><div class="su-tabs-pane su-u-clearfix su-u-trim" data-title="&lt;strong&gt;cURL&lt;/strong&gt;">
<pre class="highlight shell tab-shell"><code>curl --user user:pass1 <span class="s1">'https://data.oxylabs.io/v1/info/callbacker_ips'</span></code></pre>
</div>
<div class="su-tabs-pane su-u-clearfix su-u-trim" data-title="&lt;strong&gt;Python&lt;/strong&gt;">
<pre class="highlight python tab-python"><code><span class="kn">import</span> <span class="nn">requests</span>
<span class="kn">from</span> <span class="nn">pprint</span> <span class="kn">import</span> <span class="n">pprint</span>

<span class="c"># Get response from the callback IPs endpoint.</span>
<span class="n">response</span> <span class="o">=</span> <span class="n">requests</span><span class="o">.</span><span class="n">request</span><span class="p">(</span>
    <span class="n">method</span><span class="o">=</span><span class="s">'GET'</span><span class="p">,</span>
    <span class="n">url</span><span class="o">=</span><span class="s">'https://data.oxylabs.io/v1/info/callbacker_ips'</span><span class="p">,</span>
    <span class="n">auth</span><span class="o">=</span><span class="p">(</span><span class="s">'user'</span><span class="p">,</span> <span class="s">'pass1'</span><span class="p">),</span>
<span class="p">)</span>

<span class="c"># Print the prettified JSON response to stdout.</span>
<span class="n">pprint</span><span class="p">(</span><span class="n">response</span><span class="o">.</span><span class="n">json</span><span class="p">())</span></code></pre>
</div>
<div class="su-tabs-pane su-u-clearfix su-u-trim" data-title="&lt;strong&gt;PHP&lt;/strong&gt;">
<pre class="highlight php tab-php"><code><span class="cp">&lt;?php</span>

<span class="nv">$ch</span> <span class="o">=</span> <span class="nb">curl_init</span><span class="p">();</span>

<span class="nb">curl_setopt</span><span class="p">(</span><span class="nv">$ch</span><span class="p">,</span> <span class="nx">CURLOPT_URL</span><span class="p">,</span> <span class="s2">"https://data.oxylabs.io/v1/info/callbacker_ips"</span><span class="p">);</span>
<span class="nb">curl_setopt</span><span class="p">(</span><span class="nv">$ch</span><span class="p">,</span> <span class="nx">CURLOPT_RETURNTRANSFER</span><span class="p">,</span> <span class="mi">1</span><span class="p">);</span>
<span class="nb">curl_setopt</span><span class="p">(</span><span class="nv">$ch</span><span class="p">,</span> <span class="nx">CURLOPT_CUSTOMREQUEST</span><span class="p">,</span> <span class="s2">"GET"</span><span class="p">);</span>
<span class="nb">curl_setopt</span><span class="p">(</span><span class="nv">$ch</span><span class="p">,</span> <span class="nx">CURLOPT_USERPWD</span><span class="p">,</span> <span class="s2">"user"</span> <span class="o">.</span> <span class="s2">":"</span> <span class="o">.</span> <span class="s2">"pass1"</span><span class="p">);</span>

<span class="nv">$result</span> <span class="o">=</span> <span class="nb">curl_exec</span><span class="p">(</span><span class="nv">$ch</span><span class="p">);</span>
<span class="k">echo</span> <span class="nv">$result</span><span class="p">;</span>

<span class="k">if</span> <span class="p">(</span><span class="nb">curl_errno</span><span class="p">(</span><span class="nv">$ch</span><span class="p">))</span> <span class="p">{</span>
    <span class="k">echo</span> <span class="s1">'Error:'</span> <span class="o">.</span> <span class="nb">curl_error</span><span class="p">(</span><span class="nv">$ch</span><span class="p">);</span>
<span class="p">}</span>
<span class="nb">curl_close</span> <span class="p">(</span><span class="nv">$ch</span><span class="p">);</span>
<span class="cp">?&gt;</span></code></pre>
</div>
<div class="su-tabs-pane su-u-clearfix su-u-trim" data-title="&lt;strong&gt;HTTP&lt;/strong&gt;">
<pre class="highlight http tab-http"><code><span class="err">HTTP method is currently not supported</span></code></pre>
</div></div></div>
<p>The API will return the list of IPs making callback requests to your system:</p>
<pre class="highlight json tab-json"><code><span class="p">{</span>
    <span class="s2">"ips"</span><span class="p">:</span> <span class="p">[</span>
        <span class="s2">"x.x.x.x"</span><span class="p">,</span>
        <span class="s2">"y.y.y.y"</span>
    <span class="p">]</span>
<span class="p">}</span></code></pre>
<hr />
<h4 id="upload-to-storage">Upload to Storage</h4>
<p>By default, Web Scraper API's job results are stored in our databases. This means that you will need to query our results endpoint and retrieve the content yourself. Custom storage feature allows you to store results in your own cloud storage. The advantages of this feature are that you do not need extra requests to fetch results &#8211; everything goes directly to your storage bucket.</p>
<p>At the moment, we only support Amazon S3. If you want to use a different type of storage, contact your account manager to discuss the timeline.</p>
<p>In order to upload job results to your Amazon S3 bucket, you need to set up special permissions. To do that, go to <code>https://s3.console.aws.amazon.com/ &gt; S3 &gt; Storage &gt; Bucket Name (if don't have one, create new) &gt; Permissions &gt; Bucket Policy</code></p>
<p><img loading="lazy" decoding="async" class="aligncenter size-full wp-image-9064" src="https://www.proxysp.com/wp-content/uploads/2021/11/oxylabs-web-scraper-api-upload-to-storage.png" alt="oxylabs web scraper api upload to storage" width="481" height="321" srcset="https://proxysp.com/wp-content/uploads/2021/11/oxylabs-web-scraper-api-upload-to-storage.png 481w, https://proxysp.com/wp-content/uploads/2021/11/oxylabs-web-scraper-api-upload-to-storage-300x200.png 300w" sizes="(max-width: 481px) 100vw, 481px" /></p>
<p>You can find the bucket policy in this <a class="custom_link" href="https://developers.oxylabs.io/resources/s3_bucket_policy.json" target="_blank" rel="noopener">JSON</a> or in the code sample area on the right. Do not forget to change the bucket name under <code>YOUR_BUCKET_NAME</code>. This policy allows us to write to your bucket, upload files for you, and know the bucket location.</p>
<p>To use this feature and you will need to specify two additional parameters in your requests. Learn more <a href="#direct">here</a>.</p>
<p>The upload path looks like this: <code>YOUR_BUCKET_NAME/job_ID.json</code>. You will find the job ID in the response body that you will receive from us after submitting a request. In <a class="custom_link" href="https://developers.oxylabs.io/scraper-apis/web_scraper_api/source/web-scraper-api/index.html?php#single-query" target="_blank" rel="noopener">this example</a> job ID is <code>12345678900987654321</code>.</p>
<pre class="highlight json tab-json"><code><span class="p">{</span>
    <span class="s2">"Version"</span><span class="p">:</span> <span class="s2">"2012-10-17"</span><span class="p">,</span>
    <span class="s2">"Id"</span><span class="p">:</span> <span class="s2">"Policy1577442634787"</span><span class="p">,</span>
    <span class="s2">"Statement"</span><span class="p">:</span> <span class="p">[</span>
        <span class="p">{</span>
            <span class="s2">"Sid"</span><span class="p">:</span> <span class="s2">"Stmt1577442633719"</span><span class="p">,</span>
            <span class="s2">"Effect"</span><span class="p">:</span> <span class="s2">"Allow"</span><span class="p">,</span>
            <span class="s2">"Principal"</span><span class="p">:</span> <span class="p">{</span>
                <span class="s2">"AWS"</span><span class="p">:</span> <span class="s2">"arn:aws:iam::324311890426:user/oxylabs.s3.uploader"</span>
            <span class="p">},</span>
            <span class="s2">"Action"</span><span class="p">:</span> <span class="s2">"s3:GetBucketLocation"</span><span class="p">,</span>
            <span class="s2">"Resource"</span><span class="p">:</span> <span class="s2">"arn:aws:s3:::YOUR_BUCKET_NAME"</span>
        <span class="p">},</span>
        <span class="p">{</span>
            <span class="s2">"Sid"</span><span class="p">:</span> <span class="s2">"Stmt1577442633719"</span><span class="p">,</span>
            <span class="s2">"Effect"</span><span class="p">:</span> <span class="s2">"Allow"</span><span class="p">,</span>
            <span class="s2">"Principal"</span><span class="p">:</span> <span class="p">{</span>
                <span class="s2">"AWS"</span><span class="p">:</span> <span class="s2">"arn:aws:iam::324311890426:user/oxylabs.s3.uploader"</span>
            <span class="p">},</span>
            <span class="s2">"Action"</span><span class="p">:</span> <span class="p">[</span>
                <span class="s2">"s3:PutObject"</span><span class="p">,</span>
                <span class="s2">"s3:PutObjectAcl"</span>
            <span class="p">],</span>
            <span class="s2">"Resource"</span><span class="p">:</span> <span class="s2">"arn:aws:s3:::YOUR_BUCKET_NAME/*"</span>
        <span class="p">}</span>
    <span class="p">]</span>
<span class="p">}</span></code></pre>
<hr />
<h3 id="realtime">Realtime</h3>
<p>The data submission is the same as in Push-Pull method, but with Realtime, we will return the content on open connection. You send us a query, the connection remains open, we retrieve the content, and bring it to you. The endpoint that handles that is this:</p>
<div class="endpoint">
<pre><strong>POST https://realtime.oxylabs.io/v1/queries</strong></pre>
</div>
<p>The timeout limit for open connections is 100 seconds. Therefore, in rare cases of heavy load, we may not be able to ensure the data gets to you.</p>
<p>You need to post query parameters as data in the JSON body. Please see an example for more details.</p>
<div class="su-tabs su-tabs-style-default su-tabs-mobile-stack" data-active="4" data-scroll-offset="0" data-anchor-in-url="no"><div class="su-tabs-nav"><span class="" data-url="" data-target="blank" tabindex="0" role="button"><strong>cURL</strong></span><span class="" data-url="" data-target="blank" tabindex="0" role="button"><strong>Python</strong></span><span class="" data-url="" data-target="blank" tabindex="0" role="button"><strong>PHP</strong></span><span class="" data-url="" data-target="blank" tabindex="0" role="button"><strong>HTTP</strong></span></div><div class="su-tabs-panes"><div class="su-tabs-pane su-u-clearfix su-u-trim" data-title="&lt;strong&gt;cURL&lt;/strong&gt;">
<pre class="highlight shell tab-shell"><code>curl --user user:pass1 <span class="s1">'https://realtime.oxylabs.io/v1/queries'</span> -H <span class="s2">"Content-Type: application/json"</span> <span class="se">\</span>
 -d <span class="s1">'{"source": "universal", "url": "https://stackoverflow.com/questions/tagged/python"}'</span></code></pre>
</div>
<div class="su-tabs-pane su-u-clearfix su-u-trim" data-title="&lt;strong&gt;Python&lt;/strong&gt;">
<pre class="highlight python tab-python"><code><span class="kn">import</span> <span class="nn">requests</span>
<span class="kn">from</span> <span class="nn">pprint</span> <span class="kn">import</span> <span class="n">pprint</span>


<span class="c"># Structure payload.</span>
<span class="n">payload</span> <span class="o">=</span> <span class="p">{</span>
    <span class="s">'source'</span><span class="p">:</span> <span class="s">'universal'</span><span class="p">,</span>
    <span class="s">'url'</span><span class="p">:</span> <span class="s">'https://stackoverflow.com/questions/tagged/python'</span><span class="p">,</span>
<span class="p">}</span>

<span class="c"># Get response.</span>
<span class="n">response</span> <span class="o">=</span> <span class="n">requests</span><span class="o">.</span><span class="n">request</span><span class="p">(</span>
    <span class="s">'POST'</span><span class="p">,</span>
    <span class="s">'https://realtime.oxylabs.io/v1/queries'</span><span class="p">,</span>
    <span class="n">auth</span><span class="o">=</span><span class="p">(</span><span class="s">'user'</span><span class="p">,</span> <span class="s">'pass1'</span><span class="p">),</span>
    <span class="n">json</span><span class="o">=</span><span class="n">payload</span><span class="p">,</span>
<span class="p">)</span>

<span class="c"># Instead of response with job status and results url, this will return the</span>
<span class="c"># JSON response with results.</span>
<span class="n">pprint</span><span class="p">(</span><span class="n">response</span><span class="o">.</span><span class="n">json</span><span class="p">())</span></code></pre>
</div>
<div class="su-tabs-pane su-u-clearfix su-u-trim" data-title="&lt;strong&gt;PHP&lt;/strong&gt;">
<pre class="highlight php tab-php"><code><span class="cp">&lt;?php</span>

<span class="nv">$params</span> <span class="o">=</span> <span class="k">array</span><span class="p">(</span>
    <span class="s1">'source'</span> <span class="o">=&gt;</span> <span class="s1">'universal'</span><span class="p">,</span>
    <span class="s1">'query'</span> <span class="o">=&gt;</span> <span class="s1">'sofa'</span><span class="p">,</span>
<span class="p">);</span>

<span class="nv">$ch</span> <span class="o">=</span> <span class="nb">curl_init</span><span class="p">();</span>

<span class="nb">curl_setopt</span><span class="p">(</span><span class="nv">$ch</span><span class="p">,</span> <span class="nx">CURLOPT_URL</span><span class="p">,</span> <span class="s2">"https://realtime.oxylabs.io/v1/queries"</span><span class="p">);</span>
<span class="nb">curl_setopt</span><span class="p">(</span><span class="nv">$ch</span><span class="p">,</span> <span class="nx">CURLOPT_RETURNTRANSFER</span><span class="p">,</span> <span class="mi">1</span><span class="p">);</span>
<span class="nb">curl_setopt</span><span class="p">(</span><span class="nv">$ch</span><span class="p">,</span> <span class="nx">CURLOPT_POSTFIELDS</span><span class="p">,</span> <span class="nb">json_encode</span><span class="p">(</span><span class="nv">$params</span><span class="p">));</span>
<span class="nb">curl_setopt</span><span class="p">(</span><span class="nv">$ch</span><span class="p">,</span> <span class="nx">CURLOPT_POST</span><span class="p">,</span> <span class="mi">1</span><span class="p">);</span>
<span class="nb">curl_setopt</span><span class="p">(</span><span class="nv">$ch</span><span class="p">,</span> <span class="nx">CURLOPT_USERPWD</span><span class="p">,</span> <span class="s2">"user"</span> <span class="o">.</span> <span class="s2">":"</span> <span class="o">.</span> <span class="s2">"pass1"</span><span class="p">);</span>

<span class="nv">$headers</span> <span class="o">=</span> <span class="k">array</span><span class="p">();</span>
<span class="nv">$headers</span><span class="p">[]</span> <span class="o">=</span> <span class="s2">"Content-Type: application/json"</span><span class="p">;</span>
<span class="nb">curl_setopt</span><span class="p">(</span><span class="nv">$ch</span><span class="p">,</span> <span class="nx">CURLOPT_HTTPHEADER</span><span class="p">,</span> <span class="nv">$headers</span><span class="p">);</span>

<span class="nv">$result</span> <span class="o">=</span> <span class="nb">curl_exec</span><span class="p">(</span><span class="nv">$ch</span><span class="p">);</span>
<span class="k">echo</span> <span class="nv">$result</span><span class="p">;</span>

<span class="k">if</span> <span class="p">(</span><span class="nb">curl_errno</span><span class="p">(</span><span class="nv">$ch</span><span class="p">))</span> <span class="p">{</span>
    <span class="k">echo</span> <span class="s1">'Error:'</span> <span class="o">.</span> <span class="nb">curl_error</span><span class="p">(</span><span class="nv">$ch</span><span class="p">);</span>
<span class="p">}</span>
<span class="nb">curl_close</span> <span class="p">(</span><span class="nv">$ch</span><span class="p">);</span>
<span class="cp">?&gt;</span></code></pre>
</div>
<div class="su-tabs-pane su-u-clearfix su-u-trim" data-title="&lt;strong&gt;HTTP&lt;/strong&gt;">
<pre class="highlight http tab-http"><code><span class="err"># URL has to be encoded to escape `&` and `=` characters. It is not necessary in this example.

https://realtime.oxylabs.io/v1/queries?source=universal&url=https://stackoverflow.com/questions/tagged/python&access_token=12345abcde</span></code></pre>
</div></div></div>
<p>Example response body that will be returned on open connection:</p>
<pre class="highlight json tab-json"><code><span class="p">{</span>
  <span class="s2">"results"</span><span class="p">:</span> <span class="p">[</span>
    <span class="p">{</span>
      <span class="s2">"content"</span><span class="p">:</span> <span class="s2">"&lt;html&gt;
      CONTENT
      &lt;/html&gt;"</span>
      <span class="s2">"created_at"</span><span class="p">:</span> <span class="s2">"2019-10-01 00:00:01"</span><span class="p">,</span>
      <span class="s2">"updated_at"</span><span class="p">:</span> <span class="s2">"2019-10-01 00:00:15"</span><span class="p">,</span>
      <span class="s2">"id"</span><span class="p">:</span> <span class="kc">null</span><span class="p">,</span>
      <span class="s2">"page"</span><span class="p">:</span> <span class="mi">1</span><span class="p">,</span>
      <span class="s2">"url"</span><span class="p">:</span> <span class="s2">"https://stackoverflow.com/questions/tagged/python"</span><span class="p">,</span>
      <span class="s2">"job_id"</span><span class="p">:</span> <span class="s2">"12345678900987654321"</span><span class="p">,</span>
      <span class="s2">"status_code"</span><span class="p">:</span> <span class="mi">200</span>
    <span class="p">}</span>
  <span class="p">]</span>
<span class="p">}</span></code></pre>
<hr />
<h3 id="superapi">SuperAPI</h3>
<p>If you have ever used regular proxies for data scraping, integrating SuperAPI delivery method will be a breeze. You simply need to use our entry node as proxy, authorize with Web Scraper API credentials, and ignore certificates. In <code>cURL</code> it's <code>-k</code> or <code>--insecure</code>. Your data will reach you on open connection.</p>
<div class="endpoint">
<pre><strong>GET realtime.oxylabs.io:60000</strong></pre>
</div>
<p>SuperAPI only supports a handful of parameters since it <strong>only works with <a class="custom_link" href="#direct">Direct</a> data source</strong> where a full URL is provided. These parameters should be sent as headers. This is a list of accepted parameters:</p>
<table>
<tbody>
<tr>
<td><code>X-OxySERPs-User-Agent-Type</code></td>
<td>There is no way to indicate a specific User-Agent, but you can let us know which browser and platform to use. A list of supported User-Agents can be found <a class="custom_link" href="#user_agent_type">here</a>.</td>
</tr>
</tbody>
</table>
<p>If you need help setting up SuperAPI, get in touch with us at <a class="custom_link" href="mailto:support@oxylabs.io">support@oxylabs.io</a>.</p>
<div class="su-tabs su-tabs-style-default su-tabs-mobile-stack" data-active="4" data-scroll-offset="0" data-anchor-in-url="no"><div class="su-tabs-nav"><span class="" data-url="" data-target="blank" tabindex="0" role="button"><strong>cURL</strong></span><span class="" data-url="" data-target="blank" tabindex="0" role="button"><strong>Python</strong></span><span class="" data-url="" data-target="blank" tabindex="0" role="button"><strong>PHP</strong></span><span class="" data-url="" data-target="blank" tabindex="0" role="button"><strong>HTTP</strong></span></div><div class="su-tabs-panes"><div class="su-tabs-pane su-u-clearfix su-u-trim" data-title="&lt;strong&gt;cURL&lt;/strong&gt;">
<pre class="highlight shell tab-shell"><code>curl -k <span class="se">\</span>
-x realtime.oxylabs.io:60000 <span class="se">\</span>
-U user:pass1 <span class="se">\</span>
-H <span class="s2">"X-OxySERPs-User-Agent-Type: desktop_chrome"</span> <span class="se">\</span>
<span class="s2">"https://stackoverflow.com/questions/tagged/python"</span></code></pre>
</div>
<div class="su-tabs-pane su-u-clearfix su-u-trim" data-title="&lt;strong&gt;Python&lt;/strong&gt;">
<pre class="highlight python tab-python"><code><span class="kn">import</span> <span class="nn">requests</span>
<span class="kn">from</span> <span class="nn">pprint</span> <span class="kn">import</span> <span class="n">pprint</span>

<span class="c"># Define proxy dict. Do not forget to put your real user and pass here as well.</span>
<span class="n">proxies</span> <span class="o">=</span> <span class="p">{</span>
  <span class="s">'http'</span><span class="p">:</span> <span class="s">'http://user:pass1@realtime.oxylabs.io:60000'</span><span class="p">,</span>
  <span class="s">'https'</span><span class="p">:</span> <span class="s">'https://user:pass1@realtime.oxylabs.io:60000'</span><span class="p">,</span>
<span class="p">}</span>

<span class="n">response</span> <span class="o">=</span> <span class="n">requests</span><span class="o">.</span><span class="n">request</span><span class="p">(</span>
    <span class="s">'GET'</span><span class="p">,</span>
    <span class="s">'https://stackoverflow.com/questions/tagged/python'</span><span class="p">,</span>
    <span class="n">auth</span><span class="o">=</span><span class="p">(</span><span class="s">'user'</span><span class="p">,</span> <span class="s">'pass1'</span><span class="p">),</span>
    <span class="n">verify</span><span class="o">=</span><span class="bp">False</span><span class="p">,</span>  <span class="c"># Or accept our certificate.</span>
    <span class="n">proxies</span><span class="o">=</span><span class="n">proxies</span><span class="p">,</span>
<span class="p">)</span>

<span class="c"># Print result page to stdout</span>
<span class="n">pprint</span><span class="p">(</span><span class="n">response</span><span class="o">.</span><span class="n">text</span><span class="p">)</span>

<span class="c"># Save returned HTML to result.html file</span>
<span class="k">with</span> <span class="nb">open</span><span class="p">(</span><span class="s">'result.html'</span><span class="p">,</span> <span class="s">'w'</span><span class="p">)</span> <span class="k">as</span> <span class="n">f</span><span class="p">:</span>
    <span class="n">f</span><span class="o">.</span><span class="n">write</span><span class="p">(</span><span class="n">response</span><span class="o">.</span><span class="n">text</span><span class="p">)</span></code></pre>
</div>
<div class="su-tabs-pane su-u-clearfix su-u-trim" data-title="&lt;strong&gt;PHP&lt;/strong&gt;">
<pre class="highlight php tab-php"><code><span class="cp">&lt;?php</span>
<span class="nv">$ch</span> <span class="o">=</span> <span class="nb">curl_init</span><span class="p">();</span>

<span class="nb">curl_setopt</span><span class="p">(</span><span class="nv">$ch</span><span class="p">,</span> <span class="nx">CURLOPT_URL</span><span class="p">,</span> <span class="s2">"https://stackoverflow.com/questions/tagged/python"</span><span class="p">);</span>
<span class="nb">curl_setopt</span><span class="p">(</span><span class="nv">$ch</span><span class="p">,</span> <span class="nx">CURLOPT_RETURNTRANSFER</span><span class="p">,</span> <span class="mi">1</span><span class="p">);</span>
<span class="nb">curl_setopt</span><span class="p">(</span><span class="nv">$ch</span><span class="p">,</span> <span class="nx">CURLOPT_PROXY</span><span class="p">,</span> <span class="s1">'realtime.oxylabs.io:60000'</span><span class="p">);</span>
<span class="nb">curl_setopt</span><span class="p">(</span><span class="nv">$ch</span><span class="p">,</span> <span class="nx">CURLOPT_PROXYUSERPWD</span><span class="p">,</span> <span class="s2">"user"</span> <span class="o">.</span> <span class="s2">":"</span> <span class="o">.</span> <span class="s2">"pass1"</span><span class="p">);</span>
<span class="nb">curl_setopt</span><span class="p">(</span><span class="nv">$ch</span><span class="p">,</span> <span class="nx">CURLOPT_SSL_VERIFYPEER</span><span class="p">,</span> <span class="kc">false</span><span class="p">);</span>
<span class="nb">curl_setopt</span><span class="p">(</span><span class="nv">$ch</span><span class="p">,</span> <span class="nx">CURLOPT_SSL_VERIFYHOST</span><span class="p">,</span> <span class="kc">false</span><span class="p">);</span>

<span class="nv">$result</span> <span class="o">=</span> <span class="nb">curl_exec</span><span class="p">(</span><span class="nv">$ch</span><span class="p">);</span>
<span class="k">echo</span> <span class="nv">$result</span><span class="p">;</span>

<span class="k">if</span> <span class="p">(</span><span class="nb">curl_errno</span><span class="p">(</span><span class="nv">$ch</span><span class="p">))</span> <span class="p">{</span>
    <span class="k">echo</span> <span class="s1">'Error:'</span> <span class="o">.</span> <span class="nb">curl_error</span><span class="p">(</span><span class="nv">$ch</span><span class="p">);</span>
<span class="p">}</span>
<span class="nb">curl_close</span> <span class="p">(</span><span class="nv">$ch</span><span class="p">);</span></code></pre>
</div>
<div class="su-tabs-pane su-u-clearfix su-u-trim" data-title="&lt;strong&gt;HTTP&lt;/strong&gt;">
<pre class="highlight http tab-http"><code><span class="err">HTTP method is not supported with SuperAPI</span></code></pre>
</div></div></div>
<hr />
<h2 id="content-type">Content Type</h2>
<p>Web Scraper API returns <strong>raw HTML</strong>.</p>
<h3 id="download-images">Download Images</h3>
<p>It is possible to download images via Web Scraper API. If you are doing that through SuperAPI, you can simply save the output to image extension. For example:</p>
<p><code>curl -k -x realtime.oxylabs.io:60000 -U user:pass1 "https://example.com/image.jpg" &gt;&gt; image.jpg</code></p>
<p>If you are using <a class="custom_link" href="#push-pull">Push-Pull</a> or <a class="custom_link" href="#realtime">Realtime</a> methods, you will need to add <code>content_encoding</code> parameter with a value of <code>base64</code>. Once you receive the results, you then need to decode encoded data from <code>content</code> into bytes and save it as an image file. Please find an example in Python on the right.</p>
<hr />
<h2 id="data-sources">Data Sources</h2>
<p>Web Scraper API accepts URLs, along with additional parameters, such as User-Agent type, proxy location, and others. See this method, which we call <a class="custom_link" href="#direct">Direct</a>, described below.</p>
<p>Web Scraper API is able to render JavaScript when scraping. This enables you to get more data from the web page and get screenshots.</p>
<p>If you are unsure about any part of the documentation, drop us a line at <a class="custom_link" href="mailto:support@oxylabs.io">support@oxylabs.io</a> or contact your account manager.</p>
<hr />
<h3 id="direct">Direct</h3>
<p><img loading="lazy" decoding="async" class="size-full wp-image-9103 alignleft" src="https://www.proxysp.com/wp-content/uploads/2021/11/Oxylabs-Web-Scraper-Api-Direct-1.png" alt="Oxylabs Web Scraper Api Direct" width="427" height="21" srcset="https://proxysp.com/wp-content/uploads/2021/11/Oxylabs-Web-Scraper-Api-Direct-1.png 427w, https://proxysp.com/wp-content/uploads/2021/11/Oxylabs-Web-Scraper-Api-Direct-1-300x15.png 300w" sizes="(max-width: 427px) 100vw, 427px" /></p>
<p>&nbsp;</p>
<p>Web Scraper API is designed to retrieve the contents of any URL on the internet. <code>POST</code>-ing the parameters in JSON format to the following endpoint will submit the specified URL to the extraction queue.</p>
<p><span class="test">Query parameters</span></p>
<div class="su-table su-table-responsive su-table-alternate">
<table width="439">
<tbody>
<tr>
<td style="font-weight: 400;" width="159"><strong>Parameter</strong></td>
<td style="font-weight: 400;" width="160"><strong>Description</strong></td>
<td style="font-weight: 400;" width="120"><strong>Default Value</strong></td>
</tr>
<tr>
<td style="font-weight: 400;" width="159">source</td>
<td style="font-weight: 400;" width="160">Data source</td>
<td style="font-weight: 400;" width="120">universal</td>
</tr>
<tr>
<td style="font-weight: 400;" width="159">url</td>
<td style="font-weight: 400;" width="160">Direct URL (link) to Universal page</td>
<td style="font-weight: 400;" width="120">&#8211;</td>
</tr>
<tr>
<td style="font-weight: 400;" width="159">user_agent_type</td>
<td style="font-weight: 400;" width="160">Device type and browser. The full list can be found<a href="#user_agent_type"> here.</a></td>
<td style="font-weight: 400;" width="120">desktop</td>
</tr>
<tr>
<td style="font-weight: 400;" width="159">geo_location</td>
<td style="font-weight: 400;" width="160">Geo location of proxy used to retrieve the data. The full list of supported locations can be found<a href="#geo_location"> here.</a></td>
<td style="font-weight: 400;" width="120"></td>
</tr>
<tr>
<td style="font-weight: 400;" width="159">locale</td>
<td style="font-weight: 400;" width="160">Locale, as expected in Accept-Language header.</td>
<td style="font-weight: 400;" width="120"></td>
</tr>
<tr>
<td style="font-weight: 400;" width="159">render</td>
<td style="font-weight: 400;" width="160">Enables JavaScript rendering. Use it when the target requires JavaScript to load content. Only works via Push-Pull (a.k.a. Callback) method. There are two available values for this parameter: html(get raw output) and png (get a Base64-encoded screenshot).</td>
<td style="font-weight: 400;" width="120"></td>
</tr>
<tr>
<td style="font-weight: 400;" width="159">content_encoding</td>
<td style="font-weight: 400;" width="160">Add this parameter if you are downloading images. Learn more<a href="#download-images"> here.</a></td>
<td style="font-weight: 400;" width="120">base64</td>
</tr>
<tr>
<td style="font-weight: 400;" width="159">context:</td>
<td style="font-weight: 400;" rowspan="2" width="160">Base64-encoded POST request body. It is only useful if http_method is set to post.</td>
<td style="font-weight: 400;" rowspan="2" width="120">&#8211;</td>
</tr>
<tr>
<td style="font-weight: 400;" width="159">content</td>
</tr>
<tr>
<td style="font-weight: 400;" width="159">context:</td>
<td style="font-weight: 400;" rowspan="2" width="160">Pass your own cookies.</td>
<td style="font-weight: 400;" rowspan="2" width="120">&#8211;</td>
</tr>
<tr>
<td style="font-weight: 400;" width="159">cookies</td>
</tr>
<tr>
<td style="font-weight: 400;" width="159">context:</td>
<td style="font-weight: 400;" rowspan="2" width="160">Indicate whether you would like the scraper to follow redirects (3xx responses with a destination URL) to get the contents of the URL at the end of the redirect chain.</td>
<td style="font-weight: 400;" rowspan="2" width="120">&#8211;</td>
</tr>
<tr>
<td style="font-weight: 400;" width="159">follow_redirects</td>
</tr>
<tr>
<td style="font-weight: 400;" width="159">context:</td>
<td style="font-weight: 400;" rowspan="2" width="160">Pass your own headers.</td>
<td style="font-weight: 400;" rowspan="2" width="120">&#8211;</td>
</tr>
<tr>
<td style="font-weight: 400;" width="159">headers</td>
</tr>
<tr>
<td style="font-weight: 400;" width="159">context:</td>
<td style="font-weight: 400;" rowspan="2" width="160">Set it to post if you would like to make a POST request to your target URL via Universal scraper.</td>
<td style="font-weight: 400;" rowspan="2" width="120">get</td>
</tr>
<tr>
<td style="font-weight: 400;" width="159">http_method</td>
</tr>
<tr>
<td style="font-weight: 400;" width="159">context:</td>
<td style="font-weight: 400;" rowspan="2" width="160">If you want to use the same proxy with multiple requests, you can do so by using this parameter. Just set your session to any string you like, and we will assign a proxy to this ID and keep it for up to 10 minutes. After that, if you make another request with the same session ID, a new proxy will be assigned to that particular session ID.</td>
<td style="font-weight: 400;" rowspan="2" width="120">&#8211;</td>
</tr>
<tr>
<td style="font-weight: 400;" width="159">session_id</td>
</tr>
<tr>
<td style="font-weight: 400;" width="159">context:</td>
<td style="font-weight: 400;" rowspan="2" width="160">Define a custom HTTP response code (or a few of them), upon which we should consider the scrape successful and return the content to you. May be useful if you want us to return the 503 error page or in some other non-standard cases.</td>
<td style="font-weight: 400;" rowspan="2" width="120">&#8211;</td>
</tr>
<tr>
<td style="font-weight: 400;" width="159">successful_status_codes</td>
</tr>
<tr>
<td style="font-weight: 400;" width="159">callback_url</td>
<td style="font-weight: 400;" width="160">URL to your callback endpoint.</td>
<td style="font-weight: 400;" width="120">&#8211;</td>
</tr>
<tr>
<td style="font-weight: 400;" width="159">storage_type</td>
<td style="font-weight: 400;" width="160">Storage service provider. At the moment, only Amazon S3 is supported: s3. Full implementation can be found on the <a href="#upload-to-storage">Upload to Storage </a>page. Only works via Push-Pull (Callback) method.</td>
<td style="font-weight: 400;" width="120">&#8211;</td>
</tr>
<tr>
<td style="font-weight: 400;" width="159">storage_url</td>
<td style="font-weight: 400;" width="160">Your Amazon S3 bucket name. Only works via Push-Pull (Callback) method.</td>
<td style="font-weight: 400;" width="120">&#8211;</td>
</tr>
</tbody>
</table>
</div>
<p><code class="required">  </code> &#8211; required parameter</p>
<p>In this example, the API will retrieve a universal product page in Push-Pull method. All available parameters are included (though not always necessary or compatible within the same request), to give you an idea on how to format your requests:</p>
<div class="su-tabs su-tabs-style-default su-tabs-mobile-stack" data-active="4" data-scroll-offset="0" data-anchor-in-url="no"><div class="su-tabs-nav"><span class="" data-url="" data-target="blank" tabindex="0" role="button"><strong>cURL</strong></span><span class="" data-url="" data-target="blank" tabindex="0" role="button"><strong>Python</strong></span><span class="" data-url="" data-target="blank" tabindex="0" role="button"><strong>PHP</strong></span><span class="" data-url="" data-target="blank" tabindex="0" role="button"><strong>HTTP</strong></span></div><div class="su-tabs-panes"><div class="su-tabs-pane su-u-clearfix su-u-trim" data-title="&lt;strong&gt;cURL&lt;/strong&gt;">
<pre class="highlight shell tab-shell"><code>curl --user user:pass1 <span class="se">\</span>
<span class="s1">'https://data.oxylabs.io/v1/queries'</span> <span class="se">\</span>
-H <span class="s2">"Content-Type: application/json"</span> <span class="se">\</span>
 -d <span class="s1">'{"source": "universal", "url": "https://stackoverflow.com/questions/tagged/python", "user_agent_type": "mobile", "render": "html", 
 "context": [{"key": "headers", "value": ["Accept-Language": "en-US", "Content-Type": "application/octet-stream", "Custom-Header": "custom header content"]}, {"key": "cookies", "value": [{"key": "NID", "value": "1234567890"}, {"key": "1P JAR", "value": "0987654321"}, {"key": "follow_redirects", "value": true}, {"key": "http_method", "value": "get"}, {"key": "content", "value": "base64EncodedPOSTBody"}, {"key": "successful_status_codes", "value": [303, 808, 909]}]}]}'</span></code></pre>
</div>
<div class="su-tabs-pane su-u-clearfix su-u-trim" data-title="&lt;strong&gt;Python&lt;/strong&gt;">
<pre class="highlight python tab-python"><code><span class="kn">import</span> <span class="nn">requests</span>
<span class="kn">from</span> <span class="nn">pprint</span> <span class="kn">import</span> <span class="n">pprint</span>


<span class="c"># Structure payload.</span>
<span class="n">payload</span> <span class="o">=</span> <span class="p">{</span>
    <span class="s">'source'</span><span class="p">:</span> <span class="s">'universal'</span><span class="p">,</span>
    <span class="s">'url'</span><span class="p">:</span> <span class="s">'https://www.etsy.com/listing/399423455/big-glass-house-planter-handmade-glass?ref=hp_prn&frs=1'</span><span class="p">,</span>
    <span class="s">'user_agent_type'</span><span class="p">:</span> <span class="s">'desktop'</span><span class="p">,</span>
    <span class="s">'geo_location'</span><span class="p">:</span> <span class="s">'United States'</span><span class="p">,</span>
    <span class="s">'context'</span><span class="p">:</span> <span class="p">[</span>
        <span class="p">{</span>
          <span class="s">'key'</span><span class="p">:</span> <span class="s">'session_id'</span><span class="p">,</span>
          <span class="s">'value'</span><span class="p">:</span> <span class="s">'1234567890abcdef'</span>
        <span class="p">}</span>
        <span class="p">{</span>
          <span class="s">'key'</span><span class="p">:</span> <span class="s">'headers'</span><span class="p">,</span> <span class="s">'value'</span><span class="p">:</span> 
            <span class="p">{</span>
             <span class="s">'Accept-Language'</span><span class="p">:</span> <span class="s">'en-US'</span><span class="p">,</span>
             <span class="s">'Content-Type'</span><span class="p">:</span> <span class="s">'application/octet-stream'</span><span class="p">,</span>
             <span class="s">'Custom-Header'</span><span class="p">:</span> <span class="s">'custom header content'</span>
            <span class="p">}</span>
        <span class="p">},</span>
        <span class="p">{</span>
          <span class="s">'key'</span><span class="p">:</span> <span class="s">'cookies'</span><span class="p">,</span>
          <span class="s">'value'</span><span class="p">:</span> <span class="p">[{</span>
              <span class="s">'key'</span><span class="p">:</span> <span class="s">'NID'</span><span class="p">,</span>
             <span class="s">'value'</span><span class="p">:</span> <span class="s">'1234567890'</span>
           <span class="p">},</span>
           <span class="p">{</span>
              <span class="s">'key'</span><span class="p">:</span> <span class="s">'1P_JAR'</span><span class="p">,</span>
             <span class="s">'value'</span><span class="p">:</span> <span class="s">'0987654321'</span>
           <span class="p">}</span>
         <span class="p">]</span>
        <span class="p">},</span>
        <span class="p">{</span>
          <span class="s">'key'</span><span class="p">:</span> <span class="s">'follow_redirects'</span><span class="p">,</span>
          <span class="s">'value'</span><span class="p">:</span> <span class="n">true</span>
        <span class="p">},</span>
        <span class="p">{</span>
          <span class="s">'key'</span><span class="p">:</span> <span class="s">'successful_status_codes'</span><span class="p">,</span>
          <span class="s">'value'</span><span class="p">:</span> <span class="p">[</span><span class="mi">303</span><span class="p">,</span> <span class="mi">808</span><span class="p">,</span> <span class="mi">909</span><span class="p">]</span>
        <span class="p">},</span>
        <span class="p">{</span>
          <span class="s">'key'</span><span class="p">:</span> <span class="s">'http_method'</span><span class="p">,</span>
          <span class="s">'value'</span><span class="p">:</span> <span class="s">'get'</span>
        <span class="p">}</span>
        <span class="p">{</span>
          <span class="s">'key'</span><span class="p">:</span> <span class="s">'content'</span>
          <span class="s">'value'</span><span class="p">:</span> <span class="s">'base64EncodedPOSTBody'</span>
        <span class="p">}</span>
    <span class="p">],</span>
    <span class="s">'callback_url'</span><span class="p">:</span> <span class="s">'https://your.callback.url'</span><span class="p">,</span>
<span class="p">}</span>

<span class="c"># Get response.</span>
<span class="n">response</span> <span class="o">=</span> <span class="n">requests</span><span class="o">.</span><span class="n">request</span><span class="p">(</span>
    <span class="s">'POST'</span><span class="p">,</span>
    <span class="s">'https://data.oxylabs.io/v1/queries'</span><span class="p">,</span>
    <span class="n">auth</span><span class="o">=</span><span class="p">(</span><span class="s">'user'</span><span class="p">,</span> <span class="s">'pass1'</span><span class="p">),</span>
    <span class="n">json</span><span class="o">=</span><span class="n">payload</span><span class="p">,</span>
<span class="p">)</span>

<span class="c"># Print prettified response to stdout.</span>
<span class="n">pprint</span><span class="p">(</span><span class="n">response</span><span class="o">.</span><span class="n">json</span><span class="p">())</span></code></pre>
</div>
<div class="su-tabs-pane su-u-clearfix su-u-trim" data-title="&lt;strong&gt;PHP&lt;/strong&gt;">
<pre class="highlight php tab-php"><code><span class="cp">&lt;?php</span>

<span class="nv">$params</span> <span class="o">=</span> <span class="p">[</span>
    <span class="s1">'source'</span> <span class="o">=&gt;</span> <span class="s1">'universal'</span><span class="p">,</span>
    <span class="s1">'url'</span> <span class="o">=&gt;</span> <span class="s1">'https://stackoverflow.com/questions/tagged/python'</span><span class="p">,</span>
    <span class="s1">'context'</span> <span class="o">=&gt;</span> <span class="p">[</span>
        <span class="p">[</span>
            <span class="s1">'key'</span> <span class="o">=&gt;</span> <span class="s1">'session_id'</span><span class="p">,</span>
            <span class="s1">'value'</span> <span class="o">=&gt;</span> <span class="s1">'1234567890abcdef'</span>
        <span class="p">],</span>
        <span class="p">[</span>
            <span class="s1">'key'</span> <span class="o">=&gt;</span> <span class="s1">'headers'</span><span class="p">,</span>
            <span class="s1">'value'</span> <span class="o">=&gt;</span> <span class="p">[</span>
                <span class="s1">'Accept-Language'</span> <span class="o">=&gt;</span> <span class="s1">'en-US'</span><span class="p">,</span>
                <span class="s1">'Content-Type'</span> <span class="o">=&gt;</span> <span class="s1">'application/octet-stream'</span><span class="p">,</span>
                <span class="s1">'Custom-Header'</span> <span class="o">=&gt;</span> <span class="s1">'custom header content'</span>
            <span class="p">],</span>
        <span class="p">],</span>
        <span class="p">[</span>
            <span class="s1">'key'</span> <span class="o">=&gt;</span> <span class="s1">'cookies'</span><span class="p">,</span>
            <span class="s1">'value'</span> <span class="o">=&gt;</span> <span class="p">[</span>
                <span class="p">[</span><span class="s1">'key'</span> <span class="o">=&gt;</span> <span class="s1">'NID'</span><span class="p">,</span> <span class="s1">'value'</span> <span class="o">=&gt;</span> <span class="s1">'1234567890'</span><span class="p">],</span>
                <span class="p">[</span><span class="s1">'key'</span> <span class="o">=&gt;</span> <span class="s1">'1P_JAR'</span><span class="p">,</span> <span class="s1">'value'</span> <span class="o">=&gt;</span> <span class="s1">'0987654321'</span><span class="p">]</span>
            <span class="p">]</span>
        <span class="p">],</span>
        <span class="p">[</span>
            <span class="s1">'key'</span> <span class="o">=&gt;</span> <span class="s1">'follow_redirects'</span><span class="p">,</span>
            <span class="s1">'value'</span> <span class="o">=&gt;</span> <span class="s1">'true'</span>
        <span class="p">],</span>
        <span class="p">[</span>
            <span class="s1">'key'</span> <span class="o">=&gt;</span> <span class="s1">'successful_status_codes'</span><span class="p">,</span>
            <span class="s1">'value'</span> <span class="o">=&gt;</span> <span class="p">[</span><span class="mi">303</span><span class="p">,</span> <span class="mi">808</span><span class="p">,</span> <span class="mi">909</span><span class="p">]</span>
        <span class="p">],</span>
        <span class="p">[</span>
            <span class="s1">'key'</span> <span class="o">=&gt;</span> <span class="s1">'http_method'</span><span class="p">,</span>
            <span class="s1">'value'</span> <span class="o">=&gt;</span> <span class="s1">'get'</span>
        <span class="p">],</span>
        <span class="p">[</span>
            <span class="s1">'key'</span> <span class="o">=&gt;</span> <span class="s1">'content'</span><span class="p">,</span>
            <span class="s1">'value'</span> <span class="o">=&gt;</span> <span class="s1">'base64EncodedPOSTBody'</span>
        <span class="p">]</span>
    <span class="p">]</span>
<span class="p">];</span>

<span class="nv">$ch</span> <span class="o">=</span> <span class="nb">curl_init</span><span class="p">();</span>

<span class="nb">curl_setopt</span><span class="p">(</span><span class="nv">$ch</span><span class="p">,</span> <span class="nx">CURLOPT_URL</span><span class="p">,</span> <span class="s2">"https://data.oxylabs.io/v1/queries"</span><span class="p">);</span>
<span class="nb">curl_setopt</span><span class="p">(</span><span class="nv">$ch</span><span class="p">,</span> <span class="nx">CURLOPT_RETURNTRANSFER</span><span class="p">,</span> <span class="mi">1</span><span class="p">);</span>
<span class="nb">curl_setopt</span><span class="p">(</span><span class="nv">$ch</span><span class="p">,</span> <span class="nx">CURLOPT_POSTFIELDS</span><span class="p">,</span> <span class="nb">json_encode</span><span class="p">(</span><span class="nv">$params</span><span class="p">));</span>
<span class="nb">curl_setopt</span><span class="p">(</span><span class="nv">$ch</span><span class="p">,</span> <span class="nx">CURLOPT_POST</span><span class="p">,</span> <span class="mi">1</span><span class="p">);</span>
<span class="nb">curl_setopt</span><span class="p">(</span><span class="nv">$ch</span><span class="p">,</span> <span class="nx">CURLOPT_USERPWD</span><span class="p">,</span> <span class="s2">"user"</span> <span class="o">.</span> <span class="s2">":"</span> <span class="o">.</span> <span class="s2">"pass1"</span><span class="p">);</span>

<span class="nv">$headers</span> <span class="o">=</span> <span class="k">array</span><span class="p">();</span>
<span class="nv">$headers</span><span class="p">[]</span> <span class="o">=</span> <span class="s2">"Content-Type: application/json"</span><span class="p">;</span>
<span class="nb">curl_setopt</span><span class="p">(</span><span class="nv">$ch</span><span class="p">,</span> <span class="nx">CURLOPT_HTTPHEADER</span><span class="p">,</span> <span class="nv">$headers</span><span class="p">);</span>

<span class="nv">$result</span> <span class="o">=</span> <span class="nb">curl_exec</span><span class="p">(</span><span class="nv">$ch</span><span class="p">);</span>
<span class="k">echo</span> <span class="nv">$result</span><span class="p">;</span>

<span class="k">if</span> <span class="p">(</span><span class="nb">curl_errno</span><span class="p">(</span><span class="nv">$ch</span><span class="p">))</span> <span class="p">{</span>
    <span class="k">echo</span> <span class="s1">'Error:'</span> <span class="o">.</span> <span class="nb">curl_error</span><span class="p">(</span><span class="nv">$ch</span><span class="p">);</span>
<span class="p">}</span>
<span class="nb">curl_close</span> <span class="p">(</span><span class="nv">$ch</span><span class="p">);</span>
<span class="cp">?&gt;</span></code></pre>
</div>
<div class="su-tabs-pane su-u-clearfix su-u-trim" data-title="&lt;strong&gt;HTTP&lt;/strong&gt;">
<pre class="highlight http tab-http"><code><span class="err">HTTP method is currently not supported with Push-Pull</span></code></pre>
</div></div></div>
<p>Here is the same example in Realtime:</p>
<div class="su-tabs su-tabs-style-default su-tabs-mobile-stack" data-active="4" data-scroll-offset="0" data-anchor-in-url="no"><div class="su-tabs-nav"><span class="" data-url="" data-target="blank" tabindex="0" role="button"><strong>cURL</strong></span><span class="" data-url="" data-target="blank" tabindex="0" role="button"><strong>Python</strong></span><span class="" data-url="" data-target="blank" tabindex="0" role="button"><strong>PHP</strong></span><span class="" data-url="" data-target="blank" tabindex="0" role="button"><strong>HTTP</strong></span></div><div class="su-tabs-panes"><div class="su-tabs-pane su-u-clearfix su-u-trim" data-title="&lt;strong&gt;cURL&lt;/strong&gt;">
<pre class="highlight shell tab-shell"><code>curl --user user:pass1 <span class="se">\</span>
<span class="s1">'https://data.oxylabs.io/v1/queries'</span> <span class="se">\</span>
-H <span class="s2">"Content-Type: application/json"</span> <span class="se">\</span>
-d <span class="s1">'{"source": "universal", "url": "https://stackoverflow.com/questions/tagged/python", "user_agent_type": "mobile", "context": [{"key": "headers", "value": ["Accept-Language": "en-US", "Content-Type": "application/octet-stream", "Custom-Header": "custom header content"]}, {"key": "cookies", "value": [{"key": "NID", "value": "1234567890"}, {"key": "1P JAR", "value": "0987654321"}, {"key": "follow_redirects", "value": true}, {"key": "http_method", "value": "get"}, {"key": "content", "value": "base64EncodedPOSTBody"}, {"key": "successful_status_codes", "value": [303, 808, 909]}]}]}'</span></code></pre>
</div>
<div class="su-tabs-pane su-u-clearfix su-u-trim" data-title="&lt;strong&gt;Python&lt;/strong&gt;">
<pre class="highlight python tab-python"><code><span class="kn">import</span> <span class="nn">requests</span>
<span class="kn">from</span> <span class="nn">pprint</span> <span class="kn">import</span> <span class="n">pprint</span>

<span class="c"># Structure payload.</span>
<span class="n">payload</span> <span class="o">=</span> <span class="p">{</span>
    <span class="s">'source'</span><span class="p">:</span> <span class="s">'universal'</span><span class="p">,</span>
    <span class="s">'url'</span><span class="p">:</span> <span class="s">'https://stackoverflow.com/questions/tagged/python'</span><span class="p">,</span>
    <span class="s">'user_agent_type'</span><span class="p">:</span> <span class="s">'mobile'</span><span class="p">,</span>
    <span class="s">'geo_location'</span><span class="p">:</span> <span class="s">'United States'</span><span class="p">,</span>
    <span class="s">'context'</span><span class="p">:</span> <span class="p">[</span>
        <span class="p">{</span>
          <span class="s">'key'</span><span class="p">:</span> <span class="s">'session_id'</span><span class="p">,</span>
          <span class="s">'value'</span><span class="p">:</span> <span class="s">'1234567890abcdef'</span>
        <span class="p">}</span>
        <span class="p">{</span>
          <span class="s">'key'</span><span class="p">:</span> <span class="s">'headers'</span><span class="p">,</span> <span class="s">'value'</span><span class="p">:</span> 
            <span class="p">{</span>
             <span class="s">'Accept-Language'</span><span class="p">:</span> <span class="s">'en-US'</span><span class="p">,</span>
             <span class="s">'Content-Type'</span><span class="p">:</span> <span class="s">'application/octet-stream'</span><span class="p">,</span>
             <span class="s">'Custom-Header'</span><span class="p">:</span> <span class="s">'custom header content'</span>
            <span class="p">}</span>
        <span class="p">},</span>
        <span class="p">{</span>
          <span class="s">'key'</span><span class="p">:</span> <span class="s">'cookies'</span><span class="p">,</span>
          <span class="s">'value'</span><span class="p">:</span> <span class="p">[{</span>
              <span class="s">'key'</span><span class="p">:</span> <span class="s">'NID'</span><span class="p">,</span>
             <span class="s">'value'</span><span class="p">:</span> <span class="s">'1234567890'</span>
           <span class="p">},</span>
           <span class="p">{</span>
              <span class="s">'key'</span><span class="p">:</span> <span class="s">'1P_JAR'</span><span class="p">,</span>
             <span class="s">'value'</span><span class="p">:</span> <span class="s">'0987654321'</span>
           <span class="p">}</span>
         <span class="p">]</span>
        <span class="p">},</span>
        <span class="p">{</span>
          <span class="s">'key'</span><span class="p">:</span> <span class="s">'follow_redirects'</span><span class="p">,</span>
          <span class="s">'value'</span><span class="p">:</span> <span class="n">true</span>
        <span class="p">},</span>
        <span class="p">{</span>
          <span class="s">'key'</span><span class="p">:</span> <span class="s">'successful_status_codes'</span><span class="p">,</span>
          <span class="s">'value'</span><span class="p">:</span> <span class="p">[</span><span class="mi">303</span><span class="p">,</span> <span class="mi">808</span><span class="p">,</span> <span class="mi">909</span><span class="p">]</span>
        <span class="p">},</span>
        <span class="p">{</span>
          <span class="s">'key'</span><span class="p">:</span> <span class="s">'http_method'</span><span class="p">,</span>
          <span class="s">'value'</span><span class="p">:</span> <span class="s">'get'</span>
        <span class="p">}</span>
        <span class="p">{</span>
          <span class="s">'key'</span><span class="p">:</span> <span class="s">'content'</span>
          <span class="s">'value'</span><span class="p">:</span> <span class="s">'base64EncodedPOSTBody'</span>
        <span class="p">}</span>
    <span class="p">],</span>
<span class="p">}</span>

<span class="c"># Get response.</span>
<span class="n">response</span> <span class="o">=</span> <span class="n">requests</span><span class="o">.</span><span class="n">request</span><span class="p">(</span>
    <span class="s">'POST'</span><span class="p">,</span>
    <span class="s">'https://realtime.oxylabs.io/v1/queries'</span><span class="p">,</span>
    <span class="n">auth</span><span class="o">=</span><span class="p">(</span><span class="s">'user'</span><span class="p">,</span> <span class="s">'pass1'</span><span class="p">),</span>
    <span class="n">json</span><span class="o">=</span><span class="n">payload</span><span class="p">,</span>
<span class="p">)</span>

<span class="c"># Instead of response with job status and results url, this will return the</span>
<span class="c"># JSON response with the result.</span>
<span class="n">pprint</span><span class="p">(</span><span class="n">response</span><span class="o">.</span><span class="n">json</span><span class="p">())</span></code></pre>
</div>
<div class="su-tabs-pane su-u-clearfix su-u-trim" data-title="&lt;strong&gt;PHP&lt;/strong&gt;">
<pre class="highlight php tab-php"><code><span class="cp">&lt;?php</span>

<span class="nv">$params</span> <span class="o">=</span> <span class="p">[</span>
    <span class="s1">'source'</span> <span class="o">=&gt;</span> <span class="s1">'universal'</span><span class="p">,</span>
    <span class="s1">'url'</span> <span class="o">=&gt;</span> <span class="s1">'https://stackoverflow.com/questions/tagged/python'</span><span class="p">,</span>
    <span class="s1">'context'</span> <span class="o">=&gt;</span> <span class="p">[</span>
        <span class="p">[</span>
            <span class="s1">'key'</span> <span class="o">=&gt;</span> <span class="s1">'session_id'</span><span class="p">,</span>
            <span class="s1">'value'</span> <span class="o">=&gt;</span> <span class="s1">'1234567890abcdef'</span>
        <span class="p">],</span>
        <span class="p">[</span>
            <span class="s1">'key'</span> <span class="o">=&gt;</span> <span class="s1">'headers'</span><span class="p">,</span>
            <span class="s1">'value'</span> <span class="o">=&gt;</span> <span class="p">[</span>
                <span class="s1">'Accept-Language'</span> <span class="o">=&gt;</span> <span class="s1">'en-US'</span><span class="p">,</span>
                <span class="s1">'Content-Type'</span> <span class="o">=&gt;</span> <span class="s1">'application/octet-stream'</span><span class="p">,</span>
                <span class="s1">'Custom-Header'</span> <span class="o">=&gt;</span> <span class="s1">'custom header content'</span>
            <span class="p">],</span>
        <span class="p">],</span>
        <span class="p">[</span>
            <span class="s1">'key'</span> <span class="o">=&gt;</span> <span class="s1">'cookies'</span><span class="p">,</span>
            <span class="s1">'value'</span> <span class="o">=&gt;</span> <span class="p">[</span>
                <span class="p">[</span><span class="s1">'key'</span> <span class="o">=&gt;</span> <span class="s1">'NID'</span><span class="p">,</span> <span class="s1">'value'</span> <span class="o">=&gt;</span> <span class="s1">'1234567890'</span><span class="p">],</span>
                <span class="p">[</span><span class="s1">'key'</span> <span class="o">=&gt;</span> <span class="s1">'1P_JAR'</span><span class="p">,</span> <span class="s1">'value'</span> <span class="o">=&gt;</span> <span class="s1">'0987654321'</span><span class="p">]</span>
            <span class="p">]</span>
        <span class="p">],</span>
        <span class="p">[</span>
            <span class="s1">'key'</span> <span class="o">=&gt;</span> <span class="s1">'follow_redirects'</span><span class="p">,</span>
            <span class="s1">'value'</span> <span class="o">=&gt;</span> <span class="s1">'true'</span>
        <span class="p">],</span>
        <span class="p">[</span>
            <span class="s1">'key'</span> <span class="o">=&gt;</span> <span class="s1">'successful_status_codes'</span><span class="p">,</span>
            <span class="s1">'value'</span> <span class="o">=&gt;</span> <span class="p">[</span><span class="mi">303</span><span class="p">,</span> <span class="mi">808</span><span class="p">,</span> <span class="mi">909</span><span class="p">]</span>
        <span class="p">],</span>
        <span class="p">[</span>
            <span class="s1">'key'</span> <span class="o">=&gt;</span> <span class="s1">'http_method'</span><span class="p">,</span>
            <span class="s1">'value'</span> <span class="o">=&gt;</span> <span class="s1">'get'</span>
        <span class="p">],</span>
        <span class="p">[</span>
            <span class="s1">'key'</span> <span class="o">=&gt;</span> <span class="s1">'content'</span><span class="p">,</span>
            <span class="s1">'value'</span> <span class="o">=&gt;</span> <span class="s1">'base64EncodedPOSTBody'</span>
        <span class="p">]</span>
    <span class="p">]</span>
<span class="p">];</span>

<span class="nv">$ch</span> <span class="o">=</span> <span class="nb">curl_init</span><span class="p">();</span>

<span class="nb">curl_setopt</span><span class="p">(</span><span class="nv">$ch</span><span class="p">,</span> <span class="nx">CURLOPT_URL</span><span class="p">,</span> <span class="s2">"https://data.oxylabs.io/v1/queries"</span><span class="p">);</span>
<span class="nb">curl_setopt</span><span class="p">(</span><span class="nv">$ch</span><span class="p">,</span> <span class="nx">CURLOPT_RETURNTRANSFER</span><span class="p">,</span> <span class="mi">1</span><span class="p">);</span>
<span class="nb">curl_setopt</span><span class="p">(</span><span class="nv">$ch</span><span class="p">,</span> <span class="nx">CURLOPT_POSTFIELDS</span><span class="p">,</span> <span class="nb">json_encode</span><span class="p">(</span><span class="nv">$params</span><span class="p">));</span>
<span class="nb">curl_setopt</span><span class="p">(</span><span class="nv">$ch</span><span class="p">,</span> <span class="nx">CURLOPT_POST</span><span class="p">,</span> <span class="mi">1</span><span class="p">);</span>
<span class="nb">curl_setopt</span><span class="p">(</span><span class="nv">$ch</span><span class="p">,</span> <span class="nx">CURLOPT_USERPWD</span><span class="p">,</span> <span class="s2">"user"</span> <span class="o">.</span> <span class="s2">":"</span> <span class="o">.</span> <span class="s2">"pass1"</span><span class="p">);</span>

<span class="nv">$headers</span> <span class="o">=</span> <span class="k">array</span><span class="p">();</span>
<span class="nv">$headers</span><span class="p">[]</span> <span class="o">=</span> <span class="s2">"Content-Type: application/json"</span><span class="p">;</span>
<span class="nb">curl_setopt</span><span class="p">(</span><span class="nv">$ch</span><span class="p">,</span> <span class="nx">CURLOPT_HTTPHEADER</span><span class="p">,</span> <span class="nv">$headers</span><span class="p">);</span>

<span class="nv">$result</span> <span class="o">=</span> <span class="nb">curl_exec</span><span class="p">(</span><span class="nv">$ch</span><span class="p">);</span>
<span class="k">echo</span> <span class="nv">$result</span><span class="p">;</span>

<span class="k">if</span> <span class="p">(</span><span class="nb">curl_errno</span><span class="p">(</span><span class="nv">$ch</span><span class="p">))</span> <span class="p">{</span>
    <span class="k">echo</span> <span class="s1">'Error:'</span> <span class="o">.</span> <span class="nb">curl_error</span><span class="p">(</span><span class="nv">$ch</span><span class="p">);</span>
<span class="p">}</span>
<span class="nb">curl_close</span> <span class="p">(</span><span class="nv">$ch</span><span class="p">);</span>
<span class="cp">?&gt;</span></code></pre>
</div>
<div class="su-tabs-pane su-u-clearfix su-u-trim" data-title="&lt;strong&gt;HTTP&lt;/strong&gt;">
<pre class="highlight http tab-http"><code><span class="err"># The whole string you submit has to be URL-encoded.

https://realtime.oxylabs.io/v1/queries?source=universal&url=https%3A%2F%2Fstackoverflow.com%2Fquestions%2Ftagged%2Fpython&access_token=12345abcde</span></code></pre>
</div></div></div>
<p>And via SuperAPI:</p>
<div class="su-tabs su-tabs-style-default su-tabs-mobile-stack" data-active="4" data-scroll-offset="0" data-anchor-in-url="no"><div class="su-tabs-nav"><span class="" data-url="" data-target="blank" tabindex="0" role="button"><strong>cURL</strong></span><span class="" data-url="" data-target="blank" tabindex="0" role="button"><strong>Python</strong></span><span class="" data-url="" data-target="blank" tabindex="0" role="button"><strong>PHP</strong></span><span class="" data-url="" data-target="blank" tabindex="0" role="button"><strong>HTTP</strong></span></div><div class="su-tabs-panes"><div class="su-tabs-pane su-u-clearfix su-u-trim" data-title="&lt;strong&gt;cURL&lt;/strong&gt;">
<pre class="highlight shell tab-shell"><code><span class="c"># A GET request could look something like this:</span>
curl -k <span class="se">\</span>
-x http://realtime.oxylabs.io:60000 <span class="se">\</span>
-U user:pass1 <span class="se">\</span>
<span class="s2">"https://stackoverflow.com/questions/tagged/python"</span> <span class="se">\</span>
-H <span class="s2">"X-OxySERPs-Session-Id: 1234567890abcdef"</span> <span class="se">\</span>
-H <span class="s2">"X-OxySERPs-Geo-Location: India"</span> <span class="se">\</span>
-H <span class="s2">"Accept-Language: en-US"</span> <span class="se">\</span>
-H <span class="s2">"Content-Type: application/octet-stream"</span> <span class="se">\</span>
-H <span class="s2">"Custom-Header: custom header content"</span> <span class="se">\</span>
-H <span class="s2">"Cookie: NID=1234567890; 1P_JAR=0987654321"</span> <span class="se">\</span>
-H <span class="s2">"X-Status-Code: 303, 808, 909"</span>

<span class="c"># A POST request would have the same structure but contain a parameter specifying that it is a POST request:</span>
curl -X POST <span class="se">\</span>
-k <span class="se">\</span>
-x http://realtime.oxylabs.io:60000 <span class="se">\</span>
-U user:pass1 <span class="s2">"https://stackoverflow.com/questions/tagged/python"</span> <span class="se">\</span>
-H <span class="s2">"X-OxySERPs-Session-Id: 1234567890abcdef"</span> <span class="se">\</span>
-H <span class="s2">"X-OxySERPs-Geo-Location: India"</span> <span class="se">\</span>
-H <span class="s2">"Custom-Header: custom header content"</span> <span class="se">\</span>
-H <span class="s2">"Cookie: NID=1234567890; 1P_JAR=0987654321"</span> <span class="se">\</span>
-H <span class="s2">"X-Status-Code: 303, 808, 909"</span></code></pre>
</div>
<div class="su-tabs-pane su-u-clearfix su-u-trim" data-title="&lt;strong&gt;Python&lt;/strong&gt;">
<pre class="highlight python tab-python"><code><span class="kn">import</span> <span class="nn">requests</span>
<span class="kn">from</span> <span class="nn">pprint</span> <span class="kn">import</span> <span class="n">pprint</span>

<span class="c"># Define proxy dict. Do not forget to put your real user and pass here as well.</span>
<span class="n">proxies</span> <span class="o">=</span> <span class="p">{</span>
  <span class="s">'http'</span><span class="p">:</span> <span class="s">'http://user:pass1@realtime.oxylabs.io:60000'</span><span class="p">,</span>
  <span class="s">'https'</span><span class="p">:</span> <span class="s">'https://user:pass1@realtime.oxylabs.io:60000'</span><span class="p">,</span>
<span class="p">}</span>

<span class="n">response</span> <span class="o">=</span> <span class="n">requests</span><span class="o">.</span><span class="n">request</span><span class="p">(</span>
    <span class="s">'GET'</span><span class="p">,</span>
    <span class="s">'https://stackoverflow.com/questions/tagged/python'</span><span class="p">,</span>
    <span class="n">auth</span><span class="o">=</span><span class="p">(</span><span class="s">'user'</span><span class="p">,</span> <span class="s">'pass1'</span><span class="p">),</span>
    <span class="n">verify</span><span class="o">=</span><span class="bp">False</span><span class="p">,</span>  <span class="c"># Or accept our certificate.</span>
    <span class="n">proxies</span><span class="o">=</span><span class="n">proxies</span><span class="p">,</span>
<span class="p">)</span>

<span class="c"># Print result page to stdout</span>
<span class="n">pprint</span><span class="p">(</span><span class="n">response</span><span class="o">.</span><span class="n">text</span><span class="p">)</span>

<span class="c"># Save returned HTML to result.html file</span>
<span class="k">with</span> <span class="nb">open</span><span class="p">(</span><span class="s">'result.html'</span><span class="p">,</span> <span class="s">'w'</span><span class="p">)</span> <span class="k">as</span> <span class="n">f</span><span class="p">:</span>
    <span class="n">f</span><span class="o">.</span><span class="n">write</span><span class="p">(</span><span class="n">response</span><span class="o">.</span><span class="n">text</span><span class="p">)</span></code></pre>
</div>
<div class="su-tabs-pane su-u-clearfix su-u-trim" data-title="&lt;strong&gt;PHP&lt;/strong&gt;">
<pre class="highlight php tab-php"><code><span class="cp">&lt;?php</span>
<span class="nv">$ch</span> <span class="o">=</span> <span class="nb">curl_init</span><span class="p">();</span>

<span class="nb">curl_setopt</span><span class="p">(</span><span class="nv">$ch</span><span class="p">,</span> <span class="nx">CURLOPT_URL</span><span class="p">,</span> <span class="s2">"https://stackoverflow.com/questions/tagged/python"</span><span class="p">);</span>
<span class="nb">curl_setopt</span><span class="p">(</span><span class="nv">$ch</span><span class="p">,</span> <span class="nx">CURLOPT_RETURNTRANSFER</span><span class="p">,</span> <span class="mi">1</span><span class="p">);</span>
<span class="nb">curl_setopt</span><span class="p">(</span><span class="nv">$ch</span><span class="p">,</span> <span class="nx">CURLOPT_PROXY</span><span class="p">,</span> <span class="s1">'realtime.oxylabs.io:60000'</span><span class="p">);</span>
<span class="nb">curl_setopt</span><span class="p">(</span><span class="nv">$ch</span><span class="p">,</span> <span class="nx">CURLOPT_PROXYUSERPWD</span><span class="p">,</span> <span class="s2">"user"</span> <span class="o">.</span> <span class="s2">":"</span> <span class="o">.</span> <span class="s2">"pass1"</span><span class="p">);</span>
<span class="nb">curl_setopt</span><span class="p">(</span><span class="nv">$ch</span><span class="p">,</span> <span class="nx">CURLOPT_SSL_VERIFYPEER</span><span class="p">,</span> <span class="kc">false</span><span class="p">);</span>
<span class="nb">curl_setopt</span><span class="p">(</span><span class="nv">$ch</span><span class="p">,</span> <span class="nx">CURLOPT_SSL_VERIFYHOST</span><span class="p">,</span> <span class="kc">false</span><span class="p">);</span>

<span class="nv">$result</span> <span class="o">=</span> <span class="nb">curl_exec</span><span class="p">(</span><span class="nv">$ch</span><span class="p">);</span>
<span class="k">echo</span> <span class="nv">$result</span><span class="p">;</span>

<span class="k">if</span> <span class="p">(</span><span class="nb">curl_errno</span><span class="p">(</span><span class="nv">$ch</span><span class="p">))</span> <span class="p">{</span>
    <span class="k">echo</span> <span class="s1">'Error:'</span> <span class="o">.</span> <span class="nb">curl_error</span><span class="p">(</span><span class="nv">$ch</span><span class="p">);</span>
<span class="p">}</span>
<span class="nb">curl_close</span> <span class="p">(</span><span class="nv">$ch</span><span class="p">);</span>
<span class="cp">?&gt;</span></code></pre>
</div>
<div class="su-tabs-pane su-u-clearfix su-u-trim" data-title="&lt;strong&gt;HTTP&lt;/strong&gt;">
<pre class="highlight http tab-http"><code><span class="err">HTTP method is not supported with SuperAPI</span></code></pre>
</div></div></div>
<hr />
<h2 id="parameter-values">Parameter Values</h2>
<h3 id="geo_location">Geo_Location</h3>
<p>Full list of supported geo locations can be found in CSV format <a class="custom_link" href="https://developers.oxylabs.io/resources/universal-supported-geo_location-values.csv" target="_blank" rel="noopener">here</a>.</p>
<pre class="highlight json tab-json"><code><span class="s2">"United Arab Emirates"</span><span class="p">,</span>
<span class="s2">"Albania"</span><span class="p">,</span>
<span class="s2">"Armenia"</span><span class="p">,</span>
<span class="s2">"Angola"</span><span class="p">,</span>
<span class="s2">"Argentina"</span><span class="p">,</span>
<span class="s2">"Australia"</span><span class="p">,</span>
<span class="err">...</span>
<span class="s2">"Uruguay"</span><span class="p">,</span>
<span class="s2">"Uzbekistan"</span><span class="p">,</span>
<span class="s2">"Venezuela Bolivarian Republic of"</span><span class="p">,</span>
<span class="s2">"Viet Nam"</span><span class="p">,</span>
<span class="s2">"South Africa"</span><span class="p">,</span>
<span class="s2">"Zimbabwe"</span></code></pre>
<hr />
<h3 id="http_method">HTTP_Method</h3>
<p>Universal Crawler supports two HTTP(S) methods: <code>GET</code> (default) and <code>POST</code>.</p>
<pre class="highlight json tab-json"><code><span class="s2">"GET"</span><span class="p">,</span>
<span class="s2">"POST"</span></code></pre>
<hr />
<h3 id="render">Render</h3>
<p>Universal Crawler can render Javascript and return either a rendered HTML document or a PNG screenshot of the web page.</p>
<pre class="highlight json tab-json"><code><span class="s2">"html"</span><span class="p">,</span>
<span class="s2">"png"</span></code></pre>
<hr />
<h3 id="user_agent_type">User_Agent_Type</h3>
<p>Download full list of <code>user_agent_type</code> values in JSON <a class="custom_link" href="https://developers.oxylabs.io/resources/user_agent_type.json" target="_blank" rel="noopener">here</a>.</p>
<pre class="highlight json tab-json"><code><span class="p">[</span>
  <span class="p">{</span>
    <span class="s2">"user_agent_type"</span><span class="p">:</span> <span class="s2">"desktop"</span><span class="p">,</span>
    <span class="s2">"description"</span><span class="p">:</span> <span class="s2">"Random desktop browser User-Agent"</span>
  <span class="p">},</span>
  <span class="p">{</span>
    <span class="s2">"user_agent_type"</span><span class="p">:</span> <span class="s2">"desktop_firefox"</span><span class="p">,</span>
    <span class="s2">"description"</span><span class="p">:</span> <span class="s2">"Random User-Agent of one of the latest versions of desktop Firefox"</span>
  <span class="p">},</span>
  <span class="p">{</span>
    <span class="s2">"user_agent_type"</span><span class="p">:</span> <span class="s2">"desktop_chrome"</span><span class="p">,</span>
    <span class="s2">"description"</span><span class="p">:</span> <span class="s2">"Random User-Agent of one of the latest versions of desktop Chrome"</span>
  <span class="p">},</span>
  <span class="p">{</span>
    <span class="s2">"user_agent_type"</span><span class="p">:</span> <span class="s2">"desktop_opera"</span><span class="p">,</span>
    <span class="s2">"description"</span><span class="p">:</span> <span class="s2">"Random User-Agent of one of the latest versions of desktop Opera"</span>
  <span class="p">},</span>
  <span class="p">{</span>
    <span class="s2">"user_agent_type"</span><span class="p">:</span> <span class="s2">"desktop_edge"</span><span class="p">,</span>
    <span class="s2">"description"</span><span class="p">:</span> <span class="s2">"Random User-Agent of one of the latest versions of desktop Edge"</span>
  <span class="p">},</span>
  <span class="p">{</span>
    <span class="s2">"user_agent_type"</span><span class="p">:</span> <span class="s2">"desktop_safari"</span><span class="p">,</span>
    <span class="s2">"description"</span><span class="p">:</span> <span class="s2">"Random User-Agent of one of the latest versions of desktop Safari"</span>
  <span class="p">},</span>
  <span class="p">{</span>
    <span class="s2">"user_agent_type"</span><span class="p">:</span> <span class="s2">"mobile"</span><span class="p">,</span>
    <span class="s2">"description"</span><span class="p">:</span> <span class="s2">"Random mobile browser User-Agent"</span>
  <span class="p">},</span>
  <span class="p">{</span>
    <span class="s2">"user_agent_type"</span><span class="p">:</span> <span class="s2">"mobile_android"</span><span class="p">,</span>
    <span class="s2">"description"</span><span class="p">:</span> <span class="s2">"Random User-Agent of one of the latest versions of Android browser"</span>
  <span class="p">},</span>
  <span class="p">{</span>
    <span class="s2">"user_agent_type"</span><span class="p">:</span> <span class="s2">"mobile_ios"</span><span class="p">,</span>
    <span class="s2">"description"</span><span class="p">:</span> <span class="s2">"Random User-Agent of one of the latest versions of iPhone browser"</span>
  <span class="p">},</span>
  <span class="p">{</span>
    <span class="s2">"user_agent_type"</span><span class="p">:</span> <span class="s2">"tablet"</span><span class="p">,</span>
    <span class="s2">"description"</span><span class="p">:</span> <span class="s2">"Random tablet browser User-Agent"</span>
  <span class="p">},</span>
  <span class="p">{</span>
    <span class="s2">"user_agent_type"</span><span class="p">:</span> <span class="s2">"tablet_android"</span><span class="p">,</span>
    <span class="s2">"description"</span><span class="p">:</span> <span class="s2">"Random User-Agent of one of the latest versions of Android tablet"</span>
  <span class="p">},</span>
  <span class="p">{</span>
    <span class="s2">"user_agent_type"</span><span class="p">:</span> <span class="s2">"tablet_ios"</span><span class="p">,</span>
    <span class="s2">"description"</span><span class="p">:</span> <span class="s2">"Random User-Agent of one of the latest versions of iPad tablet"</span>
  <span class="p">}</span>
<span class="p">]</span></code></pre>
<hr />
<h2 id="account-status">Account Status</h2>
<h3 id="usage-statistics">Usage Statistics</h3>
<p>You can find your usage statistics by querying the following endpoint:</p>
<div class="endpoint">
<pre><strong>GET https://data.oxylabs.io/v2/stats</strong></pre>
</div>
<p>By default, the API will return all-time usage statistics. Adding <code>?group_by=month</code> will return monthly stats, while <code>?group_by=day</code> will return daily numbers.</p>
<p>This query will return all-time statistics. You can find your daily and monthly usage by adding either <code>?group_by=day</code> or <code>?group_by=month</code></p>
<div class="su-tabs su-tabs-style-default su-tabs-mobile-stack" data-active="3" data-scroll-offset="0" data-anchor-in-url="no"><div class="su-tabs-nav"><span class="" data-url="" data-target="blank" tabindex="0" role="button"><strong>cURL</strong></span><span class="" data-url="" data-target="blank" tabindex="0" role="button"><strong>Python</strong></span><span class="" data-url="" data-target="blank" tabindex="0" role="button"><strong>PHP</strong></span></div><div class="su-tabs-panes"><div class="su-tabs-pane su-u-clearfix su-u-trim" data-title="&lt;strong&gt;cURL&lt;/strong&gt;">
<pre class="highlight shell tab-shell"><code>curl --user user:pass1 <span class="s1">'https://data.oxylabs.io/v2/stats'</span></code></pre>
</div>
<div class="su-tabs-pane su-u-clearfix su-u-trim" data-title="&lt;strong&gt;Python&lt;/strong&gt;">
<pre class="highlight python tab-python"><code><span class="kn">import</span> <span class="nn">requests</span>
<span class="kn">from</span> <span class="nn">pprint</span> <span class="kn">import</span> <span class="n">pprint</span>

<span class="c"># Get response from stats endpoint.</span>
<span class="n">response</span> <span class="o">=</span> <span class="n">requests</span><span class="o">.</span><span class="n">request</span><span class="p">(</span>
    <span class="n">method</span><span class="o">=</span><span class="s">'GET'</span><span class="p">,</span>
    <span class="n">url</span><span class="o">=</span><span class="s">'https://data.oxylabs.io/v2/stats'</span><span class="p">,</span>
    <span class="n">auth</span><span class="o">=</span><span class="p">(</span><span class="s">'user'</span><span class="p">,</span> <span class="s">'pass1'</span><span class="p">),</span>
<span class="p">)</span>

<span class="c"># Print prettified JSON response to stdout.</span>
<span class="n">pprint</span><span class="p">(</span><span class="n">response</span><span class="o">.</span><span class="n">json</span><span class="p">())</span></code></pre>
</div>
<div class="su-tabs-pane su-u-clearfix su-u-trim" data-title="&lt;strong&gt;PHP&lt;/strong&gt;">
<pre class="highlight php tab-php"><code><span class="cp">&lt;?php</span>

<span class="nv">$ch</span> <span class="o">=</span> <span class="nb">curl_init</span><span class="p">();</span>

<span class="nb">curl_setopt</span><span class="p">(</span><span class="nv">$ch</span><span class="p">,</span> <span class="nx">CURLOPT_URL</span><span class="p">,</span> <span class="s2">"https://data.oxylabs.io/v2/stats"</span><span class="p">);</span>
<span class="nb">curl_setopt</span><span class="p">(</span><span class="nv">$ch</span><span class="p">,</span> <span class="nx">CURLOPT_RETURNTRANSFER</span><span class="p">,</span> <span class="mi">1</span><span class="p">);</span>
<span class="nb">curl_setopt</span><span class="p">(</span><span class="nv">$ch</span><span class="p">,</span> <span class="nx">CURLOPT_CUSTOMREQUEST</span><span class="p">,</span> <span class="s2">"GET"</span><span class="p">);</span>
<span class="nb">curl_setopt</span><span class="p">(</span><span class="nv">$ch</span><span class="p">,</span> <span class="nx">CURLOPT_USERPWD</span><span class="p">,</span> <span class="s2">"user"</span> <span class="o">.</span> <span class="s2">":"</span> <span class="o">.</span> <span class="s2">"pass1"</span><span class="p">);</span>

<span class="nv">$result</span> <span class="o">=</span> <span class="nb">curl_exec</span><span class="p">(</span><span class="nv">$ch</span><span class="p">);</span>
<span class="k">echo</span> <span class="nv">$result</span><span class="p">;</span>

<span class="k">if</span> <span class="p">(</span><span class="nb">curl_errno</span><span class="p">(</span><span class="nv">$ch</span><span class="p">))</span> <span class="p">{</span>
    <span class="k">echo</span> <span class="s1">'Error:'</span> <span class="o">.</span> <span class="nb">curl_error</span><span class="p">(</span><span class="nv">$ch</span><span class="p">);</span>
<span class="p">}</span>
<span class="nb">curl_close</span> <span class="p">(</span><span class="nv">$ch</span><span class="p">);</span>
<span class="cp">?&gt;</span></code></pre>
</div></div></div>
<p>Sample output:</p>
<pre class="highlight json tab-json"><code><span class="p">{</span>
    <span class="s2">"data"</span><span class="p">:</span> <span class="p">{</span>
        <span class="s2">"sources"</span><span class="p">:</span> <span class="p">[</span>
            <span class="p">{</span>
                <span class="s2">"realtime_results_count"</span><span class="p">:</span> <span class="s2">"90"</span><span class="p">,</span>
                <span class="s2">"results_count"</span><span class="p">:</span> <span class="s2">"10"</span><span class="p">,</span>
                <span class="s2">"title"</span><span class="p">:</span> <span class="s2">"universal"</span>
            <span class="p">}</span>
        <span class="p">]</span>
    <span class="p">},</span>
    <span class="s2">"meta"</span><span class="p">:</span> <span class="p">{</span>
        <span class="s2">"group_by"</span><span class="p">:</span> <span class="kc">null</span>
    <span class="p">}</span>
<span class="p">}</span>
</code></pre>
<hr />
<h3 id="limits">Limits</h3>
<p>The following endpoint will give your monthly commitment information as well as how much of it has already been used:</p>
<div class="endpoint">
<pre><strong>GET https://data.oxylabs.io/v2/stats/limits</strong></pre>
</div>
<div class="su-tabs su-tabs-style-default su-tabs-mobile-stack" data-active="3" data-scroll-offset="0" data-anchor-in-url="no"><div class="su-tabs-nav"><span class="" data-url="" data-target="blank" tabindex="0" role="button"><strong>cURL</strong></span><span class="" data-url="" data-target="blank" tabindex="0" role="button"><strong>Python</strong></span><span class="" data-url="" data-target="blank" tabindex="0" role="button"><strong>PHP</strong></span></div><div class="su-tabs-panes"><div class="su-tabs-pane su-u-clearfix su-u-trim" data-title="&lt;strong&gt;cURL&lt;/strong&gt;">
<pre class="highlight shell tab-shell"><code>curl --user user:pass1 <span class="s1">'https://data.oxylabs.io/v2/stats/limits'</span></code></pre>
</div>
<div class="su-tabs-pane su-u-clearfix su-u-trim" data-title="&lt;strong&gt;Python&lt;/strong&gt;">
<pre class="highlight python tab-python"><code><span class="kn">import</span> <span class="nn">requests</span>
<span class="kn">from</span> <span class="nn">pprint</span> <span class="kn">import</span> <span class="n">pprint</span>

<span class="c"># Get response from stats endpoint.</span>
<span class="n">response</span> <span class="o">=</span> <span class="n">requests</span><span class="o">.</span><span class="n">request</span><span class="p">(</span>
    <span class="n">method</span><span class="o">=</span><span class="s">'GET'</span><span class="p">,</span>
    <span class="n">url</span><span class="o">=</span><span class="s">'https://data.oxylabs.io/v2/stats/limits'</span><span class="p">,</span>
    <span class="n">auth</span><span class="o">=</span><span class="p">(</span><span class="s">'user'</span><span class="p">,</span> <span class="s">'pass1'</span><span class="p">),</span>
<span class="p">)</span>

<span class="c"># Print prettified JSON response to stdout.</span>
<span class="n">pprint</span><span class="p">(</span><span class="n">response</span><span class="o">.</span><span class="n">json</span><span class="p">())</span></code></pre>
</div>
<div class="su-tabs-pane su-u-clearfix su-u-trim" data-title="&lt;strong&gt;PHP&lt;/strong&gt;">
<pre class="highlight php tab-php"><code><span class="cp">&lt;?php</span>

<span class="nv">$ch</span> <span class="o">=</span> <span class="nb">curl_init</span><span class="p">();</span>

<span class="nb">curl_setopt</span><span class="p">(</span><span class="nv">$ch</span><span class="p">,</span> <span class="nx">CURLOPT_URL</span><span class="p">,</span> <span class="s2">"https://data.oxylabs.io/v2/stats/limits"</span><span class="p">);</span>
<span class="nb">curl_setopt</span><span class="p">(</span><span class="nv">$ch</span><span class="p">,</span> <span class="nx">CURLOPT_RETURNTRANSFER</span><span class="p">,</span> <span class="mi">1</span><span class="p">);</span>
<span class="nb">curl_setopt</span><span class="p">(</span><span class="nv">$ch</span><span class="p">,</span> <span class="nx">CURLOPT_CUSTOMREQUEST</span><span class="p">,</span> <span class="s2">"GET"</span><span class="p">);</span>
<span class="nb">curl_setopt</span><span class="p">(</span><span class="nv">$ch</span><span class="p">,</span> <span class="nx">CURLOPT_USERPWD</span><span class="p">,</span> <span class="s2">"user"</span> <span class="o">.</span> <span class="s2">":"</span> <span class="o">.</span> <span class="s2">"pass1"</span><span class="p">);</span>

<span class="nv">$result</span> <span class="o">=</span> <span class="nb">curl_exec</span><span class="p">(</span><span class="nv">$ch</span><span class="p">);</span>
<span class="k">echo</span> <span class="nv">$result</span><span class="p">;</span>

<span class="k">if</span> <span class="p">(</span><span class="nb">curl_errno</span><span class="p">(</span><span class="nv">$ch</span><span class="p">))</span> <span class="p">{</span>
    <span class="k">echo</span> <span class="s1">'Error:'</span> <span class="o">.</span> <span class="nb">curl_error</span><span class="p">(</span><span class="nv">$ch</span><span class="p">);</span>
<span class="p">}</span>
<span class="nb">curl_close</span> <span class="p">(</span><span class="nv">$ch</span><span class="p">);</span>
<span class="cp">?&gt;</span></code></pre>
</div></div></div>
<p>Sample output:</p>
<pre class="highlight json tab-json"><code><span class="p">{</span>
    <span class="s2">"monthly_requests_commitment"</span><span class="p">:</span> <span class="mi">4500000</span><span class="p">,</span>
    <span class="s2">"used_requests"</span><span class="p">:</span> <span class="mi">985000</span>
<span class="p">}</span></code></pre>
<hr />
<h2 id="response-codes">Response Codes</h2>
<div class="su-table su-table-responsive su-table-alternate">
<table>
<thead>
<tr>
<th>Code</th>
<th>Status</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><code>204</code></td>
<td>No Content</td>
<td>You are trying to retrieve a job that has not been completed yet.</td>
</tr>
<tr>
<td><code>400</code></td>
<td>Multiple error messages</td>
<td>Bad request structure, could be a misspelled parameter or invalid value. The response body will have a more specific error message.</td>
</tr>
<tr>
<td><code>401</code></td>
<td>&#8216;Authorization header not provided' / &#8216;Invalid authorization header' / &#8216;Client not found'</td>
<td>Missing authorization header or incorrect login credentials.</td>
</tr>
<tr>
<td><code>403</code></td>
<td>Forbidden</td>
<td>Your account does not have access to this resource.</td>
</tr>
<tr>
<td><code>404</code></td>
<td>Not Found</td>
<td>Job ID you are looking for is no longer available.</td>
</tr>
<tr>
<td><code>429</code></td>
<td>Too many requests</td>
<td>Exceeded rate limit. Please contact your account manager to increase limits.</td>
</tr>
<tr>
<td><code>500</code></td>
<td>Unknown Error</td>
<td>Service unavailable.</td>
</tr>
<tr>
<td><code>524</code></td>
<td>Timeout</td>
<td>Service unavailable.</td>
</tr>
<tr>
<td><code>612</code></td>
<td>Undefined Internal Error</td>
<td>Something went wrong and we failed the job you submitted. You can try again at no extra cost, as we do not charge you for <code>faulted</code> jobs. If that does not work, please get in touch with us.</td>
</tr>
<tr>
<td><code>613</code></td>
<td>Faulted After Too Many Retries</td>
<td>We tried scraping the job you submitted, but gave up after reaching our retry limit. You can try again at no extra cost, as we do not charge you for <code>faulted</code> jobs. If that does not work, please get in touch with us.</td>
</tr>
</tbody>
</table>
</div>
<hr />
<h4>References</h4>
<ul>
<li style="list-style-type: none;">
<ul>
<li><a href="https://developers.oxylabs.io/scraper-apis/web_scraper_api/source/web-scraper-api/index.html#quick-start" target="_blank" rel="nofollow noopener">https://developers.oxylabs.io/scraper-apis/web_scraper_api/source/web-scraper-api/index.html#quick-start </a></li>
<li><a href="https://developers.oxylabs.io/scraper-apis/" target="_blank" rel="nofollow noopener">https://developers.oxylabs.io/scraper-apis/ </a></li>
</ul>
</li>
</ul>
<hr />
<blockquote><p><strong>Disclaimer:</strong> This part of the content is mainly from the merchant. If the merchant does not want it to be displayed on my website, please <a href="https://www.proxysp.com/contact-us/">contact us</a> to delete your content.</p></blockquote>
]]></content:encoded>
					
					<wfw:commentRss>https://proxysp.com/oxylabs-web-scraper-api/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">9062</post-id>	</item>
		<item>
		<title>How to Use Scraping Robot API? Learn Manuals Before You Buy</title>
		<link>https://proxysp.com/how-to-use-scraping-robot-api/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=how-to-use-scraping-robot-api</link>
					<comments>https://proxysp.com/how-to-use-scraping-robot-api/#respond</comments>
		
		<dc:creator><![CDATA[proxysp]]></dc:creator>
		<pubDate>Thu, 01 Jan 1970 00:00:00 +0000</pubDate>
				<category><![CDATA[APIs]]></category>
		<category><![CDATA[Manuals]]></category>
		<guid isPermaLink="false">https://www.proxysp.com/?p=8698</guid>

					<description><![CDATA[Want to buy Scraping Robot API for web scraping? Before that, you have to know how to use it. This article will give you a detailed &#8230;<p class="read-more"> <a class="ast-button" href="https://proxysp.com/how-to-use-scraping-robot-api/"> <span class="screen-reader-text">How to Use Scraping Robot API? Learn Manuals Before You Buy</span> Read More &#187;</a></p>]]></description>
										<content:encoded><![CDATA[<blockquote><p>Want to buy Scraping Robot API for web scraping? Before that, you have to know how to use it. This article will give you a detailed guide.</p></blockquote>
<h2>Scraping Robot API</h2>
<h3>Basic Usage</h3>
<header class="headline-container21aRBSn8Bqg6 headline-container_basic1DFntTggitfX">
<div class="markdown-body undefined excerptT2m-MzSJGRK7" role="doc-subtitle" data-testid="RDMD">
<p>This page will tell you about Scraping Robot's basic functionality</p>
</div>
</header>
<div class="markdown-body" data-testid="RDMD">
<p>The Scraping Robot API exposes a single API endpoint. Simply send an http-request to <a href="https://api.scrapingrobot.com/" target="_blank" rel="nofollow noopener">https://api.scrapingrobot.com</a> with your API key, passed as a query-parameter, and get the needed data.</p>
<p>All task-parameters are passed in a POST-body as a JSON-object.</p>
<div id="post-sample-code" class="heading-anchor anchor waypoint"><strong style="font-size: 16px;">POST Sample Code</strong></div>
<p><a href="https://api.scrapingrobot.com/?token=" target="_self" rel="noopener">https://api.scrapingrobot.com?token=</a>&lt;YOUR_SR_TOKEN&gt;</p>
<p>Sample Code</p>
<pre class="p-0">{  
<span class="cm-property">  "url"</span>: <span class="cm-string">"https://www.scrapingrobot.com/"</span>,  
<span class="cm-property">  "module"</span>: <span class="cm-string">"HtmlChromeScraper"</span> 
}</pre>
<hr />
</div>
<h3>Authentication</h3>
<p>Every request to the Scraping Robot API should contain an access token. If a user does not pass the token or it is invalid &#8211; Scraping Robot will respond with status 401 (Unauthorized).</p>
<p>The token can be passed in two ways:</p>
<ul>
<li>As a query-parameter:
<ul>
<li>?token=</li>
</ul>
</li>
<li>In the Authorization header (bearer authentication):
<ul>
<li>Authorization: Bearer</li>
</ul>
</li>
</ul>
<p><strong>Note: </strong>To receive your Scraping Robot API access token you must register an account at <a href="https://dashboard.scrapingrobot.com/sign-up" target="_blank" rel="nofollow noopener">https://dashboard.scrapingrobot.com/sign-up</a>.</p>
<hr />
<h2>Error Handling</h2>
<h3>Authorization Parameter Missing</h3>
<p>If you forget to include your API key from your Scraping Robot dashboard as the &#8220;token&#8221; path parameter in your API call, we'll show you the error message on the right side of the screen.</p>
<p>Authorization Parameter Missing</p>
<pre>{
<span class="cm-property">   "status"</span>: <span class="cm-string">"FAIL"</span>,
<span class="cm-property">   "date"</span>: <span class="cm-string">"Thu, 01 Mar 2020 10:00:00 GMT"</span>,
<span class="cm-property">   "error"</span>: <span class="cm-string">"Token query parameter not found"</span>
}</pre>
<p>To rectify this error, please include your API key from your Scraping Robot dashboard as the &#8220;token&#8221; path parameter in your API call, so that you can be authorized to make the request to our system.</p>
<hr />
<h3>Invalid Authorization Parameter</h3>
<p>If you put an invalid API key as the &#8220;token&#8221; path parameter in your API call, we will show you the error message on the right side of the screen.</p>
<p>Invalid Authorization Parameter</p>
<pre>{
<span class="cm-property">   "status"</span>: <span class="cm-string">"FAIL"</span>,
<span class="cm-property">   "date"</span>: <span class="cm-string">"Thu, 01 Mar 2020 10:00:00 GMT"</span>,
<span class="cm-property">   "error"</span>: <span class="cm-string">"Invalid client token"</span>
}</pre>
<p>To rectify this error, please include your API key from your Scraping Robot dashboard as the &#8220;token&#8221; path parameter in your API call, so that you can be authorized to make the request to our system.</p>
<hr />
<h3>Not Enough Credits</h3>
<p>If you do not have enough credits in your account to perform the scraping task you're requesting, we will show you the error message on the right side of the screen.</p>
<p>Not Enough Credits</p>
<pre>{
  "status": "FAIL",
  "date": "Thu, 01 Mar 2020 10:00:00 GMT",
  "error": "You do not have enough credits"
}</pre>
<p>To rectify this error, please add scraping credits to your account through your Scraping Robot dashboard or <a href="https://scrapingrobot.com/contact-us/" target="_blank" rel="nofollow noopener">contact our support team</a> to get credits added to your account.</p>
<hr />
<h3>Request Body is not Valid JSON</h3>
<p>If you send in a request that does not have valid JSON, we will show you the error message on the right side of the screen.</p>
<p>Invalid JSON includes anything that is not in JSON format and does not have the structure of JSON. This is different than the &#8220;Invalid Request Body&#8221; error explained next.</p>
<p>Request Body is not Valid JSON</p>
<pre>{
  "status": "FAIL",
  "date":"Thu, 01 Mar 2020 10:00:00 GMT",
  "error": "Request-body is not a valid JSON"
}</pre>
<p>To rectify this error, please fix the JSON in the request body and try your request again. You can find JSON validators online to help you with getting your JSON correctly formatted.</p>
<hr />
<h3>Invalid Request Body</h3>
<p>If you send in a JSON body, but the body parameters are incorrect or out of order, we will show you the error message on the right side of the screen.</p>
<p>Invalid Request Body</p>
<pre>{ 
  "status": "FAIL", 
  "date":"Thu, 01 Mar 2020 10:00:00 GMT", 
  "error": "Invalid json format: ..." 
}</pre>
<p>To rectify this error, please review the API documentation for the request you're sending in to ensure all parameters are correct. If you cannot resolve the issue on your own, please <a href="https://scrapingrobot.com/contact-us/" target="_blank" rel="nofollow noopener">contact our support team</a> for assistance and we'll gladly help out!</p>
<hr />
<h3>Service Overloaded</h3>
<p>If our service is overloaded at the time of your request, we will show you the error message on the right side of the screen.</p>
<p>Service Overloaded</p>
<pre>{ 
  "status": "FAIL", 
  "date":"Thu, 01 Mar 2020 10:00:00 GMT", 
  "error": "The service is overloaded. Try again later" 
}</pre>
<p>To rectify this error, please <a href="https://scrapingrobot.com/contact-us/" target="_blank" rel="nofollow noopener">contact our support team</a> for updates on the situation.</p>
<hr />
<h3>Page Load Failure</h3>
<p>If Scraping Robot is unable to load the page you're trying to scrape, we will show you the error message on the right side of the screen.</p>
<p>Page Load Failure</p>
<pre>{ 
  "status": "FAIL", 
  "date":"Thu, 01 Mar 2020 10:00:00 GMT", 
  "error": "Please retry this task again later" 
}</pre>
<p>To rectify this error, please <a href="https://scrapingrobot.com/contact-us/" target="_blank" rel="nofollow noopener">contact our support team</a> for assistance.</p>
<hr />
<h3>Internal Error</h3>
<p>If there is an issue with our system, we will show you the error message on the right side of the screen.</p>
<p>Internal Error</p>
<pre>{ 
  "error": "Internal server error", 
  "date": "Thu, 01 Mar 2020 10:00:00 GMT", 
  "status": "FAIL" 
}</pre>
<p>To rectify this error, please <a href="https://scrapingrobot.com/contact-us/" target="_blank" rel="nofollow noopener">contact our support team</a> for assistance.</p>
<hr />
<h2>Credits</h2>
<h3>Get Credit Balance</h3>
<p><span class="APIMethod APIMethod_fixedWidth APIMethod_get headline-container-api-method1Hc-Fm7uaccR" data-testid="http-method">GET </span><span class="headline-container-article-info-url2nV_XrjpFuVQ" style="font-size: 13px; color: #4f5a66; font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Oxygen, Ubuntu, Cantarell, 'Fira Sans', 'Droid Sans', 'Helvetica Neue', sans-serif; font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px; text-decoration-thickness: initial; text-decoration-style: initial; text-decoration-color: initial;" title="https://api.scrapingrobot.com/balance?token=&lt;YOUR_SR_TOKEN&gt;" data-testid="serverurl">https://api.scrapingrobot.com/balance?token=&lt;YOUR_SR_TOKEN&gt;</span></p>
<div class="su-tabs su-tabs-style-default su-tabs-mobile-stack" data-active="0" data-scroll-offset="0" data-anchor-in-url="no"><div class="su-tabs-nav"></div><div class="su-tabs-panes"></div></div>






[/su_tab]
<hr />
<div class="card-body">
<h3>Get Credit Usage Statistics</h3>
</div>
<div class="headline-container-article-info2GaOf2jMpV0r"><span class="APIMethod APIMethod_fixedWidth APIMethod_get headline-container-api-method1Hc-Fm7uaccR" data-testid="http-method">get</span> <span class="headline-container-article-info-url2nV_XrjpFuVQ" title="https://api.scrapingrobot.com/stats?token=&lt;YOUR_SR_TOKEN&gt;&type=daily" data-testid="serverurl">https://api.scrapingrobot.com/stats?token=&lt;YOUR_SR_TOKEN&gt;&type=daily</span></div>
<div class="markdown-body undefined excerptT2m-MzSJGRK7" role="doc-subtitle" data-testid="RDMD">
<p>This endpoint will show you your credit usage over the specified time period.</p>
<div class="su-tabs su-tabs-style-default su-tabs-mobile-stack" data-active="5" data-scroll-offset="0" data-anchor-in-url="no"><div class="su-tabs-nav"><span class="" data-url="" data-target="blank" tabindex="0" role="button"><strong>cURL</strong></span><span class="" data-url="" data-target="blank" tabindex="0" role="button"><strong>Node</strong></span><span class="" data-url="" data-target="blank" tabindex="0" role="button"><strong>PHP</strong></span><span class="" data-url="" data-target="blank" tabindex="0" role="button"><strong>Python</strong></span><span class="" data-url="" data-target="blank" tabindex="0" role="button">Tab title</span><span class="" data-url="" data-target="blank" tabindex="0" role="button"><strong>C++</strong></span></div><div class="su-tabs-panes"><div class="su-tabs-pane su-u-clearfix su-u-trim" data-title="&lt;strong&gt;cURL&lt;/strong&gt;">
<p><span class="APIRequest-header-titlewXRS3m3wzYvA">Request</span></p>
<div class="card-body">
<pre class="p-0"><span class="hljs-string">curl --request GET \
--url 'https://api.scrapingrobot.com/balance?token=&lt;YOUR_SR_TOKEN&gt;' \
--header 'Accept: application/json'</span></pre>
</div>
</div>
<div class="su-tabs-pane su-u-clearfix su-u-trim" data-title="&lt;strong&gt;Node&lt;/strong&gt;">
<p><span class="APIRequest-header-titlewXRS3m3wzYvA">Request</span></p>
<div class="card-body">
<pre class="p-0"><span class="hljs-string">const fetch = require('node-fetch');
const url = 'https://api.scrapingrobot.com/balance?token=';
const options = {method: 'GET', headers: {Accept: 'application/json'}};
fetch(url, options)
  .then(res =&gt; res.json())
  .then(json =&gt; console.log(json))
  .catch(err =&gt; console.error('error:' + err));</span></pre>
</div>
</div>
<div class="su-tabs-pane su-u-clearfix su-u-trim" data-title="&lt;strong&gt;PHP&lt;/strong&gt;">
<p><span class="APIRequest-header-titlewXRS3m3wzYvA">Request</span></p>
<div class="card-body">
<pre class="p-0">&lt;?php
require_once('vendor/autoload.php');

$client = new \GuzzleHttp\Client();

$response = $client-&gt;request('GET', 'https://api.scrapingrobot.com/balance?token=&lt;YOUR_SR_TOKEN&gt;', [
'headers' =&gt; [
'Accept' =&gt; 'application/json',
],
]);

echo $response-&gt;getBody();<span class="hljs-string"> </span></pre>
</div>
</div>
<div class="su-tabs-pane su-u-clearfix su-u-trim" data-title="&lt;strong&gt;Python&lt;/strong&gt;">
<p><span class="APIRequest-header-titlewXRS3m3wzYvA">Request</span></p>
<div class="card-body">
<pre class="p-0">import requests

url = "https://api.scrapingrobot.com/balance?token=&lt;YOUR_SR_TOKEN&gt;"

headers = {"Accept": "application/json"}

response = requests.request("GET", url, headers=headers)

print(response.text)
</pre>
</div>
</div>
<div class="su-tabs-pane su-u-clearfix su-u-trim" data-title="Tab title">
<p><span class="APIRequest-header-titlewXRS3m3wzYvA">Request</span></p>
<div class="card-body">
<pre class="p-0">const options = {method: 'GET', headers: {Accept: 'application/json'}};

fetch('https://api.scrapingrobot.com/balance?token=&lt;YOUR_SR_TOKEN&gt;', options)
.then(response =&gt; response.json())
.then(response =&gt; console.log(response))
.catch(err =&gt; console.error(err));
</pre>
</div>
</div>
<div class="su-tabs-pane su-u-clearfix su-u-trim" data-title="&lt;strong&gt;C++&lt;/strong&gt;">
<p><span class="APIRequest-header-titlewXRS3m3wzYvA">Request</span></p>
<div class="card-body">
<pre class="p-0">CURL *hnd = curl_easy_init();

curl_easy_setopt(hnd, CURLOPT_CUSTOMREQUEST, "GET");
curl_easy_setopt(hnd, CURLOPT_URL, "https://api.scrapingrobot.com/balance?token=&lt;YOUR_SR_TOKEN&gt;");

struct curl_slist *headers = NULL;
headers = curl_slist_append(headers, "Accept: application/json");
curl_easy_setopt(hnd, CURLOPT_HTTPHEADER, headers);

CURLcode ret = curl_easy_perform(hnd);
</pre>
</div>
</div></div></div>






[/su_tab]
<hr />
</div>
<div class="card-body">
<h2>Html API</h2>
</div>
<h3>Create a task using POST-request</h3>
<h1>/</h1>
<div class="headline-container-article-info2GaOf2jMpV0r"><span class="APIMethod APIMethod_fixedWidth APIMethod_post headline-container-api-method1Hc-Fm7uaccR" data-testid="http-method">post</span> <span class="headline-container-article-info-url2nV_XrjpFuVQ" title="https://api.scrapingrobot.com/" data-testid="serverurl">https://api.scrapingrobot.com/</span></div>
<div>Create scraping task</div>
<div class="su-tabs su-tabs-style-default su-tabs-mobile-stack" data-active="5" data-scroll-offset="0" data-anchor-in-url="no"><div class="su-tabs-nav"><span class="" data-url="" data-target="blank" tabindex="0" role="button"><strong>cURL</strong></span><span class="" data-url="" data-target="blank" tabindex="0" role="button"><strong>Node</strong></span><span class="" data-url="" data-target="blank" tabindex="0" role="button"><strong>PHP</strong></span><span class="" data-url="" data-target="blank" tabindex="0" role="button"> <strong>Python</strong></span><span class="" data-url="" data-target="blank" tabindex="0" role="button"><strong>JavaScript</strong></span><span class="" data-url="" data-target="blank" tabindex="0" role="button"><strong>C++</strong></span></div><div class="su-tabs-panes"><div class="su-tabs-pane su-u-clearfix su-u-trim" data-title="&lt;strong&gt;cURL&lt;/strong&gt;">
<p>Request</p>
<pre class="p-0">curl --request GET \
--url 'https://api.scrapingrobot.com/stats?token=&lt;YOUR_SR_TOKEN&gt;&type=daily' \
--header 'Accept: application/json'
</pre>
</div>
<div class="su-tabs-pane su-u-clearfix su-u-trim" data-title="&lt;strong&gt;Node&lt;/strong&gt;">
<p>Request</p>
<pre class="p-0">const fetch = require('node-fetch');

const url = 'https://api.scrapingrobot.com/stats?token=&lt;YOUR_SR_TOKEN&gt;&type=daily';
const options = {method: 'GET', headers: {Accept: 'application/json'}};

fetch(url, options)
.then(res =&gt; res.json())
.then(json =&gt; console.log(json))
.catch(err =&gt; console.error('error:' + err));
</pre>
</div>
<div class="su-tabs-pane su-u-clearfix su-u-trim" data-title="&lt;strong&gt;PHP&lt;/strong&gt;">
<p>Request</p>
<pre class="p-0">&lt;?php
require_once('vendor/autoload.php');

$client = new \GuzzleHttp\Client();

$response = $client-&gt;request('GET', 'https://api.scrapingrobot.com/stats?token=&lt;YOUR_SR_TOKEN&gt;&type=daily', [
'headers' =&gt; [
'Accept' =&gt; 'application/json',
],
]);

echo $response-&gt;getBody();
</pre>
</div>
<div class="su-tabs-pane su-u-clearfix su-u-trim" data-title=" &lt;strong&gt;Python&lt;/strong&gt;">
<p>Request</p>
<pre class="p-0">import requests

url = "https://api.scrapingrobot.com/stats?token=&lt;YOUR_SR_TOKEN&gt;&type=daily"

headers = {"Accept": "application/json"}

response = requests.request("GET", url, headers=headers)

print(response.text)
</pre>
</div>
<div class="su-tabs-pane su-u-clearfix su-u-trim" data-title="&lt;strong&gt;JavaScript&lt;/strong&gt;">
<p>Request</p>
<pre class="p-0">const options = {method: 'GET', headers: {Accept: 'application/json'}};

fetch('https://api.scrapingrobot.com/stats?token=&lt;YOUR_SR_TOKEN&gt;&type=daily', options)
.then(response =&gt; response.json())
.then(response =&gt; console.log(response))
.catch(err =&gt; console.error(err));
</pre>
</div>
<div class="su-tabs-pane su-u-clearfix su-u-trim" data-title="&lt;strong&gt;C++&lt;/strong&gt;">
<p>Request</p>
<pre class="p-0">CURL *hnd = curl_easy_init();

curl_easy_setopt(hnd, CURLOPT_CUSTOMREQUEST, "GET");
curl_easy_setopt(hnd, CURLOPT_URL, "https://api.scrapingrobot.com/stats?token=&lt;YOUR_SR_TOKEN&gt;&type=daily");

struct curl_slist *headers = NULL;
headers = curl_slist_append(headers, "Accept: application/json");
curl_easy_setopt(hnd, CURLOPT_HTTPHEADER, headers);

CURLcode ret = curl_easy_perform(hnd);
</pre>
</div></div></div>






[/su_tab]
<hr />
<h3>Create a task using GET-request</h3>
<div class="headline-container-grid-itemGdPV-VbhShYs button-containerobFfV0vf6giV">
<h1>/</h1>
</div>
<div class="headline-container-article-info2GaOf2jMpV0r"><span class="APIMethod APIMethod_fixedWidth APIMethod_get headline-container-api-method1Hc-Fm7uaccR" data-testid="http-method">get</span> <span class="headline-container-article-info-url2nV_XrjpFuVQ" title="https://api.scrapingrobot.com/" data-testid="serverurl">https://api.scrapingrobot.com/</span></div>
<div class="markdown-body undefined excerptT2m-MzSJGRK7" role="doc-subtitle" data-testid="RDMD">
<p>Create scraping task</p>
<div class="su-tabs su-tabs-style-default su-tabs-mobile-stack" data-active="5" data-scroll-offset="0" data-anchor-in-url="no"><div class="su-tabs-nav"><span class="" data-url="" data-target="blank" tabindex="0" role="button"><strong>cURL</strong></span><span class="" data-url="" data-target="blank" tabindex="0" role="button"><strong>Node</strong></span><span class="" data-url="" data-target="blank" tabindex="0" role="button"><strong>PHP</strong></span><span class="" data-url="" data-target="blank" tabindex="0" role="button"><strong>Python</strong></span><span class="" data-url="" data-target="blank" tabindex="0" role="button"><strong>JavaScript</strong></span><span class="" data-url="" data-target="blank" tabindex="0" role="button"><strong>C++</strong></span></div><div class="su-tabs-panes"><div class="su-tabs-pane su-u-clearfix su-u-trim" data-title="&lt;strong&gt;cURL&lt;/strong&gt;">
<p><span class="APIRequest-header-titlewXRS3m3wzYvA">Request</span></p>
<pre class="p-0">curl --request POST \
--url 'https://api.scrapingrobot.com/?responseType=json&waitUntil=load&noScripts=false&noImages=true&noFonts=true&noCss=true&contentType=text%2Fplain' \
--header 'Accept: application/json' \
--header 'Content-Type: application/json'
</pre>
</div>
<div class="su-tabs-pane su-u-clearfix su-u-trim" data-title="&lt;strong&gt;Node&lt;/strong&gt;">
<p><span class="APIRequest-header-titlewXRS3m3wzYvA">Request</span></p>
<pre class="p-0">const sdk = require('api')('@staging-docs-scrapingrobot/v1.0#1b382ykufox5uf');

sdk.server('https:/api.scrapingrobot.com/');
sdk.post('', {
responseType: 'json',
waitUntil: 'load',
noScripts: 'false',
noImages: 'true',
noFonts: 'true',
noCss: 'true',
contentType: 'text%2Fplain'
})
.then(res =&gt; console.log(res))
.catch(err =&gt; console.error(err));
</pre>
</div>
<div class="su-tabs-pane su-u-clearfix su-u-trim" data-title="&lt;strong&gt;PHP&lt;/strong&gt;">
<p><span class="APIRequest-header-titlewXRS3m3wzYvA">Request</span></p>
<pre class="p-0">&lt;?php
require_once('vendor/autoload.php');

$client = new \GuzzleHttp\Client();

$response = $client-&gt;request('POST', 'https://api.scrapingrobot.com/?responseType=json&waitUntil=load&noScripts=false&noImages=true&noFonts=true&noCss=true&contentType=text%2Fplain', [
'headers' =&gt; [
'Accept' =&gt; 'application/json',
'Content-Type' =&gt; 'application/json',
],
]);

echo $response-&gt;getBody();
</pre>
</div>
<div class="su-tabs-pane su-u-clearfix su-u-trim" data-title="&lt;strong&gt;Python&lt;/strong&gt;">
<p><span class="APIRequest-header-titlewXRS3m3wzYvA">Request</span></p>
<pre class="p-0">import requests

url = "https://api.scrapingrobot.com/?responseType=json&waitUntil=load&noScripts=false&noImages=true&noFonts=true&noCss=true&contentType=text%2Fplain"

headers = {
"Accept": "application/json",
"Content-Type": "application/json"
}

response = requests.request("POST", url, headers=headers)

print(response.text)
</pre>
</div>
<div class="su-tabs-pane su-u-clearfix su-u-trim" data-title="&lt;strong&gt;JavaScript&lt;/strong&gt;">
<p><span class="APIRequest-header-titlewXRS3m3wzYvA">Request</span></p>
<pre class="p-0">const options = {
method: 'POST',
headers: {Accept: 'application/json', 'Content-Type': 'application/json'}
};

fetch('https://api.scrapingrobot.com/?responseType=json&waitUntil=load&noScripts=false&noImages=true&noFonts=true&noCss=true&contentType=text%2Fplain', options)
.then(response =&gt; response.json())
.then(response =&gt; console.log(response))
.catch(err =&gt; console.error(err));
</pre>
</div>
<div class="su-tabs-pane su-u-clearfix su-u-trim" data-title="&lt;strong&gt;C++&lt;/strong&gt;">
<p><span class="APIRequest-header-titlewXRS3m3wzYvA">Request</span></p>
<pre class="p-0">CURL *hnd = curl_easy_init();

curl_easy_setopt(hnd, CURLOPT_CUSTOMREQUEST, "POST");
curl_easy_setopt(hnd, CURLOPT_URL, "https://api.scrapingrobot.com/?responseType=json&waitUntil=load&noScripts=false&noImages=true&noFonts=true&noCss=true&contentType=text%2Fplain");

struct curl_slist *headers = NULL;
headers = curl_slist_append(headers, "Accept: application/json");
headers = curl_slist_append(headers, "Content-Type: application/json");
curl_easy_setopt(hnd, CURLOPT_HTTPHEADER, headers);

CURLcode ret = curl_easy_perform(hnd);
</pre>
</div></div></div>






[/su_tab]
</div>
<hr />
<div class="card-body">
<h3>Get current credits balance</h3>
<div class="headline-container-grid-itemGdPV-VbhShYs button-containerobFfV0vf6giV">
<p><strong>/balance</strong></p>
<p><span class="APIMethod APIMethod_fixedWidth APIMethod_get headline-container-api-method1Hc-Fm7uaccR" data-testid="http-method">get</span> <span class="headline-container-article-info-url2nV_XrjpFuVQ" title="https://api.scrapingrobot.com/balance" data-testid="serverurl">https://api.scrapingrobot.com/balance</span></p>
</div>
<div class="markdown-body undefined excerptT2m-MzSJGRK7" role="doc-subtitle" data-testid="RDMD">
<p>Get current credits balance</p>
<div class="su-tabs su-tabs-style-default su-tabs-mobile-stack" data-active="5" data-scroll-offset="0" data-anchor-in-url="no"><div class="su-tabs-nav"><span class="" data-url="" data-target="blank" tabindex="0" role="button"><strong>cURL</strong></span><span class="" data-url="" data-target="blank" tabindex="0" role="button"><strong>Node</strong></span><span class="" data-url="" data-target="blank" tabindex="0" role="button"><strong>PHP</strong></span><span class="" data-url="" data-target="blank" tabindex="0" role="button"> <strong>Python</strong></span><span class="" data-url="" data-target="blank" tabindex="0" role="button"><strong>JavaScript</strong></span><span class="" data-url="" data-target="blank" tabindex="0" role="button"><strong>C++</strong></span></div><div class="su-tabs-panes"><div class="su-tabs-pane su-u-clearfix su-u-trim" data-title="&lt;strong&gt;cURL&lt;/strong&gt;">
<p><span class="APIRequest-header-titlewXRS3m3wzYvA">Request</span></p>
<pre class="p-0">curl --request GET \
--url https://api.scrapingrobot.com/ \
--header 'Accept: application/json'
</pre>
</div>
<div class="su-tabs-pane su-u-clearfix su-u-trim" data-title="&lt;strong&gt;Node&lt;/strong&gt;">
<p><span class="APIRequest-header-titlewXRS3m3wzYvA">Request</span></p>
<pre class="p-0">const sdk = require('api')('@staging-docs-scrapingrobot/v1.0#1b382ykufox5uf');

sdk.server('https:/api.scrapingrobot.com/');
sdk.get('', {
responseType: 'json',
waitUntil: 'load',
noScripts: 'false',
noImages: 'true',
noFonts: 'true',
noCss: 'true'
})
.then(res =&gt; console.log(res))
.catch(err =&gt; console.error(err));
</pre>
</div>
<div class="su-tabs-pane su-u-clearfix su-u-trim" data-title="&lt;strong&gt;PHP&lt;/strong&gt;">
<p><span class="APIRequest-header-titlewXRS3m3wzYvA">Request</span></p>
<pre class="p-0">&lt;?php
require_once('vendor/autoload.php');

$client = new \GuzzleHttp\Client();

$response = $client-&gt;request('GET', 'https://api.scrapingrobot.com/?responseType=json&waitUntil=load&noScripts=false&noImages=true&noFonts=true&noCss=true', [
'headers' =&gt; [
'Accept' =&gt; 'application/json',
],
]);

echo $response-&gt;getBody();
</pre>
</div>
<div class="su-tabs-pane su-u-clearfix su-u-trim" data-title=" &lt;strong&gt;Python&lt;/strong&gt;">
<p><span class="APIRequest-header-titlewXRS3m3wzYvA">Request</span></p>
<pre class="p-0">import requests

url = "https://api.scrapingrobot.com/?responseType=json&waitUntil=load&noScripts=false&noImages=true&noFonts=true&noCss=true"

headers = {"Accept": "application/json"}

response = requests.request("GET", url, headers=headers)

print(response.text)
</pre>
</div>
<div class="su-tabs-pane su-u-clearfix su-u-trim" data-title="&lt;strong&gt;JavaScript&lt;/strong&gt;">
<p><span class="APIRequest-header-titlewXRS3m3wzYvA">Request</span></p>
<pre class="p-0">const options = {method: 'GET', headers: {Accept: 'application/json'}};

fetch('https://api.scrapingrobot.com/?responseType=json&waitUntil=load&noScripts=false&noImages=true&noFonts=true&noCss=true', options)
.then(response =&gt; response.json())
.then(response =&gt; console.log(response))
.catch(err =&gt; console.error(err));
</pre>
</div>
<div class="su-tabs-pane su-u-clearfix su-u-trim" data-title="&lt;strong&gt;C++&lt;/strong&gt;">
<p><span class="APIRequest-header-titlewXRS3m3wzYvA">Request</span></p>
<p>CURL *hnd = curl_easy_init();</p>
<pre class="p-0">curl_easy_setopt(hnd, CURLOPT_CUSTOMREQUEST, "GET");
curl_easy_setopt(hnd, CURLOPT_URL, "https://api.scrapingrobot.com/?responseType=json&waitUntil=load&noScripts=false&noImages=true&noFonts=true&noCss=true");

struct curl_slist *headers = NULL;
headers = curl_slist_append(headers, "Accept: application/json");
curl_easy_setopt(hnd, CURLOPT_HTTPHEADER, headers);

CURLcode ret = curl_easy_perform(hnd);
</pre>
</div></div></div>






[/su_tab]
</div>
<h4></h4>
<h4 id="references" class="ftwp-heading">References,</h4>
<ul>
<li><a href="https://docs.scrapingrobot.com/reference/getting-started-with-your-api" target="_blank" rel="nofollow noopener">https://docs.scrapingrobot.com/reference/getting-started-with-your-api</a></li>
</ul>
<hr />
<blockquote><p><strong>Disclaimer</strong>: This part of the content is mainly from the merchant. If the merchant does not want it to be displayed on my website, please <a href="https://www.proxysp.com/contact-us/">contact us</a> to delete your content.</p></blockquote>
<pre class="p-0"></pre>
</div>
]]></content:encoded>
					
					<wfw:commentRss>https://proxysp.com/how-to-use-scraping-robot-api/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">8698</post-id>	</item>
		<item>
		<title>911 Proxy Developer API (Offline!)</title>
		<link>https://proxysp.com/911-proxy-developer-api/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=911-proxy-developer-api</link>
					<comments>https://proxysp.com/911-proxy-developer-api/#respond</comments>
		
		<dc:creator><![CDATA[admin]]></dc:creator>
		<pubDate>Tue, 03 Aug 2021 08:02:46 +0000</pubDate>
				<category><![CDATA[APIs]]></category>
		<category><![CDATA[Manuals]]></category>
		<guid isPermaLink="false">https://www.proxysp.com/?p=10201</guid>

					<description><![CDATA[Please note that the API only works for getting a new proxy from &#8220;ProxyList&#8221;, and can not be used to reuse the proxy from &#8220;TodayList&#8221;. The &#8230;<p class="read-more"> <a class="ast-button" href="https://proxysp.com/911-proxy-developer-api/"> <span class="screen-reader-text">911 Proxy Developer API (Offline!)</span> Read More &#187;</a></p>]]></description>
										<content:encoded><![CDATA[<div class="inner-wrap">
<div class="container">
<p><span style="font-size: 16px;">Please note that the API only works for getting a new proxy from &#8220;ProxyList&#8221;, and can not be used to reuse the proxy from &#8220;TodayList&#8221;. The following are how to use the API and examples</span></p>
<div class="api-wrap">
<p>After login to the software, switch to the AutoProxy tab, select &#8220;Use API&#8221; from &#8220;API settings,&#8221; and you need to keep the software staying logged in when you use the API:</p>
<p>In the software's root folder, there's a subfolder: &#8220;proxytool&#8221; and there's a file &#8220;Autoproxytool.exe&#8221; in it</p>
<p>Using your soft/script which want to implement the api to launch &#8220;Autoproxytool.exe&#8221; with the following parameters, then you are able to change proxy automatically：</p>
<p><b>Autoproxytool.exe -changeproxy/all</b> use a random proxy from any countries</p>
<p><b>Autoproxytool.exe -changeproxy/US </b>use a random proxy from US</p>
<p><b>Autoproxytool.exe -changeproxy/US/NY</b> use a random proxy from US, state: NewYork</p>
<p><b>Autoproxytool.exe -changeproxy/US/NY/&#8221;New York&#8221;</b> use a random proxy from US, state: NewYork, city: New York</p>
<p>For country you need to enter the country ISO alpha-2 code, if you have no idea, you can google: country ISO alpha-2 code</p>
<p><b>-citynolimit</b> you can use the parameter like this:</p>
<p><b>Autoproxytool.exe -changeproxy/US/NY/&#8221;New York&#8221;/ -citynolimit</b></p>
<p>Which means the API system will firstly try to get a proxy from the City you set(New York) for higher priority, Only if there's no proxy available from that City, then it will try to get a proxy from the State you set(NY). If proxy is available from that City, it wont try from the State(NY)</p>
<p><b>Autoproxytool.exe -changeproxy/ -ip=123.123.123.123</b></p>
<p>Get a proxy by ip. You can replace * in the ip address to get any proxy from that ip block, e.g: <b>Autoproxytool.exe -changeproxy/ -ip=123.123.*.*</b> or <b>Autoproxytool.exe -changeproxy/ -ip=123.*.*.*</b></p>
<p><b>Autoproxytool.exe -proxyport=</b></p>
<p>Forward a proxy to a port, the port need to be in the &#8220;port forward&#8221; range in software &#8220;Settings&#8221;, Each time using the parameter will result in replacing a new proxy to this port</p>
<p><b>Autoproxytool.exe -freeport=</b></p>
<p>Free the port and unload the proxy</p>
<p><b>Autoproxytool.exe -proxyport=all</b></p>
<p>Forward proxies to all the ports in the &#8220;port forward&#8221; range in software &#8220;Settings&#8221;, Each time using the parameter will result in replacing new proxies to all these ports</p>
<p><b>Autoproxytool.exe -freeport=all</b></p>
<p>Free all the ports and unload all the proxies</p>
<p><b>Autoproxytool.exe -isp=</b></p>
<p>Use a random proxy from the isp, it also supports fuzzy search by using *, e.g Autoproxytool.exe -isp=S*, means to get a proxy with ISP starting with &#8220;S&#8221;, Autoproxytool.exe -isp=*Cable, means to get a proxy with ISP ending with &#8220;Cable&#8221;</p>
<p><b>Autoproxytool.exe -zip=</b></p>
<p>Use a random proxy from the zip location, it also supports fuzzy search by using *, e.g Autoproxytool.exe -zip=800*, means to get a proxy with ZIP starting with &#8220;800&#8221;</p>
<p>And these parameters mentioned above can be used as a combo, some examples:</p>
<p><b>Autoproxytool.exe -changeproxy/US/NY/&#8221;New York&#8221; -proxyport=5000</b></p>
<p><b>Autoproxytool.exe -changeproxy/US/NY -proxyport=all</b></p>
<p><b>Autoproxytool.exe -changeproxy/US/NY -isp=&#8221;Time Warner Cable&#8221;</b></p>
<p><b>Autoproxytool.exe -changeproxy/US -zip=92626</b></p>
<p><b>Autoproxytool.exe -changeproxy/US/NY -isp=&#8221;Time Warner Cable&#8221; -proxyport=5000</b></p>
<p><b>Autoproxytool.exe -changeproxy/US -zip=92626 -proxyport=5000</b></p>
<hr />
<p><b>-hwnd=</b></p>
<p>With using <b>-hwnd=</b> parameter, <b>Autoproxytool.exe</b> will send WM_COPYDATA message to your soft which launches <b>Autoproxytool.exe</b>, so that your soft is able to get postcheck and more info of the proxy, you also need to pass the Window Handle of your soft which launches <b>Autoproxytool.exe</b> and <b>Autoproxytool.exe</b> will send you WM_COPYDATA message with the following format and info:</p>
<p>1. if the proxy successful get by api:</p>
<p>success|ip|Ping|ProxyCountry|ProxyState|ProxyCity|911s5 account balance</p>
<p>2. if the proxy failed to get by api:</p>
<p>failed|reason for failure</p>
<p>Some examples of how to use it:</p>
<p><b>Autoproxytool.exe -changeproxy/US/NY/&#8221;New York&#8221; -hwnd=YOUR SOFT'S WINDOW HANDLE</b></p>
<p><b>Autoproxytool.exe -changeproxy/US/NY/&#8221;New York&#8221; -citynolimit -hwnd=YOUR SOFT'S WINDOW HANDLE</b></p>
<p><b>Autoproxytool.exe -changeproxy/ -ip=123.123.*.* -hwnd=YOUR SOFT'S WINDOW HANDLE</b></p>
<p><b>Autoproxytool.exe -changeproxy/US/NY/&#8221;New York&#8221; -proxyport=5000 -hwnd=YOUR SOFT'S WINDOW HANDLE</b></p>
<p><b>Autoproxytool.exe -changeproxy/US/NY -isp=&#8221;Time Warner Cable&#8221; -proxyport=5000 -hwnd=YOUR SOFT'S WINDOW HANDLE</b></p>
<p><b>Autoproxytool.exe -changeproxy/US -zip=92626 -proxyport=5000 -hwnd=YOUR SOFT'S WINDOW HANDLE</b></p>
</div>
<div class="api-wrap big">
<p>Auto change proxy from the software:</p>
<p>In &#8220;AutoProxy&#8221; tab, the features of &#8220;AutoProxy Settings&#8221; its not for API, its designed for auto swiching proxy according to the configs, you can set the frequency to auto change proxy and set delay of time range to auto launch your program, etc. <b>For using this feature, you need to unselect &#8220;Use API&#8221; from &#8220;API Settings&#8221;</b></p>
</div>
<div class="api-wrap big">
<p><b>Updated time: Sep 12th 2019</b></p>
<p>Since 911 S5 3.2, We developed a new API program for port forwarding</p>
<p>The new API program works with multi-thread, you can send multiple API requests at the same time(The old API program Autoproxytool.exe only can handle your request one by one with single thread, you have to wait until the last request get processed)</p>
<p>If your work requires high efficiency which need to send a lot of API requests, we suggest you to use the new API:</p>
<p>In the software's root folder, there's a sub folder: &#8220;proxytool&#8221; and there's a file &#8220;ProxyAPI.exe&#8221; in it</p>
<p>Launching &#8220;ProxyAPI.exe&#8221; with parameters from your soft/script, <b>the parameters and format its exactly the same like using the old API program(Autoproxytool.exe), the only difference is you need to include this parameter &#8220;-proxyport=&#8221;, the port behind this parameter must be in the &#8220;Port Forward&#8221; range of 911 S5's &#8220;Settings&#8221; tab.</b> Please note, you need to keep 911 S5 staying logged in when you use the API. Here are some examples of using the new API:</p>
<p><b>ProxyAPI.exe -changeproxy/US/NY/&#8221;New York&#8221; -proxyport=5000</b>, Port forwarding a proxy from New York to port 5000</p>
<p><b>ProxyAPI.exe -changeproxy/ -ip=123.123.*.* -proxyport=5000 -hwnd=YOUR SOFT'S WINDOW HANDLE</b>, Port forwarding a proxy from IP range &#8220;123.123.*.*&#8221; to port 5000, and send WM_COPYDATA message to your soft</p>
<p><b>ProxyAPI.exe -changeproxy/US/NY/&#8221;New York&#8221; -citynolimit -proxyport=5000</b></p>
<p><b>ProxyAPI.exe -changeproxy/US/NY -isp=&#8221;Time Warner Cable&#8221; -proxyport=5000</b>, Port forwarding a proxy from the US, NY, with ISP Time Warner Cable to port 5000</p>
<p><b>ProxyAPI.exe -changeproxy/US -zip=92626 -proxyport=5000</b>, Port forwarding a proxy from the US with ZIP code &#8220;92626&#8221; to port 5000</p>
<p><b>ProxyAPI.exe -changeproxy/US/NY -proxyport=all</b>, Port forwarding proxies from the US, NY to all the available ports(all the ports in &#8220;Port Forward&#8221; range of 911 S5's &#8220;Settings&#8221; tab)</p>
<p><b>ProxyAPI.exe -freeport=5000</b>, Free port 5000 and unload the proxy</p>
<p><b>ProxyAPI.exe -freeport=all</b>, Free all the ports and unload all the proxies</p>
<hr />
<ul>
<li><a href="https://www.proxysp.com/how-to-use-911-proxies/">How to Use 911 S5 Proxy</a></li>
<li><a href="https://www.proxysp.com/911-s5-proxy/">911 S5 Proxy Review</a></li>
</ul>
</div>
</div>
</div>
]]></content:encoded>
					
					<wfw:commentRss>https://proxysp.com/911-proxy-developer-api/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">10201</post-id>	</item>
	</channel>
</rss>
