           (setf elfeed-curl--refcount 1))
         (setf (process-sentinel process) #'elfeed-curl--sentinel)))))
 
-(defun elfeed-curl--request-key (url headers)
+(defun elfeed-curl--request-key (url headers method data)
   "Try to fetch URLs with matching keys at the same time."
   (unless (listp url)
     (let* ((urlobj (url-generic-parse-url url)))
       (list (url-type urlobj)
             (url-host urlobj)
             (url-portspec urlobj)
-            headers))))
+            headers method data))))
 
 (defun elfeed-curl--queue-consolidate (queue-in)
   "Group compatible requests together and return a new queue.
 Compatible means the requests have the same protocol, domain,
-port, and headers, allowing them to be used safely in the same
-curl invocation."
+port, headers, method, and body, allowing them to be used safely
+in the same curl invocation."
   (let ((table (make-hash-table :test 'equal))
         (keys ())
         (queue-out ()))
     (dolist (entry queue-in)
-      (cl-destructuring-bind (url _ headers) entry
-        (let* ((key (elfeed-curl--request-key url headers)))
+      (cl-destructuring-bind (url _ headers method data) entry
+        (let* ((key (elfeed-curl--request-key url headers method data)))
           (push key keys)
           (push entry (gethash key table nil)))))
     (dolist (key (nreverse keys))

    (dolist (header headers)
      (cl-destructuring-bind (key . value) header
        (push (format "-H%s: %s" key value) args)))
    (setf args (nconc (reverse elfeed-curl-extra-arguments) args))
    (if (listp url)
        (nconc (nreverse args) url)

        (when entry
          (let ((rotated (list (nreverse (cl-mapcar #'car entry))
                               (nreverse (cl-mapcar #'cadr entry))
                               (cl-caddar entry)
                               (elt (car entry) 3)
                               (elt (car entry) 4))))
            (push rotated queue-out)
            (setf (gethash key table) nil)))))
    (nreverse queue-out)))
