use std::{
env,
io::{Read, Write},
net::TcpStream,
};
use io_proxy::{client::connect_socks5, socks::v5::address::Socks5Address};
fn main() {
env_logger::init();
let mut args = env::args().skip(1);
let proxy = args.next().unwrap_or_else(|| "127.0.0.1:1080".into());
let host = args.next().unwrap_or_else(|| "example.com".into());
let port: u16 = args
.next()
.unwrap_or_else(|| "80".into())
.parse()
.expect("target port");
let mut stream = TcpStream::connect(&proxy).expect("connect to proxy");
let target = Socks5Address::new(&host, port).expect("build target address");
connect_socks5(&mut stream, target, None).expect("socks5 handshake");
let request = format!("GET / HTTP/1.0\r\nHost: {host}\r\n\r\n");
stream.write_all(request.as_bytes()).expect("write request");
let mut buf = [0u8; 512];
let n = stream.read(&mut buf).expect("read response");
print!("{}", String::from_utf8_lossy(&buf[..n]));
}