summaryrefslogtreecommitdiff
path: root/http-client.scm
diff options
context:
space:
mode:
authorPeter Bex <peter@more-magic.net>2024-06-27 15:50:55 +0200
committerPeter Bex <peter@more-magic.net>2024-06-27 15:51:26 +0200
commit64563b82ae1ddc87900aebad34529516f34657f7 (patch)
tree87a83f5b4cd27af4b6fbe63022d744d1122d8c14 /http-client.scm
parentff0aa990d5064b70f2bfa50f0f6f3b007048d6ff (diff)
downloadhttp-client-64563b82ae1ddc87900aebad34529516f34657f7.tar.gz
Allow raw string data instead of file for multipart content (#1838)
This allows one to pass in a filename for the data.
Diffstat (limited to 'http-client.scm')
-rw-r--r--http-client.scm12
1 files changed, 8 insertions, 4 deletions
diff --git a/http-client.scm b/http-client.scm
index e9c181b..0dd9dff 100644
--- a/http-client.scm
+++ b/http-client.scm
@@ -1,7 +1,7 @@
;;;
;;; Convenient HTTP client library
;;;
-;; Copyright (c) 2008-2022, Peter Bex
+;; Copyright (c) 2008-2024, Peter Bex
;; Parts copyright (c) 2000-2004, Felix L. Winkelmann
;; All rights reserved.
;;
@@ -716,9 +716,11 @@
'()
(let* ((keys (cdr entry))
(file (kv-ref keys file:))
+ (data (kv-ref keys data:))
(filename (or (kv-ref keys filename:)
- (and (port? file) (port-name file))
- (and (string? file) file)))
+ (and file
+ (and (port? file) (port-name file))
+ (and (string? file) file))))
(h (headers `((content-disposition
#(form-data ((name . ,(car entry))
(filename . ,filename))))
@@ -733,6 +735,7 @@
(list "--" boundary "\r\n" hs "\r\n"
(cond ((string? file) (cons 'file file))
((port? file) (cons 'port file))
+ ((string? data) data)
((eq? keys #t) "")
(else (->string keys)))
;; The next boundary must always start on a new line
@@ -809,7 +812,8 @@
((and (list? writer)
(any (lambda (x)
(and (pair? x) (pair? (cdr x))
- (eq? (cadr x) file:)))
+ (or (kv-ref (cdr x) file:)
+ (kv-ref (cdr x) data:))))
writer))
(let ((bd (conc "----------------Multipart-=_"
(gensym 'boundary) "=_=" (current-process-id)