Skip to main content

Cloudbypass SDK for Python.

Project description

Cloudbypass SDK for Python

开始使用

Cloudbypass Python SDK 仅支持 Python 3.7 及以上版本。

psf/requests基础上封装的穿云SDK,支持穿云API服务的调用。通过内置的会话管理器,可以自动处理会话请求,无需手动管理Cookie等信息。

cloudbypass cloudbypass cloudbypass cloudbypass

安装

python3 -m pip install cloudbypass -i https://pypi.org/simple

发起请求

cloudbypass 基于 requests 库,支持所有 requests 的方法。

通过添加初始化参数 apikeyproxy,分别用于设置穿云 API 服务密钥和代理 IP。

定制用户可以通过设置 api_host 参数来指定服务地址。

以上参数也可以通过环境变量 CB_APIKEYCB_PROXYCB_APIHOST 进行配置。

from cloudbypass import Session

if __name__ == '__main__':
    with Session(apikey="<APIKEY>", proxy="http://proxy:port") as session:
        resp = session.get("https://opensea.io/category/memberships")
        print(resp.status_code, resp.headers.get("x-cb-status"))
        print(resp.text)

async

import asyncio
from cloudbypass import AsyncSession


async def main():
    async with AsyncSession(apikey="<APIKEY>", proxy="http://proxy:port") as session:
        resp = await session.get("https://opensea.io/category/memberships")
        print("Status:", resp.status)
        text = await resp.text()
        print("Body:", text)


if __name__ == '__main__':
    loop = asyncio.get_event_loop()
    loop.run_until_complete(main())

使用V2

穿云API V2适用于需要通过JS质询验证的网站。例如访问https://etherscan.io/accounts/label/lido ,请求示例:

from cloudbypass import SessionV2

if __name__ == '__main__':
    # Cookie模式:服务端返回加密Cookie,下次请求时由客户端发送验证Cookie
    with SessionV2(apikey="<APIKEY>", proxy="http://proxy:port") as session:
        resp = session.get("https://etherscan.io/accounts/label/lido")
        print("Status:", resp.status_code, resp.headers.get("x-cb-status"))
        print("Cookie:", resp.headers.get("set-cookie"))
        print("Body:", resp.text)

    # Part模式:由服务端管理验证Cookie,客户端只需要控制part参数
    with SessionV2(apikey="<APIKEY>", proxy="http://proxy:port", part="0") as session:
        resp = session.get("https://etherscan.io/accounts/label/lido")
        print("Status:", resp.status_code, resp.headers.get("x-cb-status"))
        print("Body:", resp.text)

async

import asyncio
from cloudbypass import AsyncSessionV2


async def main():
    # Cookie模式:服务端返回加密Cookie,下次请求时由客户端发送验证Cookie
    async with AsyncSessionV2(apikey="<APIKEY>", proxy="http://proxy:port") as session:
        resp = await session.get("https://etherscan.io/accounts/label/lido")
        print("Status:", resp.status)
        print("Cookie:", resp.headers.get("set-cookie"))
        text = await resp.text()
        print("Body:", text)

    # Part模式:由服务端管理验证Cookie,客户端只需要控制part参数
    async with AsyncSessionV2(apikey="<APIKEY>", proxy="http://proxy:port", part="0") as session:
        resp = await session.get("https://etherscan.io/accounts/label/lido")
        print("Status:", resp.status)
        text = await resp.text()
        print("Body:", text)


if __name__ == '__main__':
    loop = asyncio.get_event_loop()
    loop.run_until_complete(main())

查询余额

使用 get_balance 通过控制台接口 POST https://console.cloudbypass.com/api/v1/balance 查询账户用量,请求体为 JSON(原查询参数已改为 JSON 字段)。

通过关键字参数 type 指定查询类型(写入请求 JSON 的 type 字段)。可使用包内常量 BALANCE_TYPE_POINTSBALANCE_TYPE_RESBALANCE_TYPE_DAT 代替字面量。

常量 / type 含义 响应 JSON
BALANCE_TYPE_POINTS(默认) 积分 {"balance": 0}
BALANCE_TYPE_RES 住宅代理流量 {"total": 0, "balance": 0}
BALANCE_TYPE_DAT 机房代理流量 {"total": 0, "balance": 0}
from cloudbypass import (
    BALANCE_TYPE_DAT,
    BALANCE_TYPE_POINTS,
    BALANCE_TYPE_RES,
    get_balance,
)

if __name__ == '__main__':
    # 积分
    print(get_balance("<APIKEY>", "<EMAIL>"))
    print(get_balance("<APIKEY>", "<EMAIL>", type=BALANCE_TYPE_POINTS))

    # 住宅流量 / 机房流量
    print(get_balance("<APIKEY>", "<EMAIL>", type=BALANCE_TYPE_RES))
    print(get_balance("<APIKEY>", "<EMAIL>", type=BALANCE_TYPE_DAT))

async

import asyncio
from cloudbypass import BALANCE_TYPE_RES, async_get_balance


async def main():
    print(await async_get_balance("<APIKEY>", "<EMAIL>"))
    print(await async_get_balance("<APIKEY>", "<EMAIL>", type=BALANCE_TYPE_RES))


if __name__ == '__main__':
    loop = asyncio.get_event_loop()
    loop.run_until_complete(main())

convert_bytes 可将流量查询结果中的字节数格式化为可读字符串。例如 convert_bytes(data["balance"])

提取代理

通过Proxy类可以提取穿云动态代理IP和时效代理IP。

  • copy() 复制当前对象,使原有的对象不会受到影响。
  • set_dynamic() 设置为动态代理。
  • set_expire(int) 设置为时效代理,参数为IP过期时间,单位为秒。
  • set_region(str) 设置代理IP地区。
  • clear_region() 清除代理的地区。
  • format(str) 格式化代理IP,参数为格式化字符串,例如{username}:{password}@gateway
  • limit(int, str) 返回一个代理IP字符串迭代器,参数为提取数量及代理格式化字符串。
  • loop(int, str) 返回一个代理IP字符串循环迭代器,参数为实际数量及代理格式化字符串。
from cloudbypass import Proxy

if __name__ == '__main__':
    proxy = Proxy("username-res:password")

    # 提取动态代理
    print("Extract dynamic proxy: ")
    print(str(proxy.set_dynamic()))
    print(str(proxy.set_region('US')))

    # 提取时效代理并指定地区
    print("Extract proxy with expire and region: ")
    print(str(proxy.copy().set_expire(60 * 30).set_region('US')))

    # 批量提取
    print("Extract five 10-minute aging proxies: ")
    pool = proxy.copy().set_expire(60 * 10).set_region('US').limit(5)
    for _ in pool:
        print(_)

    # 循环提取
    print("Loop two 10-minute aging proxies: ")
    loop = proxy.copy().set_expire(60 * 10).set_region('US').loop(2)
    for _ in range(10):
        print(loop.__next__())

关于重定向问题

使用SDK发起请求时,重定向操作会自动处理,无需手动处理。且重定向响应也会消耗积分。

关于服务密钥

请访问穿云控制台获取服务密钥。

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

cloudbypass-0.2.6.tar.gz (11.5 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

cloudbypass-0.2.6-py3-none-any.whl (10.3 kB view details)

Uploaded Python 3

File details

Details for the file cloudbypass-0.2.6.tar.gz.

File metadata

  • Download URL: cloudbypass-0.2.6.tar.gz
  • Upload date:
  • Size: 11.5 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/5.1.1 CPython/3.11.7

File hashes

Hashes for cloudbypass-0.2.6.tar.gz
Algorithm Hash digest
SHA256 b5a7c34e7df24b3fbe7c0036f795e101c40e51a57081681857941f71e60ddfbb
MD5 9739361354a8e5ac3da58eb7df4a0cd1
BLAKE2b-256 3e5b49f975f65cbfdd1c724c3070a7a8179bfbb78c057aab790352d5e9ad08cb

See more details on using hashes here.

File details

Details for the file cloudbypass-0.2.6-py3-none-any.whl.

File metadata

  • Download URL: cloudbypass-0.2.6-py3-none-any.whl
  • Upload date:
  • Size: 10.3 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/5.1.1 CPython/3.11.7

File hashes

Hashes for cloudbypass-0.2.6-py3-none-any.whl
Algorithm Hash digest
SHA256 603ec9074b3139f68c9b7fc761492674631dea9690bc57151b72949b7dea1883
MD5 fe6d2ba1e96ab5ee045ef6d1983b0bc9
BLAKE2b-256 057f74ac72291409c82180d57c7ab94171da5e3de2d2655bcd871f9db6ce57b7

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page