From 3b984b6566557e09a426d0808d5bc781ded32b60 Mon Sep 17 00:00:00 2001 From: Scott Bell Date: Fri, 4 Jul 2014 20:45:51 -0700 Subject: [PATCH] Allow http-conn-send! to take a procedure as its #:data parameter original commit: ec0468a1f1dd20da1a7aa108b2327073d75817ab --- .../net-doc/net/scribblings/http-client.scrbl | 11 ++++++++--- pkgs/net-pkgs/net-doc/net/scribblings/url.scrbl | 2 +- pkgs/net-pkgs/net-test/tests/net/http-client.rkt | 8 ++++++++ 3 files changed, 17 insertions(+), 4 deletions(-) diff --git a/pkgs/net-pkgs/net-doc/net/scribblings/http-client.scrbl b/pkgs/net-pkgs/net-doc/net/scribblings/http-client.scrbl index 5030fffd9f..8eae5868d8 100644 --- a/pkgs/net-pkgs/net-doc/net/scribblings/http-client.scrbl +++ b/pkgs/net-pkgs/net-doc/net/scribblings/http-client.scrbl @@ -74,7 +74,7 @@ Closes the output side of @racket[hc], if it is live. [#:close? close? boolean? #f] [#:headers headers (listof (or/c bytes? string?)) empty] [#:content-decode decodes (listof symbol?) '(gzip)] - [#:data data (or/c false/c bytes? string?) #f]) + [#:data data (or/c false/c bytes? string? data-procedure/c) #f]) void?]{ Sends an HTTP request to @racket[hc] to the URI @racket[uri] using @@ -82,6 +82,11 @@ HTTP version @racket[version] the method @racket[method] and the additional headers given in @racket[headers] and the additional data @racket[data]. +If @racket[data] is a procedure, it will be called once with a +procedure of one argument, which is a @racket[string] or +@racket[byte-string] to be written to the request body using +chunked transfer encoding. + If @racket[headers] does not contain an @litchar{Accept-Encoding} header, then a header indicating that encodings from @racket[decodes] are accepted is automatically added. @@ -117,7 +122,7 @@ to do so. [#:version version (or/c bytes? string?) #"1.1"] [#:method method (or/c bytes? string? symbol?) #"GET"] [#:headers headers (listof (or/c bytes? string?)) empty] - [#:data data (or/c false/c bytes? string?) #f] + [#:data data (or/c false/c bytes? string? data-procedure/c) #f] [#:content-decode decodes (listof symbol?) '(gzip)] [#:close? close? boolean? #f]) (values bytes? (listof bytes?) input-port?)]{ @@ -132,7 +137,7 @@ Calls @racket[http-conn-send!] and @racket[http-conn-recv!] in sequence. [#:version version (or/c bytes? string?) #"1.1"] [#:method method (or/c bytes? string? symbol?) #"GET"] [#:headers headers (listof (or/c bytes? string?)) empty] - [#:data data (or/c false/c bytes? string?) #f] + [#:data data (or/c false/c bytes? string? data-procedure/c) #f] [#:content-decode decodes (listof symbol?) '(gzip)]) (values bytes? (listof bytes?) input-port?)]{ diff --git a/pkgs/net-pkgs/net-doc/net/scribblings/url.scrbl b/pkgs/net-pkgs/net-doc/net/scribblings/url.scrbl index 3435274752..fbeb0740ca 100644 --- a/pkgs/net-pkgs/net-doc/net/scribblings/url.scrbl +++ b/pkgs/net-pkgs/net-doc/net/scribblings/url.scrbl @@ -444,7 +444,7 @@ mapping is the empty list (i.e., no proxies).} @defproc[(http-sendrecv/url [u url?] [#:method method (or/c bytes? string? symbol?) #"GET"] [#:headers headers (listof (or/c bytes? string?)) empty] - [#:data data (or/c false/c bytes? string?) #f] + [#:data data (or/c false/c bytes? string? data-procedure/c) #f] [#:content-decode decodes (listof symbol?) '(gzip)]) (values bytes? (listof bytes?) input-port?)]{ diff --git a/pkgs/net-pkgs/net-test/tests/net/http-client.rkt b/pkgs/net-pkgs/net-test/tests/net/http-client.rkt index 6e9980220a..e9c51d6a7c 100644 --- a/pkgs/net-pkgs/net-test/tests/net/http-client.rkt +++ b/pkgs/net-pkgs/net-test/tests/net/http-client.rkt @@ -240,4 +240,12 @@ #"PUT / HTTP/1.1\r\nHost: localhost:REDACTED\r\nUser-Agent: Racket/REDACTED (net/http-client)\r\nAccept-Encoding: gzip\r\nContent-Length: 4\r\nConnection: close\r\n\r\nfrob" #"HTTP/1.1 200 OK" '() + #""] + + ["PUT" + (λ (w) (w "fr") (w "ob")) + "HTTP/1.1 200 OK\r\n\r\n" + #"PUT / HTTP/1.1\r\nHost: localhost:REDACTED\r\nUser-Agent: Racket/REDACTED (net/http-client)\r\nAccept-Encoding: gzip\r\nTransfer-Encoding: chunked\r\nConnection: close\r\n\r\n2\r\nfr\r\n2\r\nob\r\n\r\n" + #"HTTP/1.1 200 OK" + '() #""]))