54 lines
1.4 KiB
Python
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/""")
|