test-tcp.nut 1015 B

123456789101112131415161718192021222324252627282930313233343536373839
  1. function download(host, file, extra_header=null){
  2. local sock = socket.tcp();
  3. sock.connect(host, 80);
  4. local info = sock.getpeername()
  5. print(info.address, info.port);
  6. //sock.settimeout(1);
  7. local count = 0; // counts number of bytes read
  8. local req = "GET " + file + " HTTP/1.1\r\nHost: " + host + "\r\n";
  9. if (extra_header) req += extra_header + "\r\n";
  10. req += "\r\n";
  11. print(req, req.len());
  12. sock.send(req);
  13. local s, rc;
  14. local tbl = {};
  15. local len = 0;
  16. while (true){
  17. rc = sock.receive("*l");
  18. s = rc[0];
  19. print("s", s, rc[1]);
  20. //if err == "closed" then break end
  21. if (s.len() == 0) break;
  22. //if (rc[1] == socket.IO_CLOSED) break;
  23. local slen;
  24. s.gmatch("Content%-Length: (%d+)", function(m){ slen=m; return false;});
  25. if (slen) {
  26. len = slen.tointeger();
  27. }
  28. }
  29. rc = sock.receive(len);
  30. s = rc[0];
  31. sock.close();
  32. //print(file, count)
  33. return s;
  34. }
  35. local page = download("w3.impa.br", "/~diego/software/luasocket/tcp.html");
  36. //local page = download("www.google.co.uk", "/");
  37. print(page);