← Blog'a dön
$ curl -x http://user:pass@xxx.nodetonet.com:48888 https://api.ipify.org→ 188.114.96.7$ curl ... -H "X-Session: abc" # sticky→ 188.114.96.7 # same IP (TTL 600s)$ curl ... -H "X-Rotate: 1" # rotate→ 92.184.117.42 # new IP PYTHON SDK nodetonet.com

Python ile programatik tünel oluşturma — minik bir Nodetonet istemcisi

N Nodetonet Team
3 Nisan 2026 8 dk okuma

Nodetonet REST API'si, Bearer token ile kimlik dogrulanan HTTPS uzerinden duz JSON'dir. Kurmak zorunda oldugunuz ozel bir SDK yoktur; platformun tumunu standart requests kutuphane ile Python'dan surebilirsiniz. Bu, mobil proxy olusturma, yapilandirma ve yikma; geo-hedefleme parametreleri atama; donusen token gruplari yonetme; kota, sure ve istemci-bazi dogrulama ayarlama islemlerinin hepsini kendi otomasyon scriptlerinizden yapabilecegiz anlamina gelir.

Bu rehber, her CRUD islemi icin ham tek-seferlik fonksiyonlarla baslar, sonra hepsini herhangi bir projeye suruklep birakabileceginiz kucuk bir NodetonetClient sinifina katlar. Sonunda; sayfalandirma, hiz sinirlamasi ve oturum yeniden kullanimini herhangi bir ekstra bagimlilik olmadan elen atan tek bir dosyaniz olacak.

On kosul: kisisel API anahtarinizi kopyalamis (API anahtarinizi anlama'da anlatildi) ve hard-code etmek yerine bir ortam degiskeninde sakliyorsunuz.

export NTN_KEY="ntn_live_a8c3...f2e1"

1. En az gecerli cagri — proxy'leri listele

Her Nodetonet API cagrisi ayni sekli izler: bir yontem, https://nodetonet.com/api/v1 altindaki bir yol, Authorization: Bearer basligi ve isteege bagli bir JSON govdesi. Yanit her zaman {data: ..., meta: ...} seklindedir.

import os
import requests

KEY = os.environ['NTN_KEY']
BASE = 'https://nodetonet.com/api/v1'

r = requests.get(
    f'{BASE}/proxies',
    headers={'Authorization': f'Bearer {KEY}'},
    timeout=10,
)
r.raise_for_status()
for p in r.json()['data']:
    print(p['id'], p['protocol'], p['host'], p['port'])

Tam istemci yuzeyi bu kadar — diger her endpoint bu dort satirin bir varyasyonudur.

2. Geo-hedefleme ile proxy olustur

Bir JSON govedesyle /proxies'e POST atin. Zorunlu alanlar protocol, tokenId ve serverId'dir (proxy'yi calistiracak edge sunucu). Port, baslik ve kimlik bilgileri gibi geri kalan her seyin makul varsayilanlari vardir.

Geo-hedefleme veya operator secimi uygulamak icin, bir baglanti istemcisinin yapacagi gibi kullanici-adi eklerini iletirsiniz; ancak burada bunlari olusturma sirasinda belirlersiniz, boylece her asagi akis istemcisi dogru cikisi otomatik olarak alir:

payload = {
    'title': 'scraper-tr-turkcell-1',
    'protocol': 'http',     # ya da 'socks5' — bkz. /features/socks5-http-proxies
    'port': 'auto',
    'tokenId': 'tok_3kzl8w9',
    'serverId': 'srv_de_1',
    # opsiyonel: token duzeyinde bir operator/ulke cikisi zorla
    'usernameModifier': '-country-tr',   # Turk cikisi araciligiyla yonlendir
}
r = requests.post(
    f'{BASE}/proxies',
    headers={'Authorization': f'Bearer {KEY}'},
    json=payload,
    timeout=15,
)
r.raise_for_status()
proxy = r.json()['data']
print('olusturuldu', proxy['id'], '->',
      f"http://{proxy['username']}:{proxy['password']}@{proxy['host']}:{proxy['port']}")

Yanit, yeni tahsis edilen username, password, host ve port'u icerir; bir baglanti dizesi olusturmak ve hemen trafik yonlendirmeye baslamak icin ihtiyaciniz olan her sey. SOCKS5 icin asagi akis istemcisinde http:// yerine socks5h:// kullanin.

3. Guncelle ve sil

PATCH, kismi bir payload alir; yalnizca degistirmek istediginiz alanlar. DELETE kalicidir.

# bir proxy'yi yeniden adlandir
requests.patch(
    f'{BASE}/proxies/{proxy_id}',
    headers={'Authorization': f'Bearer {KEY}'},
    json={'title': 'scraper-tr-yeniden-adlandirildi'},
    timeout=10,
).raise_for_status()

# yik
requests.delete(
    f'{BASE}/proxies/{proxy_id}',
    headers={'Authorization': f'Bearer {KEY}'},
    timeout=10,
).raise_for_status()

Bir DELETE'in ardindan proxy, birkac saniye icinde her edge node'dan kaldirilir ve port paylasilan havuza geri doner. Uzerinden gecen aktif istemci baglantisi temiz bir TCP kapatmasi alir.

4. Yeniden kullanilabilir bir istemci sinifi

O snippet'leri uc farkli scripte kopyala-yapistirdiktan sonra tek bir sarmalayici isteyeceksiniz. Iste sade, bagimlilik-icermeyen bir tane — tek dosya, miras yok, metaclass numarasi yok — ham requests cagrilarinin yapamadigi dort seyi halleder:

import os
import requests


class NodetonetClient:
    def __init__(self, key=None, base='https://nodetonet.com/api/v1', timeout=10):
        self.key = key or os.environ['NTN_KEY']
        self.base = base.rstrip('/')
        self.timeout = timeout
        self.session = requests.Session()
        self.session.headers.update({
            'Authorization': f'Bearer {self.key}',
            'User-Agent': 'nodetonet-python/0.1',
        })

    def _req(self, method, path, **kw):
        r = self.session.request(
            method, f'{self.base}{path}',
            timeout=self.timeout, **kw,
        )
        if r.status_code == 429:
            retry = int(r.headers.get('Retry-After', '1'))
            raise RateLimited(retry)
        r.raise_for_status()
        return r.json()

    # ---- proxies ----
    def list_proxies(self, page=1, per_page=25):
        return self._req('GET', '/proxies', params={'page': page, 'perPage': per_page})

    def get_proxy(self, proxy_id):
        return self._req('GET', f'/proxies/{proxy_id}')['data']

    def create_proxy(self, **fields):
        return self._req('POST', '/proxies', json=fields)['data']

    def update_proxy(self, proxy_id, **fields):
        return self._req('PATCH', f'/proxies/{proxy_id}', json=fields)['data']

    def delete_proxy(self, proxy_id):
        return self._req('DELETE', f'/proxies/{proxy_id}')

    # ---- helpers ----
    def iter_proxies(self):
        page = 1
        while True:
            resp = self.list_proxies(page=page, per_page=100)
            for p in resp['data']:
                yield p
            if page >= resp['meta']['totalPages']:
                return
            page += 1


class RateLimited(Exception):
    def __init__(self, retry_after):
        super().__init__(f'rate limited, retry after {retry_after}s')
        self.retry_after = retry_after

5. Toplu olustur ve temizle

c = NodetonetClient()

# bir dongude on proxy ayaga kaldir
for i in range(10):
    p = c.create_proxy(
        title=f'batch-{i}',
        protocol='http',
        port='auto',
        tokenId='tok_3kzl8w9',
        serverId='srv_de_1',
    )
    print(p['id'], f"http://{p['username']}:{p['password']}@{p['host']}:{p['port']}")

# daha sonra, bu calistiirmadan gelenleri yik
for p in c.iter_proxies():
    if p['title'].startswith('batch-'):
        c.delete_proxy(p['id'])

Nodetonet aylik abonelik olmadan on odemeli kredi kullandigi icin, sildiginus proxy'ler aninda maliyet tahakkuk ettirmeyi durdurur. Bu, gecici-filo kaliplarini hem pratik hem de ekonomik killar: bir is icin olusturun, bittiginde yikin. Faturalandirma modeli hakkinda daha fazla bilgi icin kullandikca-ode fiyatlandirmasi yazisini okuyun.

6. API araciligiyla sticky oturumlar

Bir asagi akis istemcisinin sticky oturuma ihtiyaci oldugunda (ornegin, IP degistirmeden coklu istekler arasinda giris durumunu korumak icin), o istemciye verdiginiz baglanti dizesindeki proxy kullanici adina bir -session-XXXX eki ekleyin. Ayri bir proxy olusturmaniz gerekmez; ayni endpoint, istemcinin gonderdigi kullanici adi ekine bagli olarak hem donusen hem de sticky trafige hizmet eder.

Oturum kullanici adlarini programatik olarak olusturdunuz bir otomasyonda:

import uuid

def sticky_url(proxy):
    session_id = uuid.uuid4().hex[:8]
    user = f"{proxy['username']}-session-{session_id}"
    return f"http://{user}:{proxy['password']}@{proxy['host']}:{proxy['port']}"

p = c.create_proxy(title='odeme-akisi', protocol='http',
                   port='auto', tokenId='tok_3kzl8w9', serverId='srv_de_1')
print(sticky_url(p))

7. API yanitleri bir bakista

Asagidaki tablo en cok kullanacaginiz endpoint'leri, HTTP yontemlerini, beklenen basari durumunu ve data alaninin ne icerdigi ozetler:

Islem Yontem Yol Basari durumu data alani
Proxy'leri listeleGET/proxies200Proxy nesneleri dizisi
Tek proxy alGET/proxies/:id200Tek proxy nesnesi
Proxy olusturPOST/proxies201Kimlik bilgilerini iceren yeni proxy
Proxy guncellePATCH/proxies/:id200Guncellenmis proxy nesnesi
Proxy silDELETE/proxies/:id204Bos

8. Yapilmaya deger hata yonetimi

Produksiyonda gercekten karsilasacaginiz uc basarisizlik modu:

Async Python'u tercih ediyor musunuz? Ayni sinif sekli httpx.AsyncClient ile calisir — requests.Session'i bir async istemciyle degistirin ve her metoda async/await ekleyin. Tel protokolu identiktir; yalnizca G/C katmani degisir.

Sirada ne var

Gelistirmeye baslamaya hazir misiniz? Ucretsiz bir hesap olusturun ve bir dakika icinde API anahtarinizi alin.

Sıkça sorulan sorular

Nodetonet API'sini kullanmak icin ozel bir Python SDK'ya ihtiyacim var mi?
Hayir. API, Bearer tokenli HTTPS uzerinden duz JSON'dir; bu yuzden ihtiyaciniz olan tek sey standart requests kutuphanesidir. Bu yazi, ucunci taraf bagimlilik olmadan requests uzerine insaa edilmis eksiksiz ve yeniden kullanilabilir bir istemci sinifi gostermektedir.
Python'dan belirli bir ulke veya operatorle mobil proxy nasil olusturulur?
Proxy olusturulurken POST payload'unda bir usernameModifier alani iletin; ornegin Turkiye icin "-country-tr" veya bir operator etiketi. Yanit, kullanima hazir kimlik bilgilerini icerir. Eklerdin tam listesi icin geo-hedefleme belgelerine bakin.
Cok sayida API cagrisi yaparken hiz sinirlamasini nasil ele alirim?
API, hiz sinirini astinizda Retry-After baslikli HTTP 429 dondurur. Bu yazidaki NodetonetClient sinifi 429'u yakalar ve saniye cinsinden retry_after degerini tasiy tipli bir RateLimited istisnasi firlatir; boylece kodunuz basliiklari manuel analiz etmeden uyku moduna gecip yeniden deneyebilir.
API'den sticky oturum proxy'si nasil olustururum?
Sticky oturumlar icin ayri bir proxy olusturmaniza gerek yoktur. API araciligiyla normalde bir proxy olusturun, ardinda her asagi akis istemcisine verdiginiz baglanti dizesindeki proxy kullanici adina -session-XXXX ekleyin. Bu ek, oturum sure boyunca cikis IP'sini sabitler. Ayrintilar icin sticky oturumlar rehberine bakin.
requests yerine async Python (asyncio / httpx) kullanabilir miyim?
Evet. Bu yazidaki NodetonetClient sinifi requests.Session kullaniyor, ancak ayni yapi httpx.AsyncClient ile de calisir. Oturum nesnesini degistirin, her metoda async/await ekleyin ve geri kalan her sey ayni kalir; REST API'sinin kendisi durumsuzdur ve protokolden bagimsizdir.
API araciligiyla bir proxy silmek faturalandirmayi hemen durduruyor mu?
Evet. Nodetonet abonelik olmadan on odemeli kredi kullanir. Bir proxy'de DELETE cagirdiginizda, birkac saniye icinde her edge node'da yikilir ve kullanim maliyeti tahakkuk etmeyi durdurur. Bu, gecici filo desenlerini hem pratik hem de maliyet etkin kilar; bir is icin olusturun, bitince yikin.
N

Nodetonet Team

Nodetonet'i geliştiriyoruz — ngrok, Cloudflared ve bir residential proxy sağlayıcısının yerini tek panelle alan, peşin ödemeli proxy + tünel platformu.

İlgili yazılar