Add support for HTTP proxies.
* module/web/http.scm (http-proxy-port?, set-http-proxy-port?!): New exported procedures. (write-request-line): If we're using an http proxy, write an absolute-URI in the request line. * module/web/client.scm: Import (web http). (current-http-proxy): New exported parameter. (open-socket-for-uri): If 'current-http-proxy' is not false, connect to the proxy instead of the URI host, and use 'set-http-proxy-port?!' to make note of that fact. * doc/ref/web.texi (Web Client): Document 'current-http-proxy'.
This commit is contained in:
parent
0690378621
commit
23cf330c86
3 changed files with 50 additions and 3 deletions
|
|
@ -66,7 +66,10 @@
|
|||
write-response-line
|
||||
|
||||
make-chunked-input-port
|
||||
make-chunked-output-port))
|
||||
make-chunked-output-port
|
||||
|
||||
http-proxy-port?
|
||||
set-http-proxy-port?!))
|
||||
|
||||
|
||||
(define (string->header name)
|
||||
|
|
@ -1117,6 +1120,21 @@ three values: the method, the URI, and the version."
|
|||
"Write the first line of an HTTP request to PORT."
|
||||
(display method port)
|
||||
(display #\space port)
|
||||
(when (http-proxy-port? port)
|
||||
(let ((scheme (uri-scheme uri))
|
||||
(host (uri-host uri))
|
||||
(host-port (uri-port uri)))
|
||||
(when (and scheme host)
|
||||
(display scheme port)
|
||||
(display "://" port)
|
||||
(if (string-index host #\:)
|
||||
(begin (display #\[ port)
|
||||
(display host port)
|
||||
(display #\] port))
|
||||
(display host port))
|
||||
(unless ((@@ (web uri) default-port?) scheme host-port)
|
||||
(display #\: port)
|
||||
(display host-port port)))))
|
||||
(let ((path (uri-path uri))
|
||||
(query (uri-query uri)))
|
||||
(if (not (string-null? path))
|
||||
|
|
@ -1958,3 +1976,8 @@ KEEP-ALIVE? is true."
|
|||
(unless keep-alive?
|
||||
(close-port port)))
|
||||
(make-soft-port (vector put-char put-string flush #f close) "w"))
|
||||
|
||||
(define %http-proxy-port? (make-object-property))
|
||||
(define (http-proxy-port? port) (%http-proxy-port? port))
|
||||
(define (set-http-proxy-port?! port flag)
|
||||
(set! (%http-proxy-port? port) flag))
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue