> For the complete documentation index, see [llms.txt](https://developers.oxylabs.io/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://developers.oxylabs.io/products/proxies/residential-proxies/session-control.md).

# Session Control & IP Rotation

Learn how to manage Residential Proxy sessions to keep the same IP address across multiple requests and control session length and IP rotation.

Oxylabs Residential Proxies rotate automatically with every request by default. To keep the same IP address for sequential requests, configure sticky session parameters in your username string or connect via sticky proxy entry ports.

<table><thead><tr><th width="156">Method</th><th width="132">Parameter</th><th>Description</th></tr></thead><tbody><tr><td><a href="#default-sticky-sessions-sessid"><strong>Sticky session</strong></a></td><td><code>sessid</code></td><td>Automatically rotates to a new IP to keep the session active. 10 minutes (default).</td></tr><tr><td><a href="#extend-session-duration-sesstime"><strong>Session duration</strong></a></td><td><code>sesstime</code></td><td>Extends <code>sessid</code> lifetime. Session ends once the timer expires. Up to 1440 min (24 hrs)</td></tr><tr><td><a href="#single-ip-strict-session-binding-sessid_oneip"><strong>Single-IP binding</strong></a></td><td><code>sessid_oneip</code></td><td>Binds strictly to a single exit node. Fails with HTTP <code>502</code> if IP drops. Up to 1440 min (24 hrs)</td></tr><tr><td><a href="#sticky-proxy-entry-nodes-port-range"><strong>Sticky ports</strong></a></td><td>Port range</td><td>Port-based stickiness (ports <code>10001–49999</code>) requires no username-based parameters. Up to 10 minutes.</td></tr></tbody></table>

## Default sticky sessions (`sessid`)

The `sessid` parameter routes multiple requests through the same IP address as long as the IP is online. Add `sessid` after your `username` with a random alphanumeric string (e.g. `sessid-abcd1234`):

```
customer-USERNAME-cc-DE-sessid-abcd1234:PASSWORD
```

By default, a session lasts 10 minutes, or ends after 60 seconds without any requests – whichever comes first. Once that happens, a new IP address is assigned automatically so your requests continue uninterrupted. To change the session length, please refer to [Extend session duration](#extend-session-duration-sesstime).

#### Code examples

{% tabs %}
{% tab title="cURL" %}

```shell
curl -x pr.oxylabs.io:7777 -U "customer-USERNAME-cc-DE-sessid-abcd1234:PASSWORD" https://ip.oxylabs.io/location
```

{% endtab %}

{% tab title="PHP" %}

```php
<?php
$username = 'USERNAME';
$password = 'PASSWORD';
$country = 'DE';
$session = mt_rand();
$proxy = 'pr.oxylabs.io:7777';
$query = curl_init('https://ip.oxylabs.io/location');
curl_setopt($query, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($query, CURLOPT_PROXY, "http://$proxy");
curl_setopt($query, CURLOPT_PROXYUSERPWD, "customer-$username-cc-$country-sessid-$session:$password");
$output = curl_exec($query);
curl_close($query);
if ($output)
    echo $output;
?>
```

{% endtab %}

{% tab title="Python" %}

```python
import urllib.request
import random
username = 'USERNAME'
password = 'PASSWORD'
country = 'DE'
session = random.random()
entry = ('http://customer-%s-cc-%s-sessid-%s:%s@pr.oxylabs.io:7777' %
    (username, country, session, password))
query = urllib.request.ProxyHandler({
    'http': entry,
    'https': entry,
})
execute = urllib.request.build_opener(query)
print(execute.open('https://ip.oxylabs.io/location').read())
```

{% endtab %}

{% tab title="Java" %}

```java
package example;

import java.io.*;
import java.util.Random;
import org.apache.http.HttpHost;
import org.apache.http.auth.*;
import org.apache.http.client.CredentialsProvider;
import org.apache.http.client.fluent.Request;
import org.apache.http.client.methods.*;
import org.apache.http.impl.client.*;
import org.apache.http.impl.conn.BasicHttpClientConnectionManager;
import org.apache.http.util.EntityUtils;

class Client {
    public static final String username = "USERNAME";
    public static final String password = "PASSWORD";
    public String session_id = Integer.toString(new Random().nextInt(Integer.MAX_VALUE));
    public CloseableHttpClient client;

    public Client(String country) {
        String login = "customer-"+username+(country!=null ? "-cc-"+country : "")
            +"-sessid-" + session_id;
        HttpHost entry_node = new HttpHost("pr.oxylabs.io:7777");
        CredentialsProvider credentials_provider = new BasicCredentialsProvider();
        credentials_provider.setCredentials(new AuthScope(entry_node),
            new UsernamePasswordCredentials(login, password));
        client = HttpClients.custom()
            .setConnectionManager(new BasicHttpClientConnectionManager())
            .setProxy(entry_node)
            .setDefaultCredentialsProvider(credentials_provider)
            .build();
    }

    public String request(String url) throws IOException {
        HttpGet request = new HttpGet(url);
        CloseableHttpResponse response = client.execute(request);
        try {
            return EntityUtils.toString(response.getEntity());
        } finally { response.close(); }
    }

    public void close() throws IOException { client.close(); }
}

public class Example {
    public static void main(String[] args) throws IOException {
        Client client = new Client("de");
        try {
            System.out.println(client.request("https://ip.oxylabs.io/location"));
        } finally { client.close(); }
    }
}
```

{% endtab %}

{% tab title="C#" %}

```csharp
using System;
using System.Net;

class Client : WebClient
{
    public static string username = "USERNAME";
    public static string password = "PASSWORD";
    public string session_id = new Random().Next().ToString();

    public Client(string country_iso = null)
    {
        this.Proxy = new WebProxy("pr.oxylabs.io:7777");
        var login = "customer-"+username+(country_iso != null ? "-cc-"+country_iso : "")
            +"-sessid-"+session_id;
        this.Proxy.Credentials = new NetworkCredential(login, password);
    }

    protected override WebRequest GetWebRequest(Uri address)
    {
        var request = base.GetWebRequest(address) as HttpWebRequest;
        request.ConnectionGroupName = session_id;
        return request;
    }
}

class Example
{
    static void Main()
    {
        var client = new Client("de");
        Console.WriteLine(client.DownloadString("https://ip.oxylabs.io/location"));
    }
}
```

{% endtab %}

{% tab title="Ruby" %}

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

entry_node = 'pr.oxylabs.io'
entry_port = '7777'
username = 'USERNAME'
password = 'PASSWORD'
session_id = Random.rand(1000000)

uri = URI.parse("https://ip.oxylabs.io/location")
headers = {
    'Accept-Encoding' => 'gzip'
}

proxy = Net::HTTP::Proxy(entry_node, entry_port, "#{username}-cc-DE-sessid-#{session_id}", password)
http = proxy.new(uri.host,uri.port)

if uri.scheme == 'https'
    http.use_ssl = true
    http.verify_mode = OpenSSL::SSL::VERIFY_NONE
end

req = Net::HTTP::Get.new(uri.path, headers)

result = http.start do |con|
    con.request(req)
end

puts result.body
```

{% endtab %}
{% endtabs %}

## Extend session duration (`sesstime`)

Combine the `sesstime` parameter with `sessid` to extend session duration beyond the 10-minute default (or up to 60 seconds of inactivity) up to 1440 minutes (24 hours). Specify duration in minutes (e.g., `sesstime-30` for 30 minutes):

```
customer-USERNAME-cc-DE-sessid-abcd1234-sesstime-30:PASSWORD
```

{% hint style="info" %}
**Note:** Session time parameter does not guarantee that all of your requests finish before the session ends. The session expires once the time limit is reached, even if some requests are still in progress.
{% endhint %}

{% hint style="warning" %}
Because residential proxy IP availability is dynamic, an individual exit node may disconnect before your specified session time expires. If an exit node drops, `sessid` will automatically rotate to a new IP to fulfill your request.&#x20;
{% endhint %}

#### Code examples

We chose the same German IP as in the previous example, this time we are adding `sessid` string and `sesstime` parameter for 7 minutes:

{% tabs %}
{% tab title="cURL" %}

```shell
curl -x pr.oxylabs.io:7777 -U "customer-USERNAME-cc-DE-sessid-abcd1234-sesstime-7:PASSWORD" https://ip.oxylabs.io/location
```

{% endtab %}

{% tab title="PHP" %}

```php
<?php
$username = 'USERNAME';
$password = 'PASSWORD';
$country = 'DE';
$session = mt_rand();
$sesstime = 7;
$proxy = 'pr.oxylabs.io:7777';
$query = curl_init('https://ip.oxylabs.io/location');
curl_setopt($query, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($query, CURLOPT_PROXY, "http://$proxy");
curl_setopt($query, CURLOPT_PROXYUSERPWD, "customer-$username-cc-$country-sessid-$session-sesstime-$sesstime:$password");
$output = curl_exec($query);
curl_close($query);
if ($output)
    echo $output;
?>
```

{% endtab %}

{% tab title="Python" %}

```python
import urllib.request
import random
username = 'USERNAME'
password = 'PASSWORD'
country = 'DE'
session = random.random()
sesstime = 7
entry = ('http://customer-%s-cc-%s-sessid-%s-sesstime-%d:%s@pr.oxylabs.io:7777' %
    (username, country, city, session, sesstime, password))
query = urllib.request.ProxyHandler({
    'http': entry,
    'https': entry,
})
execute = urllib.request.build_opener(query)
print(execute.open('https://ip.oxylabs.io/location').read())
```

{% endtab %}

{% tab title="Java" %}

```java
package example;

import java.io.*;
import java.util.Random;
import org.apache.http.HttpHost;
import org.apache.http.auth.*;
import org.apache.http.client.CredentialsProvider;
import org.apache.http.client.fluent.Request;
import org.apache.http.client.methods.*;
import org.apache.http.impl.client.*;
import org.apache.http.impl.conn.BasicHttpClientConnectionManager;
import org.apache.http.util.EntityUtils;

class Client {
    public static final String username = "USERNAME";
    public static final String password = "PASSWORD";
    public String session_id = Integer.toString(new Random().nextInt(Integer.MAX_VALUE));
    public String sesstime = "7";
    public CloseableHttpClient client;

    public Client(String country) {
        String login = "customer-"+username+(country_iso != null ? "-cc-"+country_iso : "")+"-sessid-"+session_id+"-sesstime-" +sesstime;
        HttpHost entry_node = new HttpHost("pr.oxylabs.io:7777");
        CredentialsProvider credentials_provider = new BasicCredentialsProvider();
        credentials_provider.setCredentials(new AuthScope(entry_node),
            new UsernamePasswordCredentials(login, password));
        client = HttpClients.custom()
            .setConnectionManager(new BasicHttpClientConnectionManager())
            .setProxy(entry_node)
            .setDefaultCredentialsProvider(credentials_provider)
            .build();
    }

    public String request(String url) throws IOException {
        HttpGet request = new HttpGet(url);
        CloseableHttpResponse response = client.execute(request);
        try {
            return EntityUtils.toString(response.getEntity());
        } finally { response.close(); }
    }

    public void close() throws IOException { client.close(); }
}

public class Example {
    public static void main(String[] args) throws IOException {
        Client client = new Client("de");
        try {
            System.out.println(client.request("https://ip.oxylabs.io/location"));
        } finally { client.close(); }
    }
}
```

{% endtab %}

{% tab title="C#" %}

```csharp
using System;
using System.Net;

class Client : WebClient
{
    public static string username = "USERNAME";
    public static string password = "PASSWORD";
    public string session_id = new Random().Next().ToString();

    public Client(string country_iso = null)
    {
        this.Proxy = new WebProxy("pr.oxylabs.io:7777");
        var login = "customer-"+username+(country_iso != null ? "-cc-"+country_iso : "")
            +"-sessid-"+session_id;
        this.Proxy.Credentials = new NetworkCredential(login, password);
    }

    protected override WebRequest GetWebRequest(Uri address)
    {
        var request = base.GetWebRequest(address) as HttpWebRequest;
        request.ConnectionGroupName = session_id;
        return request;
    }
}

class Example
{
    static void Main()
    {
        var client = new Client("de");
        Console.WriteLine(client.DownloadString("https://ip.oxylabs.io/location"));
    }
}
```

{% endtab %}

{% tab title="Ruby" %}

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

entry_node = 'pr.oxylabs.io'
entry_port = '7777'
username = 'USERNAME'
password = 'PASSWORD'
session_id = Random.rand(1000000)
sesstime = 7

uri = URI.parse("https://ip.oxylabs.io/location")
headers = {
    'Accept-Encoding' => 'gzip'
}

proxy = Net::HTTP::Proxy(entry_node, entry_port, "#{username}-cc-DE-sessid-#{session_id}-sesstime-#{sesstime}", password)
http = proxy.new(uri.host,uri.port)

if uri.scheme == 'https'
    http.use_ssl = true
    http.verify_mode = OpenSSL::SSL::VERIFY_NONE
end

req = Net::HTTP::Get.new(uri.path, headers)

result = http.start do |con|
    con.request(req)
end

puts result.body
```

{% endtab %}
{% endtabs %}

## Single-IP session binding (`sessid_oneip`)

Use `sessid_oneip` instead of `sessid` when your workflow requires strict IP consistency and cannot tolerate IP rotation mid-session.&#x20;

Unlike standard sticky sessions, if the assigned exit node goes offline, the system will not rotate to a new IP, and instead the request fails with an HTTP `502 Bad Gateway` error. When a `502` occurs, initiate a new session using a fresh `sessid_oneip` string. `sessid_oneip` can be combined with `sesstime` in the same way as `sessid`.

```
customer-USERNAME-cc-DE-sessid_oneip-qwert-sesstime-10:PASSWORD
```

#### Code examples

{% tabs %}
{% tab title="cURL" %}

```shell
curl -x pr.oxylabs.io:7777 -U "customer-USERNAME-cc-DE-sessid_oneip-abcd1234:PASSWORD" https://ip.oxylabs.io/location
```

{% endtab %}

{% tab title="PHP" %}

```php
<?php
$username = 'USERNAME';
$password = 'PASSWORD';
$country = 'DE';
$session = mt_rand();
$proxy = 'pr.oxylabs.io:7777';
$query = curl_init('https://ip.oxylabs.io/location');
curl_setopt($query, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($query, CURLOPT_PROXY, "http://$proxy");
curl_setopt($query, CURLOPT_PROXYUSERPWD, "customer-$username-cc-$country-sessid_oneip-$session:$password");
$output = curl_exec($query);
curl_close($query);
if ($output)
    echo $output;
?>
```

{% endtab %}

{% tab title="Python" %}

```python
import urllib.request
import random
username = 'USERNAME'
password = 'PASSWORD'
country = 'DE'
session = random.random()
entry = ('http://customer-%s-cc-%s-sessid_oneip-%s:%s@pr.oxylabs.io:7777' %
    (username, country, session, password))
query = urllib.request.ProxyHandler({
    'http': entry,
    'https': entry,
})
execute = urllib.request.build_opener(query)
print(execute.open('https://ip.oxylabs.io/location').read())
```

{% endtab %}

{% tab title="Java" %}

```java
package example;

import java.io.*;
import java.util.Random;
import org.apache.http.HttpHost;
import org.apache.http.auth.*;
import org.apache.http.client.CredentialsProvider;
import org.apache.http.client.fluent.Request;
import org.apache.http.client.methods.*;
import org.apache.http.impl.client.*;
import org.apache.http.impl.conn.BasicHttpClientConnectionManager;
import org.apache.http.util.EntityUtils;

class Client {
    public static final String username = "USERNAME";
    public static final String password = "PASSWORD";
    public String session_id = Integer.toString(new Random().nextInt(Integer.MAX_VALUE));
    public CloseableHttpClient client;

    public Client(String country) {
        String login = "customer-"+username+(country!=null ? "-cc-"+country : "")
            +"-sessid_oneip-" + session_id;
        HttpHost entry_node = new HttpHost("pr.oxylabs.io:7777");
        CredentialsProvider credentials_provider = new BasicCredentialsProvider();
        credentials_provider.setCredentials(new AuthScope(entry_node),
            new UsernamePasswordCredentials(login, password));
        client = HttpClients.custom()
            .setConnectionManager(new BasicHttpClientConnectionManager())
            .setProxy(entry_node)
            .setDefaultCredentialsProvider(credentials_provider)
            .build();
    }

    public String request(String url) throws IOException {
        HttpGet request = new HttpGet(url);
        CloseableHttpResponse response = client.execute(request);
        try {
            return EntityUtils.toString(response.getEntity());
        } finally { response.close(); }
    }

    public void close() throws IOException { client.close(); }
}

public class Example {
    public static void main(String[] args) throws IOException {
        Client client = new Client("de");
        try {
            System.out.println(client.request("https://ip.oxylabs.io/location"));
        } finally { client.close(); }
    }
}
```

{% endtab %}

{% tab title="C#" %}

```csharp
using System;
using System.Net;

class Client : WebClient
{
    public static string username = "USERNAME";
    public static string password = "PASSWORD";
    public string session_id = new Random().Next().ToString();

    public Client(string country_iso = null)
    {
        this.Proxy = new WebProxy("pr.oxylabs.io:7777");
        var login = "customer-"+username+(country_iso != null ? "-cc-"+country_iso : "")
            +"-sessid_oneip-"+session_id;
        this.Proxy.Credentials = new NetworkCredential(login, password);
    }

    protected override WebRequest GetWebRequest(Uri address)
    {
        var request = base.GetWebRequest(address) as HttpWebRequest;
        request.ConnectionGroupName = session_id;
        return request;
    }
}

class Example
{
    static void Main()
    {
        var client = new Client("de");
        Console.WriteLine(client.DownloadString("https://ip.oxylabs.io/location"));
    }
}
```

{% endtab %}

{% tab title="Ruby" %}

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

entry_node = 'pr.oxylabs.io'
entry_port = '7777'
username = 'USERNAME'
password = 'PASSWORD'
session_id = Random.rand(1000000)

uri = URI.parse("https://ip.oxylabs.io/location")
headers = {
    'Accept-Encoding' => 'gzip'
}

proxy = Net::HTTP::Proxy(entry_node, entry_port, "#{username}-cc-DE-sessid_oneip-#{session_id}", password)
http = proxy.new(uri.host,uri.port)

if uri.scheme == 'https'
    http.use_ssl = true
    http.verify_mode = OpenSSL::SSL::VERIFY_NONE
end

req = Net::HTTP::Get.new(uri.path, headers)

result = http.start do |con|
    con.request(req)
end

puts result.body
```

{% endtab %}
{% endtabs %}

## Sticky proxy entry nodes (Port range)

Connect to country-specific entry node points on dedicated port ranges (`10001–49999`) to maintain an IP address for up to 10 minutes without passing `sessid` parameters in your username string. Reusing the same port keeps the same exit node, while changing the port assigns a new sticky IP.

{% hint style="info" %}
Country-specific sticky entry ports support standard username/password and IP Whitelisting authentication, but do not support city or state-level parameters.&#x20;
{% endhint %}

See the [**Oxylabs dashboard**](https://dashboard.oxylabs.io/en/) for entry point information, download a complete list of sticky entry points, or see them in the table below.

{% file src="/files/9iaqY6oaoc8X7lW6q31e" %}

<details>

<summary><strong>Full list of sticky proxy entry nodes</strong></summary>

{% hint style="success" %}
Feel free to use the table search bar below for easier navigation.
{% endhint %}

| <p>Random<br>pr.oxylabs.io:10000 - 49999</p>                      | <p>US<br>us-pr.oxylabs.io:10001 - 19999</p>                     | <p>Canada<br>ca-pr.oxylabs.io:30001 - 39999</p>                 |
| ----------------------------------------------------------------- | --------------------------------------------------------------- | --------------------------------------------------------------- |
| <p>Great Britain<br>gb-pr.oxylabs.io:20001 - 29999</p>            | <p>Germany<br>de-pr.oxylabs.io:30001 - 39999</p>                | <p>France<br>fr-pr.oxylabs.io:40001 - 49999</p>                 |
| <p>Spain<br>es-pr.oxylabs.io:10001 - 19999</p>                    | <p>Italy<br>it-pr.oxylabs.io:20001 - 29999</p>                  | <p>Sweden<br>se-pr.oxylabs.io:30001 - 39999</p>                 |
| <p>Greece<br>gr-pr.oxylabs.io:40001 - 49999</p>                   | <p>Portugal<br>pt-pr.oxylabs.io:10001 - 19999</p>               | <p>Netherlands<br>nl-pr.oxylabs.io:20001 - 29999</p>            |
| <p>Belgium<br>be-pr.oxylabs.io:30001 - 39999</p>                  | <p>Russia<br>ru-pr.oxylabs.io:40001 - 49999</p>                 | <p>Ukraine<br>ua-pr.oxylabs.io:10001 - 19999</p>                |
| <p>Poland<br>pl-pr.oxylabs.io:20001 - 29999</p>                   | <p>Israel<br>il-pr.oxylabs.io:20001 - 29999</p>                 | <p>Turkey<br>tr-pr.oxylabs.io:30001 - 39999</p>                 |
| <p>Australia<br>au-pr.oxylabs.io:40001 - 49999</p>                | <p>Malaysia<br>my-pr.oxylabs.io:10001 - 19999</p>               | <p>Thailand<br>th-pr.oxylabs.io:20001 - 29999</p>               |
| <p>South Korea<br>kr-pr.oxylabs.io:30001 - 39999</p>              | <p>Japan<br>jp-pr.oxylabs.io:40001 - 49999</p>                  | <p>Philippines<br>ph-pr.oxylabs.io:10001 - 19999</p>            |
| <p>Singapore<br>sg-pr.oxylabs.io:20001 - 29999</p>                | <p>China<br>cn-pr.oxylabs.io:30001 - 39999</p>                  | <p>Hong Kong<br>hk-pr.oxylabs.io:40001 - 49999</p>              |
| <p>Taiwan<br>tw-pr.oxylabs.io:10001 - 19999</p>                   | <p>India<br>in-pr.oxylabs.io:20001 - 29999</p>                  | <p>Pakistan<br>pk-pr.oxylabs.io:30001 - 39999</p>               |
| <p>Iran<br>ir-pr.oxylabs.io:40001 - 49999</p>                     | <p>Indonesia<br>id-pr.oxylabs.io:10001 - 19999</p>              | <p>Azerbaijan<br>az-pr.oxylabs.io:20001 - 29999</p>             |
| <p>Kazakhstan<br>kz-pr.oxylabs.io:30001 - 39999</p>               | <p>UAE<br>ae-pr.oxylabs.io:40001 - 49999</p>                    | <p>Mexico<br>mx-pr.oxylabs.io:10001 - 19999</p>                 |
| <p>Brazil<br>br-pr.oxylabs.io:20001 - 29999</p>                   | <p>Argentina<br>ar-pr.oxylabs.io:30001 - 39999</p>              | <p>Chile<br>cl-pr.oxylabs.io:40001 - 49999</p>                  |
| <p>Peru<br>pe-pr.oxylabs.io:10001 - 19999</p>                     | <p>Ecuador<br>ec-pr.oxylabs.io:20001 - 29999</p>                | <p>Colombia<br>co-pr.oxylabs.io:30001 - 39999</p>               |
| <p>South Africa<br>za-pr.oxylabs.io:40001 - 49999</p>             | <p>Egypt<br>eg-pr.oxylabs.io:10001 - 19999</p>                  | <p>Saudi Arabia<br>sa-pr.oxylabs.io:44001 - 44999</p>           |
| <p>Denmark<br>dk-pr.oxylabs.io:19001 - 19999</p>                  | <p>Mali<br>ml-pr.oxylabs.io:13001 - 13999</p>                   | <p>Cyprus<br>cy-pr.oxylabs.io:35001 - 35999</p>                 |
| <p>Honduras<br>hn-pr.oxylabs.io:48001 - 48999</p>                 | <p>Georgia<br>ge-pr.oxylabs.io:36001 - 36999</p>                | <p>Serbia<br>rs-pr.oxylabs.io:36001 - 36999</p>                 |
| <p>Costa Rica<br>cr-pr.oxylabs.io:44001 - 44999</p>               | <p>Malta<br>mt-pr.oxylabs.io:30001 - 30999</p>                  | <p>Haiti<br>ht-pr.oxylabs.io:47001 - 47999</p>                  |
| <p>Senegal<br>sn-pr.oxylabs.io:19001 - 19999</p>                  | <p>Slovenia<br>si-pr.oxylabs.io:38001 - 38999</p>               | <p>Cameroon<br>cm-pr.oxylabs.io:41001 - 41999</p>               |
| <p>Djibouti<br>dj-pr.oxylabs.io:46001 - 46999</p>                 | <p>Angola<br>ao-pr.oxylabs.io:40001 - 40999</p>                 | <p>Liberia<br>lr-pr.oxylabs.io:11001 - 11999</p>                |
| <p>Afghanistan<br>af-pr.oxylabs.io:28001 - 28999</p>              | <p>Bangladesh<br>bd-pr.oxylabs.io:30001 - 30999</p>             | <p>Bahamas<br>bs-pr.oxylabs.io:41001 - 41999</p>                |
| <p>Hungary<br>hu-pr.oxylabs.io:23001 - 23999</p>                  | <p>Slovakia<br>sk-pr.oxylabs.io:37001 - 37999</p>               | <p>Dominica<br>dm-pr.oxylabs.io:46001 - 46999</p>               |
| <p>Kenya<br>ke-pr.oxylabs.io:10001 - 10999</p>                    | <p>Bosnia and Herzegovina<br>ba-pr.oxylabs.io:13001 - 13999</p> | <p>Nigeria<br>ng-pr.oxylabs.io:18001 - 18999</p>                |
| <p>Qatar<br>qa-pr.oxylabs.io:43001 - 43999</p>                    | <p>Yemen<br>ye-pr.oxylabs.io:48001 - 48999</p>                  | <p>Belize<br>bz-pr.oxylabs.io:42001 - 42999</p>                 |
| <p>Chad<br>td-pr.oxylabs.io:43001 - 43999</p>                     | <p>Tunisia<br>tn-pr.oxylabs.io:25001 - 25999</p>                | <p>Zimbabwe<br>zw-pr.oxylabs.io:21001 - 21999</p>               |
| <p>Zambia<br>zm-pr.oxylabs.io:27001 - 27999</p>                   | <p>Bahrain<br>bh-pr.oxylabs.io:29001 - 29999</p>                | <p>Austria<br>at-pr.oxylabs.io:11001 - 11999</p>                |
| <p>Ireland<br>ie-pr.oxylabs.io:25001 - 25999</p>                  | <p>Norway<br>no-pr.oxylabs.io:34001 - 34999</p>                 | <p>Ethiopia<br>et-pr.oxylabs.io:45001 - 45999</p>               |
| <p>Côte d'Ivoire<br>ci-pr.oxylabs.io:49001 - 49999</p>            | <p>Fiji<br>fj-pr.oxylabs.io:14001 - 14999</p>                   | <p>South Sudan<br>ss-pr.oxylabs.io:22001 - 22999</p>            |
| <p>Jamaica<br>jm-pr.oxylabs.io:49001 - 49999</p>                  | <p>Belarus<br>by-pr.oxylabs.io:15001 - 15999</p>                | <p>Finland<br>fi-pr.oxylabs.io:21001 - 21999</p>                |
| <p>Monaco<br>mc-pr.oxylabs.io:31001 - 31999</p>                   | <p>New Zealand<br>nz-pr.oxylabs.io:15001 - 15999</p>            | <p>Turkmenistan<br>tm-pr.oxylabs.io:46001 - 46999</p>           |
| <p>Armenia<br>am-pr.oxylabs.io:31001 - 31999</p>                  | <p>Iceland<br>is-pr.oxylabs.io:24001 - 24999</p>                | <p>Mauritania<br>mr-pr.oxylabs.io:14001 - 14999</p>             |
| <p>Czech Republic<br>cz-pr.oxylabs.io:18001 - 18999</p>           | <p>Venezuela<br>ve-pr.oxylabs.io:19001 - 19999</p>              | <p>Lebanon<br>lb-pr.oxylabs.io:39001 - 39999</p>                |
| <p>Mongolia<br>mn-pr.oxylabs.io:41001 - 41999</p>                 | <p>Benin<br>bj-pr.oxylabs.io:44001 - 44999</p>                  | <p>Sudan<br>sd-pr.oxylabs.io:23001 - 23999</p>                  |
| <p>Jordan<br>jo-pr.oxylabs.io:38001 - 38999</p>                   | <p>Estonia<br>ee-pr.oxylabs.io:20001 - 20999</p>                | <p>Paraguay<br>py-pr.oxylabs.io:17001 - 17999</p>               |
| <p>Central African Republic<br>cf-pr.oxylabs.io:42001 - 42999</p> | <p>Cambodia<br>kh-pr.oxylabs.io:34001 - 34999</p>               | <p>Panama<br>pa-pr.oxylabs.io:10001 - 10999</p>                 |
| <p>Uruguay<br>uy-pr.oxylabs.io:18001 - 18999</p>                  | <p>Ghana<br>gh-pr.oxylabs.io:48001 - 48999</p>                  | <p>Uzbekistan<br>uz-pr.oxylabs.io:47001 - 47999</p>             |
| <p>Albania<br>al-pr.oxylabs.io:49001 - 49999</p>                  | <p>Morocco<br>ma-pr.oxylabs.io:16001 - 16999</p>                | <p>Bhutan<br>bt-pr.oxylabs.io:32001 - 32999</p>                 |
| <p>Mauritius<br>mu-pr.oxylabs.io:15001 - 15999</p>                | <p>Latvia<br>lv-pr.oxylabs.io:26001 - 26999</p>                 | <p>Madagascar<br>mg-pr.oxylabs.io:12001 - 12999</p>             |
| <p>Lithuania<br>lt-pr.oxylabs.io:28001 - 28999</p>                | <p>Moldova<br>md-pr.oxylabs.io:32001 - 32999</p>                | <p>Montenegro<br>me-pr.oxylabs.io:33001 - 33999</p>             |
| <p>Romania<br>ro-pr.oxylabs.io:35001 - 35999</p>                  | <p>Iraq<br>iq-pr.oxylabs.io:37001 - 37999</p>                   | <p>Gambia<br>gm-pr.oxylabs.io:47001 - 47999</p>                 |
| <p>Mozambique<br>mz-pr.oxylabs.io:17001 - 17999</p>               | <p>Croatia<br>hr-pr.oxylabs.io:16001 - 16999</p>                | <p>Puerto Rico<br>pr-pr.oxylabs.io:12001 - 12999</p>            |
| <p>Cuba<br>cu-pr.oxylabs.io:45001 - 45999</p>                     | <p>Aruba<br>aw-pr.oxylabs.io:10001 - 10999</p>                  | <p>Seychelles<br>sc-pr.oxylabs.io:20001 - 20999</p>             |
| <p>Macedonia<br>mk-pr.oxylabs.io:40001 - 40999</p>                | <p>Maldives<br>mv-pr.oxylabs.io:40001 - 40999</p>               | <p>Oman<br>om-pr.oxylabs.io:42001 - 42999</p>                   |
| <p>Liechtenstein<br>li-pr.oxylabs.io:27001 - 27999</p>            | <p>Switzerland<br>ch-pr.oxylabs.io:39001 - 39999</p>            | <p>Bolivia<br>bo-pr.oxylabs.io:16001 - 16999</p>                |
| <p>Uganda<br>ug-pr.oxylabs.io:26001 - 26999</p>                   | <p>Bulgaria<br>bg-pr.oxylabs.io:14001 - 14999</p>               | <p>Myanmar<br>mm-pr.oxylabs.io:33001 - 33999</p>                |
| <p>Andorra<br>ad-pr.oxylabs.io:10001 - 10999</p>                  | <p>Togo<br>tg-pr.oxylabs.io:24001 - 24999</p>                   | <p>British Virgin Islands<br>vg-pr.oxylabs.io:43001 - 43999</p> |
| <p>Trinidad and Tobago<br>tt-pr.oxylabs.io:13001 - 13999</p>      | <p>Luxembourg<br>lu-pr.oxylabs.io:29001 - 29999</p>             | <p>​European Union</p><p>eu-pr.oxylabs.io:10001 - 29999</p>     |

</details>

#### Code examples

{% tabs %}
{% tab title="cURL" %}

```shell
curl -x tr-pr.oxylabs.io:30001 -U "customer-USERNAME:PASSWORD" https://ip.oxylabs.io/location
```

{% endtab %}

{% tab title="PHP" %}

```php
<?php
$username = 'USERNAME';
$password = 'PASSWORD';
$proxy = 'tr-pr.oxylabs.io:30001';
$query = curl_init('https://ip.oxylabs.io/location');
curl_setopt($query, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($query, CURLOPT_PROXY, "http://$proxy");
curl_setopt($query, CURLOPT_PROXYUSERPWD, "customer-$username:$password");
$output = curl_exec($query);
curl_close($query);
if ($output)
    echo $output;
?>
```

{% endtab %}

{% tab title="Python" %}

```python
import urllib.request
import random
username = 'USERNAME'
password = 'PASSWORD'
entry = ('http://customer-%s:%s@tr-pr.oxylabs.io:30001' %
    (username, password))
query = urllib.request.ProxyHandler({
    'http': entry,
    'https': entry,
})
execute = urllib.request.build_opener(query)
print(execute.open('https://ip.oxylabs.io/location').read())
```

{% endtab %}

{% tab title="Java" %}

```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 {
        HttpHost entry = new HttpHost("tr-pr.oxylabs.io", 30001);
        String query = Executor.newInstance()
            .auth(entry, "customer-USERNAME", "PASS")
            .execute(Request.Get("http://ip.oxylabs.io/location").viaProxy(entry))
            .returnContent().asString();
        System.out.println(query);
    }
}
```

{% endtab %}

{% tab title="C#" %}

```csharp
using System;
using System;
using System.Net;

class Example
{
    static void Main()
    {
        var client = new WebClient();
        client.Proxy = new WebProxy("tr-pr.oxylabs.io:30001");
        client.Proxy.Credentials = new NetworkCredential("customer-USERNAME", "PASSWORD");
        Console.WriteLine(client.DownloadString("https://ip.oxylabs.io/location"));
    }
}
```

{% endtab %}

{% tab title="Ruby" %}

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

uri = URI.parse('https://ip.oxylabs.io/location')
proxy = Net::HTTP::Proxy('tr-pr.oxylabs.io', 30001, 'customer-USERNAME', 'PASSWORD')

req = Net::HTTP::Get.new(uri.path)

result = proxy.start(uri.host,uri.port) do |http|
    http.request(req)
end

puts result.body
```

{% endtab %}
{% endtabs %}


---

# Agent Instructions
This documentation is published with GitBook. GitBook is the documentation platform designed so that both humans and AI agents can read, navigate, and reason over technical content effectively. Learn more at gitbook.com.

## Querying This Documentation
If you need additional information that is not directly available in this page, you can query the documentation by asking a question.

Perform an HTTP GET request on the following URL with the `ask` and `goal` query parameters:

```
GET https://developers.oxylabs.io/products/proxies/residential-proxies/session-control.md?ask=<question>&goal=<user_goal>
```

`ask` is the immediate question: it should be specific, self-contained, and written in natural language.
`goal` is what the user is ultimately trying to achieve, the reason they need the answer. Sharing it helps GitBook give you a better, more relevant answer. A goal is most helpful when it describes the outcome the user wants rather than restating the question. For example, with `ask=how do I create an API token`, a goal like `automate deployments from our CI pipeline` lets GitBook tailor the answer to that use case.

The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
