Source

w3 / contrib / http-tunnel.el

Full commit
(defvar http-tunnel-host "firewallmachine")
(defvar http-tunnel-port 80)

(defun open-http-tunneled-connection (name buffer host service)
  (let ((proc (open-network-stream name buffer http-tunnel-host http-tunnel-port))
	(need-to-spin t))
    (if (or (null proc) (not (memq (process-status proc) '(run open))))
	(error "Could not open connection"))
    (process-send-string proc (format (eval-when-compile
					(concat
					 "CONNECT %s:%s HTTP/1.0\r\n"
					 "User-Agent: Emacs/%d.%d\r\n"
					 "\r\n"))
				      host service
				      emacs-major-version
				      emacs-minor-version))
    (save-excursion
      (set-buffer buffer)
      (while (and (memq (process-status proc) '(open run)) need-to-spin)
	(accept-process-output proc 3)
	(goto-char (point-min))
	(if (re-search-forward "\r\n\r\n" nil t)
	    (progn
	      (delete-region (point-min) (match-end 0))
	      (setq need-to-spin nil)))
	(goto-char (point-max))))
    (if (not (memq (process-status proc) '(open run)))
	(error "Could not open connection"))
    proc))

(let ((socks-noproxy '(".*")))
  (setq x (open-http-tunneled-connection "x" "x" "www.cs.indiana.edu" 80))
  (process-send-string x "GET / HTTP/1.0\r\n\r\n"))