# Controle de sessão

### Estabelecendo sessão

O parâmetro ID da sessão permite manter o mesmo endereço IP para executar múltiplas requisições. Para reutilizar o mesmo IP várias vezes, use `sessid` parâmetro após `username` com uma string alfanumérica criada aleatoriamente, por exemplo, `sessid-abcd1234`.

{% embed url="<https://files.gitbook.com/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FzrXw45naRpCZ0Ku9AjY1%2Fuploads%2FxR5NdybM3rjlbhAbPBZN%2Fsession-id.mp4?alt=media>" %}

O tempo padrão da sessão é 10 minutos ou até 60s de inatividade (sem requisições). Depois disso, um novo endereço IP é atribuído automaticamente. Para ajustar o tempo de sessão desejado, consulte [**Tempo de sessão**](#session-time).

Por exemplo, sua consulta inicial com `sessid-abcd1234` endereço IP do proxy atribuído `1.1.1.1.` Enquanto você continuar enviando novas requisições com o mesmo ID de sessão e esse endereço IP estiver online e disponível, o sistema encaminhará suas consultas através de `1.1.1.1.` Se você parar de enviar requisições por 60 segundos ou o endereço IP não estiver mais online, o sistema atribuirá um novo IP de proxy. Sua próxima consulta com `sessid-abcd1234` será encaminhada através de um endereço IP diferente, por exemplo `1.1.1.2`.

#### **Exemplo de lista de credenciais:**

O exemplo representa uma lista de credenciais que estabelecem diferentes sessões.

```
customer-USERNAME-sessid-iqwcp:PASSWORD
customer-USERNAME-sessid-tevab:PASSWORD
customer-USERNAME-sessid-6drwn:PASSWORD
customer-USERNAME-sessid-7eh7g:PASSWORD
customer-USERNAME-sessid-z7cao:PASSWORD
```

#### Exemplo de código

Neste exemplo, estamos usando IP alemão com `sessid-abcd1234` no username com a primeira requisição. Todas as requisições seguintes manterão o mesmo IP alemão nas próximas consultas:

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

### Tempo de sessão

O `sesstime` parâmetro vai junto com `sessid`, e permite prolongar a sessão acima de 10 minutos ou definir um tempo específico para ela.&#x20;

{% hint style="success" %}
Você pode usar o `sesstime` parâmetro para **manter o mesmo IP por até 1440 minutos** (24 horas). \
No entanto, como o pool de proxies residenciais é dinâmico, sua conexão pode terminar antes. Se isso acontecer, inicie uma sessão com um novo parâmetro de sessão.
{% endhint %}

{% hint style="warning" %}
O parâmetro de tempo de sessão não garante que todas as suas consultas sejam finalizadas até o término da sessão. A sessão expirará dentro do limite de tempo definido, mesmo se as requisições não forem concluídas.
{% endhint %}

#### **Exemplo de lista de credenciais:**

O exemplo representa uma lista de credenciais que estabelecem sessões diferentes com tempos de sessão diferentes (minutos).

```
customer-USERNAME-sessid-iqwcp-sesstime-5:PASSWORD
customer-USERNAME-sessid-tevab-sesstime-12:PASSWORD
customer-USERNAME-sessid-6drwn-sesstime-30:PASSWORD
customer-USERNAME-sessid-7eh7g-sesstime-60:PASSWORD
customer-USERNAME-sessid-z7cao-sesstime-1440:PASSWORD
```

#### Exemplo de código

Escolhemos o mesmo IP alemão do exemplo anterior, desta vez estamos adicionando `sessid` string e `sesstime` parâmetro por 7 minutos:

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