> 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/cn/proxies/residential-proxies/session-control.md).

# 会话控制与 IP 轮换

了解如何管理住宅代理会话，以便在多个请求中保持相同的 IP 地址，并控制会话时长和 IP 轮换。

Oxylabs 住宅代理默认会在每次请求时自动轮换。要为连续请求保持相同的 IP 地址，请在用户名字符串中配置粘性会话参数，或通过粘性代理入口端口连接。

<table><thead><tr><th width="156">方法</th><th width="132">参数</th><th>说明</th></tr></thead><tbody><tr><td><a href="#default-sticky-sessions-sessid"><strong>粘性会话</strong></a></td><td><code>sessid</code></td><td>自动轮换到新的 IP 以保持会话活跃。10 分钟（默认）。</td></tr><tr><td><a href="#extend-session-duration-sesstime"><strong>会话持续时间</strong></a></td><td><code>sesstime</code></td><td>延长 <code>sessid</code> 有效期。计时器到期后会话结束。最长 1440 分钟（24 小时）</td></tr><tr><td><a href="#single-ip-strict-session-binding-sessid_oneip"><strong>单 IP 绑定</strong></a></td><td><code>sessid_oneip</code></td><td>严格绑定到单个出口节点。若 IP 掉线，将以 HTTP <code>502</code> 错误失败。最长 1440 分钟（24 小时）</td></tr><tr><td><a href="#sticky-proxy-entry-nodes-port-range"><strong>粘性端口</strong></a></td><td>端口范围</td><td>基于端口的粘性（端口 <code>10001–49999</code>）无需基于用户名的参数。最长 10 分钟。</td></tr></tbody></table>

## 默认粘性会话（`sessid`)

该 `sessid` 该参数会在 IP 在线时将多个请求路由到同一 IP 地址。将 `sessid` 在你的 `用户名` 后附加一个随机字母数字字符串（例如 `sessid-abcd1234`):

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

默认情况下，会话持续 10 分钟，或者在 60 秒内没有任何请求后结束——以先到者为准。一旦发生这种情况，系统会自动分配一个新的 IP 地址，以便你的请求不中断。要更改会话时长，请参阅 [延长会话持续时间](#extend-session-duration-sesstime).

#### 代码示例

{% 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 %}

## 延长会话持续时间（`sesstime`)

将 `sesstime` 参数与 `sessid` 结合使用，可将会话持续时间从 10 分钟默认值（或最长 60 秒无活动）延长至最多 1440 分钟（24 小时）。以分钟为单位指定时长（例如， `sesstime-30` 表示 30 分钟）：

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

{% hint style="info" %}
**注意：** 会话时长参数不能保证所有请求都在会话结束前完成。即使部分请求仍在进行中，只要达到时间限制，会话就会过期。
{% endhint %}

{% hint style="warning" %}
由于住宅代理 IP 可用性是动态的，单个出口节点可能会在你指定的会话时间到期前断开。如果出口节点掉线， `sessid` 将自动轮换到新的 IP 以完成你的请求。&#x20;
{% endhint %}

#### 代码示例

我们沿用前一个示例中的同一个德国 IP，这次我们添加 `sessid` 字符串和 `sesstime` 参数，持续 7 分钟：

{% 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 %}

## 单 IP 会话绑定（`sessid_oneip`)

使用 `sessid_oneip` 而不是 `sessid` 当你的工作流需要严格的 IP 一致性且无法容忍会话中途 IP 轮换时。&#x20;

与标准粘性会话不同，如果分配的出口节点离线，系统不会轮换到新 IP，而是请求以 HTTP `502 Bad Gateway` 错误失败。当 `502` 发生时，请使用新的 `sessid_oneip` 字符串启动新会话。 `sessid_oneip` 可与 `sesstime` 以与 `sessid`.

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

#### 代码示例

{% 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 %}

## 粘性代理入口节点（端口范围）

连接到特定国家/地区的入口节点点位，使用专用端口范围（`10001–49999`）即可在不传递 `sessid` 用户名字符串中的参数的情况下，将 IP 地址保持最长 10 分钟。重复使用同一端口可保持相同的出口节点，而更改端口会分配一个新的粘性 IP。

{% hint style="info" %}
特定国家/地区的粘性入口端口支持标准用户名/密码和 IP 白名单认证，但不支持城市或州级参数。&#x20;
{% endhint %}

请参阅 [**Oxylabs 仪表板**](https://dashboard.oxylabs.io/en/) 以获取入口点信息，下载完整的粘性入口点列表，或在下表中查看它们。

{% file src="/files/379ee2086414ec844a7650a7ace37f9806b13d33" %}

<details>

<summary><strong>粘性代理入口节点完整列表</strong></summary>

{% hint style="success" %}
你也可以使用下方的表格搜索栏，便于导航。
{% endhint %}

| <p>随机<br>pr.oxylabs.io:10000 - 49999</p>          | <p>美国<br>us-pr.oxylabs.io:10001 - 19999</p>         | <p>加拿大<br>ca-pr.oxylabs.io:30001 - 39999</p>     |
| ------------------------------------------------- | --------------------------------------------------- | ------------------------------------------------ |
| <p>英国<br>gb-pr.oxylabs.io:20001 - 29999</p>       | <p>德国<br>de-pr.oxylabs.io:30001 - 39999</p>         | <p>法国<br>fr-pr.oxylabs.io:40001 - 49999</p>      |
| <p>西班牙<br>es-pr.oxylabs.io:10001 - 19999</p>      | <p>意大利<br>it-pr.oxylabs.io:20001 - 29999</p>        | <p>瑞典<br>se-pr.oxylabs.io:30001 - 39999</p>      |
| <p>希腊<br>gr-pr.oxylabs.io:40001 - 49999</p>       | <p>葡萄牙<br>pt-pr.oxylabs.io:10001 - 19999</p>        | <p>荷兰<br>nl-pr.oxylabs.io:20001 - 29999</p>      |
| <p>比利时<br>be-pr.oxylabs.io:30001 - 39999</p>      | <p>俄罗斯<br>ru-pr.oxylabs.io:40001 - 49999</p>        | <p>乌克兰<br>ua-pr.oxylabs.io:10001 - 19999</p>     |
| <p>波兰<br>pl-pr.oxylabs.io:20001 - 29999</p>       | <p>以色列<br>il-pr.oxylabs.io:20001 - 29999</p>        | <p>土耳其<br>tr-pr.oxylabs.io:30001 - 39999</p>     |
| <p>澳大利亚<br>au-pr.oxylabs.io:40001 - 49999</p>     | <p>马来西亚<br>my-pr.oxylabs.io:10001 - 19999</p>       | <p>泰国<br>th-pr.oxylabs.io:20001 - 29999</p>      |
| <p>韩国<br>kr-pr.oxylabs.io:30001 - 39999</p>       | <p>日本<br>jp-pr.oxylabs.io:40001 - 49999</p>         | <p>菲律宾<br>ph-pr.oxylabs.io:10001 - 19999</p>     |
| <p>新加坡<br>sg-pr.oxylabs.io:20001 - 29999</p>      | <p>中国<br>cn-pr.oxylabs.io:30001 - 39999</p>         | <p>香港<br>hk-pr.oxylabs.io:40001 - 49999</p>      |
| <p>台湾<br>tw-pr.oxylabs.io:10001 - 19999</p>       | <p>印度<br>in-pr.oxylabs.io:20001 - 29999</p>         | <p>巴基斯坦<br>pk-pr.oxylabs.io:30001 - 39999</p>    |
| <p>伊朗<br>ir-pr.oxylabs.io:40001 - 49999</p>       | <p>印度尼西亚<br>id-pr.oxylabs.io:10001 - 19999</p>      | <p>阿塞拜疆<br>az-pr.oxylabs.io:20001 - 29999</p>    |
| <p>哈萨克斯坦<br>kz-pr.oxylabs.io:30001 - 39999</p>    | <p>阿联酋<br>ae-pr.oxylabs.io:40001 - 49999</p>        | <p>墨西哥<br>mx-pr.oxylabs.io:10001 - 19999</p>     |
| <p>巴西<br>br-pr.oxylabs.io:20001 - 29999</p>       | <p>阿根廷<br>ar-pr.oxylabs.io:30001 - 39999</p>        | <p>智利<br>cl-pr.oxylabs.io:40001 - 49999</p>      |
| <p>秘鲁<br>pe-pr.oxylabs.io:10001 - 19999</p>       | <p>厄瓜多尔<br>ec-pr.oxylabs.io:20001 - 29999</p>       | <p>哥伦比亚<br>co-pr.oxylabs.io:30001 - 39999</p>    |
| <p>南非<br>za-pr.oxylabs.io:40001 - 49999</p>       | <p>埃及<br>eg-pr.oxylabs.io:10001 - 19999</p>         | <p>沙特阿拉伯<br>sa-pr.oxylabs.io:44001 - 44999</p>   |
| <p>丹麦<br>dk-pr.oxylabs.io:19001 - 19999</p>       | <p>马里<br>ml-pr.oxylabs.io:13001 - 13999</p>         | <p>塞浦路斯<br>cy-pr.oxylabs.io:35001 - 35999</p>    |
| <p>洪都拉斯<br>hn-pr.oxylabs.io:48001 - 48999</p>     | <p>格鲁吉亚<br>ge-pr.oxylabs.io:36001 - 36999</p>       | <p>塞尔维亚<br>rs-pr.oxylabs.io:36001 - 36999</p>    |
| <p>哥斯达黎加<br>cr-pr.oxylabs.io:44001 - 44999</p>    | <p>马耳他<br>mt-pr.oxylabs.io:30001 - 30999</p>        | <p>海地<br>ht-pr.oxylabs.io:47001 - 47999</p>      |
| <p>塞内加尔<br>sn-pr.oxylabs.io:19001 - 19999</p>     | <p>斯洛文尼亚<br>si-pr.oxylabs.io:38001 - 38999</p>      | <p>喀麦隆<br>cm-pr.oxylabs.io:41001 - 41999</p>     |
| <p>吉布提<br>dj-pr.oxylabs.io:46001 - 46999</p>      | <p>安哥拉<br>ao-pr.oxylabs.io:40001 - 40999</p>        | <p>利比里亚<br>lr-pr.oxylabs.io:11001 - 11999</p>    |
| <p>阿富汗<br>af-pr.oxylabs.io:28001 - 28999</p>      | <p>孟加拉国<br>bd-pr.oxylabs.io:30001 - 30999</p>       | <p>巴哈马<br>bs-pr.oxylabs.io:41001 - 41999</p>     |
| <p>匈牙利<br>hu-pr.oxylabs.io:23001 - 23999</p>      | <p>斯洛伐克<br>sk-pr.oxylabs.io:37001 - 37999</p>       | <p>多米尼克<br>dm-pr.oxylabs.io:46001 - 46999</p>    |
| <p>肯尼亚<br>ke-pr.oxylabs.io:10001 - 10999</p>      | <p>波斯尼亚和黑塞哥维那<br>ba-pr.oxylabs.io:13001 - 13999</p> | <p>尼日利亚<br>ng-pr.oxylabs.io:18001 - 18999</p>    |
| <p>卡塔尔<br>qa-pr.oxylabs.io:43001 - 43999</p>      | <p>也门<br>ye-pr.oxylabs.io:48001 - 48999</p>         | <p>伯利兹<br>bz-pr.oxylabs.io:42001 - 42999</p>     |
| <p>乍得<br>td-pr.oxylabs.io:43001 - 43999</p>       | <p>突尼斯<br>tn-pr.oxylabs.io:25001 - 25999</p>        | <p>津巴布韦<br>zw-pr.oxylabs.io:21001 - 21999</p>    |
| <p>赞比亚<br>zm-pr.oxylabs.io:27001 - 27999</p>      | <p>巴林<br>bh-pr.oxylabs.io:29001 - 29999</p>         | <p>奥地利<br>at-pr.oxylabs.io:11001 - 11999</p>     |
| <p>爱尔兰<br>ie-pr.oxylabs.io:25001 - 25999</p>      | <p>挪威<br>no-pr.oxylabs.io:34001 - 34999</p>         | <p>埃塞俄比亚<br>et-pr.oxylabs.io:45001 - 45999</p>   |
| <p>科特迪瓦<br>ci-pr.oxylabs.io:49001 - 49999</p>     | <p>斐济<br>fj-pr.oxylabs.io:14001 - 14999</p>         | <p>南苏丹<br>ss-pr.oxylabs.io:22001 - 22999</p>     |
| <p>牙买加<br>jm-pr.oxylabs.io:49001 - 49999</p>      | <p>白俄罗斯<br>by-pr.oxylabs.io:15001 - 15999</p>       | <p>芬兰<br>fi-pr.oxylabs.io:21001 - 21999</p>      |
| <p>摩纳哥<br>mc-pr.oxylabs.io:31001 - 31999</p>      | <p>新西兰<br>nz-pr.oxylabs.io:15001 - 15999</p>        | <p>土库曼斯坦<br>tm-pr.oxylabs.io:46001 - 46999</p>   |
| <p>亚美尼亚<br>am-pr.oxylabs.io:31001 - 31999</p>     | <p>冰岛<br>is-pr.oxylabs.io:24001 - 24999</p>         | <p>毛里塔尼亚<br>mr-pr.oxylabs.io:14001 - 14999</p>   |
| <p>捷克共和国<br>cz-pr.oxylabs.io:18001 - 18999</p>    | <p>委内瑞拉<br>ve-pr.oxylabs.io:19001 - 19999</p>       | <p>黎巴嫩<br>lb-pr.oxylabs.io:39001 - 39999</p>     |
| <p>蒙古<br>mn-pr.oxylabs.io:41001 - 41999</p>       | <p>贝宁<br>bj-pr.oxylabs.io:44001 - 44999</p>         | <p>苏丹<br>sd-pr.oxylabs.io:23001 - 23999</p>      |
| <p>约旦<br>jo-pr.oxylabs.io:38001 - 38999</p>       | <p>爱沙尼亚<br>ee-pr.oxylabs.io:20001 - 20999</p>       | <p>巴拉圭<br>py-pr.oxylabs.io:17001 - 17999</p>     |
| <p>中非共和国<br>cf-pr.oxylabs.io:42001 - 42999</p>    | <p>柬埔寨<br>kh-pr.oxylabs.io:34001 - 34999</p>        | <p>巴拿马<br>pa-pr.oxylabs.io:10001 - 10999</p>     |
| <p>乌拉圭<br>uy-pr.oxylabs.io:18001 - 18999</p>      | <p>加纳<br>gh-pr.oxylabs.io:48001 - 48999</p>         | <p>乌兹别克斯坦<br>uz-pr.oxylabs.io:47001 - 47999</p>  |
| <p>阿尔巴尼亚<br>al-pr.oxylabs.io:49001 - 49999</p>    | <p>摩洛哥<br>ma-pr.oxylabs.io:16001 - 16999</p>        | <p>不丹<br>bt-pr.oxylabs.io:32001 - 32999</p>      |
| <p>毛里求斯<br>mu-pr.oxylabs.io:15001 - 15999</p>     | <p>拉脱维亚<br>lv-pr.oxylabs.io:26001 - 26999</p>       | <p>马达加斯加<br>mg-pr.oxylabs.io:12001 - 12999</p>   |
| <p>立陶宛<br>lt-pr.oxylabs.io:28001 - 28999</p>      | <p>摩尔多瓦<br>md-pr.oxylabs.io:32001 - 32999</p>       | <p>黑山<br>me-pr.oxylabs.io:33001 - 33999</p>      |
| <p>罗马尼亚<br>ro-pr.oxylabs.io:35001 - 35999</p>     | <p>伊拉克<br>iq-pr.oxylabs.io:37001 - 37999</p>        | <p>冈比亚<br>gm-pr.oxylabs.io:47001 - 47999</p>     |
| <p>莫桑比克<br>mz-pr.oxylabs.io:17001 - 17999</p>     | <p>克罗地亚<br>hr-pr.oxylabs.io:16001 - 16999</p>       | <p>波多黎各<br>pr-pr.oxylabs.io:12001 - 12999</p>    |
| <p>古巴<br>cu-pr.oxylabs.io:45001 - 45999</p>       | <p>阿鲁巴<br>aw-pr.oxylabs.io:10001 - 10999</p>        | <p>塞舌尔<br>sc-pr.oxylabs.io:20001 - 20999</p>     |
| <p>马其顿<br>mk-pr.oxylabs.io:40001 - 40999</p>      | <p>马尔代夫<br>mv-pr.oxylabs.io:40001 - 40999</p>       | <p>阿曼<br>om-pr.oxylabs.io:42001 - 42999</p>      |
| <p>列支敦士登<br>li-pr.oxylabs.io:27001 - 27999</p>    | <p>瑞士<br>ch-pr.oxylabs.io:39001 - 39999</p>         | <p>玻利维亚<br>bo-pr.oxylabs.io:16001 - 16999</p>    |
| <p>乌干达<br>ug-pr.oxylabs.io:26001 - 26999</p>      | <p>保加利亚<br>bg-pr.oxylabs.io:14001 - 14999</p>       | <p>缅甸<br>mm-pr.oxylabs.io:33001 - 33999</p>      |
| <p>安道尔<br>ad-pr.oxylabs.io:10001 - 10999</p>      | <p>多哥<br>tg-pr.oxylabs.io:24001 - 24999</p>         | <p>英属维尔京群岛<br>vg-pr.oxylabs.io:43001 - 43999</p> |
| <p>特立尼达和多巴哥<br>tt-pr.oxylabs.io:13001 - 13999</p> | <p>卢森堡<br>lu-pr.oxylabs.io:29001 - 29999</p>        | <p>欧盟</p><p>eu-pr.oxylabs.io:10001 - 29999</p>   |

</details>

#### 代码示例

{% 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 dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter, and the optional `goal` query parameter:

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

`ask` is the immediate question: it should be specific, self-contained, and written in natural language.
`goal` is optional and describes the broader end goal you are ultimately trying to accomplish on behalf of the user. GitBook uses it to tailor the answer towards what is most useful for that goal.

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.
