Sends a remote request and returns the received document. Handles socket communication with a timeout and ensures resources are cleaned up.