i2plib/docs/examples/wget.py

54 lines
1.4 KiB
Python

import sys
import asyncio
from urllib.parse import urlparse
import i2plib
async def http_get(sam_address, loop, session_name, url):
url = urlparse(url)
r, w = await i2plib.stream_connect(session_name, url.netloc,
sam_address=sam_address, loop=loop)
w.write("GET {} HTTP/1.0\nHost: {}\r\n\r\n".format(
url.path, url.netloc).encode())
buflen, resp = 4096, b""
while 1:
data = await r.read(buflen)
if len(data) > 0:
resp += data
else:
break
w.close()
try:
return resp.split(b"\r\n\r\n", 1)[1].decode()
except IndexError:
return resp.decode()
async def wget(sam_address, loop, url):
session_name = "wget"
READY = asyncio.Event(loop=loop)
asyncio.ensure_future(i2plib.create_session(session_name,
sam_address=sam_address, loop=loop, session_ready=READY), loop=loop)
await READY.wait()
res = await http_get(sam_address, loop, session_name, url)
print(res)
if __name__ == "__main__":
sam_address = i2plib.get_sam_address()
if len(sys.argv) == 2:
url = sys.argv[1]
if not url.startswith("http://"):
url = "http://" + url
loop = asyncio.get_event_loop()
loop.run_until_complete(wget(sam_address, loop, url))
loop.stop()
loop.close()
else:
print("""Fetch I2P URL. Usage:
python wget.py http://site.i2p/""")