@@ -1,72 +0,0 @@ | |||||
# aiosocks | |||||
SOCKS proxy client for asyncio and aiohttp (python 3.5+) | |||||
# Features | |||||
- SOCKS4, SOCKS4a and SOCKS5 version | |||||
- SocksConnector for aiohttp | |||||
- SOCKS "CONNECT" command | |||||
# TODO | |||||
- UDP associate | |||||
- TCP port binding | |||||
# Usage | |||||
### direct usage | |||||
``` | |||||
import asyncio | |||||
from aiosocks import ( | |||||
Socks4Addr, Socks5Addr, Socks4Auth, Socks5Auth, create_connection | |||||
) | |||||
async def connect(): | |||||
socks5_addr = Socks5Addr('127.0.0.1', 1080) | |||||
socks4_addr = Socks4Addr('127.0.0.1', 1080) | |||||
socks5_auth = Socks5Auth('login', 'pwd') | |||||
socks4_auth = Socks4Auth('ident') | |||||
dst = ('github.com', 80) | |||||
# socks5 connect | |||||
transport, protocol = await create_connection( | |||||
lambda: Protocol, proxy=socks5_addr, proxy_auth=socks5_auth, dst=dst) | |||||
# socks4 connect | |||||
transport, protocol = await create_connection( | |||||
lambda: Protocol, proxy=socks4_addr, proxy_auth=socks4_auth, dst=dst) | |||||
# socks4 without auth and local domain name resolving | |||||
transport, protocol = await create_connection( | |||||
lambda: Protocol, proxy=socks4_addr, proxy_auth=None, dst=dst, remote_resolve=False) | |||||
if __name__ == '__main__': | |||||
loop = asyncio.get_event_loop() | |||||
loop.run_until_complete(connect()) | |||||
loop.close() | |||||
``` | |||||
### aiohttp usage | |||||
``` | |||||
import asyncio | |||||
import aiohttp | |||||
from aiosocks import Socks5Addr, Socks5Auth | |||||
from aiosocks.connector import SocksConnector | |||||
async def load_github_main(): | |||||
addr = Socks5Addr('127.0.0.1', 1080) | |||||
auth = Socks5Auth('proxyuser1', password='pwd') | |||||
conn = SocksConnector(proxy=addr, proxy_auth=auth, remote_resolve=False) | |||||
with aiohttp.ClientSession(connector=conn) as ses: | |||||
async with session.get('http://github.com/') as resp: | |||||
if resp.status == 200: | |||||
return await resp.text() | |||||
if __name__ == '__main__': | |||||
loop = asyncio.get_event_loop() | |||||
loop.run_until_complete() | |||||
loop.close() | |||||
``` |
@@ -0,0 +1,79 @@ | |||||
SOCKS proxy client for asyncio and aiohttp | |||||
========================================== | |||||
Features | |||||
-------- | |||||
- SOCKS4, SOCKS4a and SOCKS5 version | |||||
- SocksConnector for aiohttp | |||||
- SOCKS "CONNECT" command | |||||
TODO | |||||
---- | |||||
- UDP associate | |||||
- TCP port binding | |||||
Usage | |||||
----- | |||||
direct usage | |||||
^^^^^^^^^^^^ | |||||
.. code-block:: python | |||||
import asyncio | |||||
from aiosocks import ( | |||||
Socks4Addr, Socks5Addr, Socks4Auth, Socks5Auth, create_connection | |||||
) | |||||
async def connect(): | |||||
socks5_addr = Socks5Addr('127.0.0.1', 1080) | |||||
socks4_addr = Socks4Addr('127.0.0.1', 1080) | |||||
socks5_auth = Socks5Auth('login', 'pwd') | |||||
socks4_auth = Socks4Auth('ident') | |||||
dst = ('github.com', 80) | |||||
# socks5 connect | |||||
transport, protocol = await create_connection( | |||||
lambda: Protocol, proxy=socks5_addr, proxy_auth=socks5_auth, dst=dst) | |||||
# socks4 connect | |||||
transport, protocol = await create_connection( | |||||
lambda: Protocol, proxy=socks4_addr, proxy_auth=socks4_auth, dst=dst) | |||||
# socks4 without auth and local domain name resolving | |||||
transport, protocol = await create_connection( | |||||
lambda: Protocol, proxy=socks4_addr, proxy_auth=None, dst=dst, remote_resolve=False) | |||||
if __name__ == '__main__': | |||||
loop = asyncio.get_event_loop() | |||||
loop.run_until_complete(connect()) | |||||
loop.close() | |||||
aiohttp usage | |||||
^^^^^^^^^^^^^ | |||||
.. code-block:: python | |||||
import asyncio | |||||
import aiohttp | |||||
from aiosocks import Socks5Addr, Socks5Auth | |||||
from aiosocks.connector import SocksConnector | |||||
async def load_github_main(): | |||||
addr = Socks5Addr('127.0.0.1', 1080) | |||||
auth = Socks5Auth('proxyuser1', password='pwd') | |||||
conn = SocksConnector(proxy=addr, proxy_auth=auth, remote_resolve=False) | |||||
with aiohttp.ClientSession(connector=conn) as ses: | |||||
async with session.get('http://github.com/') as resp: | |||||
if resp.status == 200: | |||||
return await resp.text() | |||||
if __name__ == '__main__': | |||||
loop = asyncio.get_event_loop() | |||||
loop.run_until_complete() | |||||
loop.close() |
@@ -32,6 +32,6 @@ setup( | |||||
url='https://github.com/nibrag/aiosocks', | url='https://github.com/nibrag/aiosocks', | ||||
description='SOCKS proxy client for asyncio and aiohttp', | description='SOCKS proxy client for asyncio and aiohttp', | ||||
long_description=open("README.md").read(), | |||||
long_description=open("README.rst").read(), | |||||
packages=['aiosocks'] | packages=['aiosocks'] | ||||
) | ) |