if the path is empty, use /

svn: r12750
This commit is contained in:
Eli Barzilay 2008-12-09 02:39:45 +00:00
parent da7b6978ee
commit 169c69a0bc

View File

@ -103,30 +103,33 @@
;; http://getpost-impure-port : bool x url x union (str, #f) x list (str) -> in-port ;; http://getpost-impure-port : bool x url x union (str, #f) x list (str) -> in-port
(define (http://getpost-impure-port get? url post-data strings) (define (http://getpost-impure-port get? url post-data strings)
(let*-values (define proxy (assoc (url-scheme url) (current-proxy-servers)))
([(proxy) (assoc (url-scheme url) (current-proxy-servers))] (define-values (server->client client->server) (make-ports url proxy))
[(server->client client->server) (make-ports url proxy)] (define access-string
[(access-string) (url->string (url->string
(if proxy (if proxy
url url
(make-url #f #f #f #f ;; RFCs 1945 and 2616 say:
(url-path-absolute? url) ;; Note that the absolute path cannot be empty; if none is present in
(url-path url) ;; the original URI, it must be given as "/" (the server root).
(url-query url) (let-values ([(abs? path)
(url-fragment url))))]) (if (null? (url-path url))
(define (println . xs) (values #t (list (make-path/param "" '())))
(for-each (lambda (x) (display x client->server)) xs) (values (url-path-absolute? url) (url-path url)))])
(display "\r\n" client->server)) (make-url #f #f #f #f abs? path (url-query url) (url-fragment url))))))
(println (if get? "GET " "POST ") access-string " HTTP/1.0") (define (println . xs)
(println "Host: " (url-host url) (for-each (lambda (x) (display x client->server)) xs)
(let ([p (url-port url)]) (if p (format ":~a" p) ""))) (display "\r\n" client->server))
(when post-data (println "Content-Length: " (bytes-length post-data))) (println (if get? "GET " "POST ") access-string " HTTP/1.0")
(for-each println strings) (println "Host: " (url-host url)
(println) (let ([p (url-port url)]) (if p (format ":~a" p) "")))
(when post-data (display post-data client->server)) (when post-data (println "Content-Length: " (bytes-length post-data)))
(flush-output client->server) (for-each println strings)
(tcp-abandon-port client->server) (println)
server->client)) (when post-data (display post-data client->server))
(flush-output client->server)
(tcp-abandon-port client->server)
server->client)
(define (file://->path url [kind (system-path-convention-type)]) (define (file://->path url [kind (system-path-convention-type)])
(let ([strs (map path/param-path (url-path url))] (let ([strs (map path/param-path (url-path url))]